资源简介

matlab源码,计算Hu的7个不变矩,可以直接使用,适用于新手,中文注释,简单易懂。matlab源码,计算Hu的7个不变矩,可以直接使用,适用于新手,中文注释,简单易懂。

资源截图

代码片段和文件信息

%形状特征,Hu的七个不变矩
%The Author : LongJie Shi
%Data : 2018.9.4
function Hu = Hu_Moment(gray_image)%函数命名,输入灰度图像

format short e%有效数字5位+指数3位
image = double(gray_image);%图像矩阵运算时的数据类型是double类型
m00 = sum(sum(image));%0阶矩图像灰度值的和,第一个sum先计算列向量的和第二个sum计算总和
%1阶中心矩赋值为0
m10 = 0;
m01 = 0;
[rowcol] = size(image);%计算图像尺寸储存在[rowcol]
for i = 1:row                 %计算1阶中心矩的值
    for j = 1:col
        m10 = m10 + i*image(ij);
        m01 = m01 + j*image(ij);
    end
end
%归一化的1阶矩,代表图像重心
n10 = m10/m00;    
n01 = m01/m00;

%2阶3阶中心矩赋初值为0
n20 = 0;n02 = 0;n11 = 0;n30 = 0;n12 = 0;n21 = 0;n03 = 0;
for i = 1:row                          %计算2阶3阶中心矩
    for j = 1:col
        n20=n20+i^2*image(ij);
        n02=n02+j^2*image(ij);
        n11=n11+i*j*image(ij);
        n30=n30+i^3*image(ij);
        n03=n03+j^3*image(ij);
        n12=n12+i*j^2*image(ij);
        n21=n21+i^2*j*image(ij);
    end
end
%归一化的2阶3阶中心矩
n20 = n20/m00^2;
n02=n02/m00^2;
n11=n11/m00^2;
n30=n30/m00^2.5;
n03=n03/m00^2.5;
n12=n12/m00^2.5;
n21=n21/m00^2.5;

%Hu的七个不变矩由二阶三阶矩的线性组合构成
h1 = n20 + n02;                   
h2 = (n20-n02)^2 + 4*(n11)^2;
h3 = (n30-3*n12)^2 + (3*n21-n03)^2;  
h4 = (n30+n12)^2 + (n21+n03)^2;
h5 = (n30-3*n12)*(n30+n12)*((n30+n12)^2-3*(n21+n03)^2)+(3*n21-n03)*(n21+n03)*(3*(n30+n12)^2-(n21+n03)^2);
h6 = (n20-n02)*((n30+n12)^2-(n21+n03)^2)+4*n11*(n30+n12)*(n21+n03);
h7 = (3*n21-n03)*(n30+n12)*((n30+n12)^2-3*(n21+n03)^2)+(3*n12-n30)*(n21+n03)*(3*(n30+n12)^2-(n21+n03)^2);
%利用Hu的不变矩作为特征向量
Hu = [h1 h2 h3 h4 h5 h6 h7];   

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        1719  2018-09-04 10:06  matlab源码计算Hu的七个不变矩\Hu_Moment.m
     文件      118742  2018-09-04 10:12  matlab源码计算Hu的七个不变矩\Hu_Moment.mat

评论

共有 条评论