【图像识别】基于模板匹配实现花朵分类matlab代码

162 阅读1分钟

1 简介

基于直方图实现花朵分类代码​。

2 部分代码

%图一:利用直方图进行图像的匹配
%图二:利用形状进行图像的匹配
%交给你们啦~~~~
%-要求mo<=num
clear;
mo = 1;%-选取第?幅图像
num=5;%图片总数量
distance_const=0.8;%设定直方图距离
similar_const=0.5;%设定形状匹配相似度
close all;
%获取第一幅图像
sname='';%统一修改存储位置,修改路径时只需在此步修改
ss=[sname,num2str(mo),'.jpg'] ; %打开待匹配图像
f1=open_img(ss);                %求待匹配图像的累计直方图
%选择其它待匹配图像
distance=zeros(1,num);
for j=1:num
   sl=[sname,num2str(j),'.jpg']
   f2=open_img(sl);
   %进行直方图的匹配
   d=zeros(1,256);
   for ii=1:256
       d(ii)=(sqrt((f1(ii)-f2(ii)).^2));
   end
   distance(j)=sum(d);
end

distance_num=mo;
for j=1:num
   if distance(j)>0
       if distance(j)<=distance_const
           distance_num=[distance_num,j];
       end
   end
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

3 仿真结果

4 参考文献

[1]王宪保, 杨敬, 肖本督,等. 一种基于机器学习的花朵种类识别方法:, CN110458200A[P]. 2019.

部分理论引用网络文献,若有侵权联系博主删除。

5 MATLAB代码与数据下载地址

见博客主页