【树叶识别】HU不变矩树叶识别【Matlab 740期】

一、简介

本课题为基于MATLAB HU不变矩的树叶识别系统。通过计算各种树叶的几何特征,判断树叶属于什么类型。
几何矩是由Hu(Visual pattern recognition by moment invariants)在1962年提出的,具有平移、旋转和尺度不变性。
【树叶识别】HU不变矩树叶识别【Matlab 740期】
【树叶识别】HU不变矩树叶识别【Matlab 740期】
这7个不变矩构成一组特征量,Hu.M.K在1962年证明了他们具有旋转,缩放和平移不变性。
实际上,在对图片中物体的识别过程中,只有 和 不变性保持的比较好,其他的几个不变矩带来的误差比较大,有学者认为只有基于二阶矩的不变矩对二维物体的描述才是真正的具有旋转、缩放和平移不变性( 和 刚好都是由二阶矩组成的)。不过我没有证明是否是真的事这样的。
由Hu矩组成的特征量对图片进行识别,优点就是速度很快,缺点是识别率比较低,我做过手势识别,对于已经分割好的手势轮廓图,识别率也就30%左右,对于纹理比较丰富的图片,识别率更是不堪入眼,只有10%左右。这一部分原因是由于Hu不变矩只用到低阶矩(最多也就用到三阶矩),对于图像的细节未能很好的描述出来,导致对图像的描述不够完整。
Hu不变矩一般用来识别图像中大的物体,对于物体的形状描述得比较好,图像的纹理特征不能太复杂,像识别水果的形状,或者对于车牌中的简单字符的识别效果会相对好一些。
定义如下:
① (p+q)阶不变矩定义:
② 对于数字图像,离散化,定义为:
③ 归一化中心矩定义:
④Hu矩定义

二、源代码

close all
clear all
clc
tic
f=imread('test.tif');%读入测试图
A=double(f);%把灰度值转化为双精度
g=mat2gray(A);%灰度值归一化0到1之间
k=im2bw(g,0.4);%二值化,阈值0.4
 imshow(k);
k=1-k;%反转

se=strel('disk',6);
fc=imclose(k,se);%闭运算
fc=imfill(fc,'hole');%填洞

figure,imshow(fc);
se=strel('disk',8);
fco=imopen(fc,se);%开运算
figure,imshow(fco);

BW=fco;
trainset=train(); 
trainset2=train2();%训练样本
imshow(f,[]);
[L,num] = bwlabel(BW); %标记
for t=1:num
    [r c]=find(L==t);
    r1=min(r);
    c1=min(c);
    r2=max(r);
    c2=max(c);
    IM{t}=BW(r1:r2,c1:c2);

%          figure;imshow(BW(r1:r2,c1:c2))
    phi=invmoments(IM{t});  %提取不变矩特征
    Pset{t}=phi; 
    d(t)=norm(abs(log(Pset{t}(1:7)))-abs(log(trainset(1:7)))); %与训练样本进行匹配
d2(t)=norm(abs(log(Pset{t}(1:7)))-abs(log(trainset2(1:7))));
  
 
end
function [trainset]= train( )
%TRAIN Summary of this function goes here
%   Detailed explanation goes here

     f= imread('train_1.tif');
 A=double(f);
g=mat2gray(A);
k=im2bw(g,0.4);

k=1-k;
se=strel('disk',6);
fc=imclose(k,se);
fc=imfill(fc,'hole');

se=strel('disk',15);
fco=imopen(fc,se);
%BW=im2bw(I,0.001);
%BW=imfill(BW,'hole'); 
%SE=strel('disk',10);
%BW=imopen(BW,SE);
% figure;imshow(BW);
BW=fco;
[r c]=find(BW==1);
    r1=min(r);
    c1=min(c);
    r2=max(r);
    c2=max(c);
    function phi = invmoments(F)
%INVMOMENTS Compute invariant moments of image.
%   PHI = INVMOMENTS(F) computes the moment invariants of the image
%   F. PHI is a seven-element row vector containing the moment
%   invariants as defined in equations (11.3-17) through (11.3-23) of
%   Gonzalez and Woods, Digital Image Processing, 2nd Ed.
%
%   F must be a 2-D, real, nonsparse, numeric or logical matrix.

%   Copyright 2002-2004 R. C. Gonzalez, R. E. Woods, & S. L. Eddins
%   Digital Image Processing Using MATLAB, Prentice-Hall, 2004
%   $Revision: 1.5 $  $Date: 2003/11/21 14:39:19 $

if (ndims(F) ~= 2) | issparse(F) | ~isreal(F) | ~(isnumeric(F) | ...
                                                    islogical(F))
   error(['F must be a 2-D, real, nonsparse, numeric or logical ' ...
          'matrix.']); 
end

F = double(F);

phi = compute_phi(compute_eta(compute_m(F)));
  
%-------------------------------------------------------------------%
function m = compute_m(F)

[M, N] = size(F);
[x, y] = meshgrid(1:N, 1:M);
  
% Turn x, y, and F into column vectors to make the summations a bit
% easier to compute in the following.
x = x(:);
y = y(:);
F = F(:);
  
% DIP equation (11.3-12)
m.m00 = sum(F);
% Protect against divide-by-zero warnings.
if (m.m00 == 0)
   m.m00 = eps;
end

三、运行结果

【树叶识别】HU不变矩树叶识别【Matlab 740期】

四、备注

完整代码或者代写添加QQ 912100926

上一篇:740. 删除并获得点数


下一篇:740. 删除并获得点数