图像识别基于模板匹配算法实现花朵分类matlab源码
Posted 博主QQ2449341593
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像识别基于模板匹配算法实现花朵分类matlab源码相关的知识,希望对你有一定的参考价值。
基于欧式距离的模板匹配就是遍历被匹配图的每一个像素,然后计算以该像素为中心,和模板图重叠部分的像素的欧式距离,当模板图越大时,计算就急剧增加,因此做优化才能有真正的实用价值。
两个标量的欧式距离表达式为 (a - b) * (a - b),展开后为 a^2 + b^ 2 - 2ab,我们每一个像素点的计算就是WM * HM个像素色阶值的距离的累加和(WM和HM分别为模板图的宽度和高度),模板匹配中,模板图所有像素的平方和是固定的,可以提前计算,而被匹配图中每个像素点周边WM * HM的像素的平方和可以使用类似BoxBlur中懒惰算法快速的得到,而只有两者的成绩项是必须每个点重新计算,这也是整个计算过程中最为耗时的部分,如果直接用C的代码写出来,恐怕等到花儿都谢了。
end
%**************************************************************************
%****
disp('采用直方图匹配,在给定的距离值以内的图片名称数为:');
distance_num
disp('采用直方图匹配,在给定的距离值以内的图片数目为:');
length(distance_num)
%**************************************************************************
figure(1)
num = length(distance_num); %查找到的累积直方图匹配的图像个数
ref =[sname,num2str(mo),'.jpg']; %待检索的图像
ref_img = imread(ref); %打开图像
subplot(num+1,2,1);
imshow(ref_img);
title('待匹配图像')
h1=IMHISTS(ref_img); %对原图像求取直方图
subplot(num+1,2,2);
bar(h1,0.075,'b');
axis([0 255 0 4000]);
title('待匹配图像的直方图');
for i = 1:num
match = [sname,num2str(distance_num(i)),'.jpg']; %数据库图像
match_img = imread(match); %打开图像
subplot(num+1,2,2*i+1);
imshow(match_img);
ttxt=sprintf('第%d匹配图像',i);title(ttxt);
h2=IMHISTS(match_img); %对匹配图像求取直方图
subplot(num+1,2,2*i+2);
bar(h2,0.075,'b');
axis([0 255 0 4000]);
ttxt=sprintf('第%d匹配图像直方图',i);title(ttxt);
end
similar = ones(1,num);
rec_tang_1=center_rectangle(ref_img);
for i = 1:num
match = [sname,num2str(distance_num(i)),'.jpg'];%数据库图像
match_img = imread(match); %打开图像
rec_tang = center_rectangle(match_img);
for j = 1:6
similar(i) = similar(i) * (1- abs(rec_tang_1(j)-rec_tang(j)) / (rec_tang_1(j)+rec_tang(j)) );
end
end
similar_num=mo
for i=1:num
if abs(i-mo)>0
if similar(i)<=similar_const
similar_num=[similar_num,i];
end
end
end
%**************************************************************************
%****
disp('采用形状匹配,在给定的距离值以内的图片名称数为:');
similar_num
disp('采用形状匹配,在给定的距离值以内的图片数目为:');
length(similar_num)
%**************************************************************************
num=length(similar_num);
figure(2)
for i = 1:num
match = [sname,num2str(similar_num(i)),'.jpg']; %数据库图像
match_img = imread(match); %打开图像
subplot(num,1,i);
imshow(match_img);
ttxt=sprintf('第%d匹配图像',i);title(ttxt);
end
完整代码或仿真咨询QQ1575304183
以上是关于图像识别基于模板匹配算法实现花朵分类matlab源码的主要内容,如果未能解决你的问题,请参考以下文章
交通标志识别基于模板匹配算法实现交通标志识别matlab源码