MATLAB模板匹配花朵分类

MATLAB模板匹配花朵分类

 

一、简介

该课题为基于颜色的花朵分类。带界面GUI

二、源代码

clear;

mo = 1;%-选取第?幅图像

num=5;%图片总数量

distance_const=0.8;%设定直方图距离

similar_const=0.5;%设定形状匹配相似度

close all;

%获取第一幅图像

sname='C:\Users\lenovo\Desktop\\';%统一修改存储位置,修改路径时只需在此步修改

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);

    

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

function result=center_rectangle(sdata)

%求取图像的中心矩



size(sdata);

[M,N]=size(sdata);

%***************

%m00,miu00,yibu00分别与公式中数字相互对应,并取其音译

%***************

m00=0.0;

m10=0.0;

m01=0.0;



for i=1:M

    for j=1:N

        m00=m00+double(sdata(i,j));

        m10=m10+i*double(sdata(i,j));

        m01=m01+j*double(sdata(i,j));

    end

end

ave_x=m10/m00;

ave_y=m01/m00;

m00;

miu20=0.0;

miu02=0.0;

miu11=0.0;

miu12=0.0;

miu21=0.0;

miu30=0.0;

miu03=0.0;

%求取7个中心矩

for i=1:M

    for j=1:N

        miu20=miu20+(i-ave_x).^2.*(j-ave_y).^0.*double(sdata(i,j));

        miu02=miu02+(i-ave_x).^0.*(j-ave_y).^2.*double(sdata(i,j));

        miu11=miu11+(i-ave_x).^1.*(j-ave_y).^1.*double(sdata(i,j));

        miu12=miu12+(i-ave_x).^1.*(j-ave_y).^2.*double(sdata(i,j));

        miu21=miu21+(i-ave_x).^2.*(j-ave_y).^1.*double(sdata(i,j));

        miu30=miu30+(i-ave_x).^3.*(j-ave_y).^0.*double(sdata(i,j));

        miu03=miu03+(i-ave_x).^0.*(j-ave_y).^3.*double(sdata(i,j));

    end

end

yibu20=miu20/(m00.^((2+0)/2+1));

yibu02=miu02/(m00.^((0+2)/2+1));

yibu11=miu11/(m00.^((1+1)/2+1));

yibu12=miu12/(m00.^((1+2)/2+1));

yibu21=miu21/(m00.^((2+1)/2+1));

yibu30=miu30/(m00.^((3+0)/2+1));

yibu03=miu03/(m00.^((0+3)/2+1));

三、运行结果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值