对轮廓图进行Hu不变矩特征的提取,用matlab实现,并对代码进行解释
时间: 2023-05-27 22:01:48 浏览: 165
1. Hu不变矩特征介绍:
Hu不变矩(Hu moments)最初是用于图像识别的方法,是由Hu等人提出的一种特征描述子,不仅对于图像平移、旋转、缩放等变化具有不变性,还能对噪声、抖动等干扰有较强的鲁棒性。通过对图像的Hu矩特征提取,可以得到一组量化的、不变性强的特征向量,用于图像的分类、检索、匹配等任务。
2. 实现步骤:
假设轮廓图像为binary_img,提取过程如下:
1)用bwboundaries获取图像的轮廓边界,得到轮廓像素坐标集合contour;
2)计算轮廓的20个几何矩m(i,j),具体公式见后;
3)根据20个几何矩计算7个Hu不变矩,具体公式见后。
3. 具体公式:
第k个几何矩m(i,j)的计算公式为:m(i,j)=∑_x∑_y x^iy^jI(x,y),其中I(x,y)是图像在(x,y)处的像素值。
Hu moment是基于几何矩的归一化的组合量,定义为:
I_1=η_20+η_02;
I_2=(η_20−η_02)^2+4η_11^2;
I_3=(η_30−3η_12)^2+(3η_21−η_03)^2;
I_4=(η_30+η_12)^2+(η_21+η_03)^2;
I_5=(η_30−3η_12)(η_30+η_12)[(η_30+η_12)^2−3(η_21+η_03)^2]+(3η_21−η_03)(η_21+η_03)[3(η_30+η_12)^2−(η_21+η_03)^2];
I_6=(η_20−η_02)[(η_30+η_12)^2−(η_21+η_03)^2]+4η_11(η_30+η_12)(η_21+η_03);
I_7=(3η_21−η_03)(η_30+η_12)[(η_30+η_12)^2−3(η_21+η_03)^2]−(η_30−3η_12)(η_21+η_03)[3(η_30+η_12)^2−(η_21+η_03)^2];其中:
η_ij=m(i,j)/m^((i+j)/2+1),m表示轮廓的零阶矩。
4. Matlab代码实现:
binary_img=imread('轮廓图像'); %读取轮廓图像
contour=bwboundaries(binary_img); %获取轮廓边界坐标集合
contour=contour{1}; %取第一个轮廓
m=[]; %初始化20个几何矩
for i=0:5
for j=0:5
m(i+1,j+1)=sum((contour(:,1).^i).*(contour(:,2).^j));
end
end
eta=[]; %初始化20个规范化矩
for i=1:6
for j=1:6
eta(i,j)=m(i,j)/(m(1,1)^((i+j)/2+1));
end
end
Hu=[0,0,0,0,0,0,0]; %初始化7个Hu不变矩
Hu(1)=eta(3,1)+eta(1,3);
Hu(2)=(eta(3,1)-eta(1,3))^2+4*eta(2,2)^2;
Hu(3)=(eta(4,1)-3*eta(2,3))^2+(3*eta(3,2)-eta(1,4))^2;
Hu(4)=(eta(4,1)+eta(2,3))^2+(eta(3,2)+eta(1,4))^2;
Hu(5)=(eta(4,1)-3*eta(2,3))*(eta(4,1)+eta(2,3))*((eta(4,1)+eta(2,3))^2-3*(eta(3,2)+eta(1,4))^2)+(3*eta(3,2)-eta(1,4))*(eta(3,2)+eta(1,4))*(3*(eta(4,1)+eta(2,3))^2-(eta(3,2)+eta(1,4))^2);
Hu(6)=(eta(3,1)-eta(1,3))*((eta(4,1)+eta(2,3))^2-(eta(3,2)+eta(1,4))^2)+4*eta(2,2)*(eta(4,1)+eta(2,3))*(eta(3,2)+eta(1,4));
Hu(7)=(3*eta(3,2)-eta(1,4))*(eta(4,1)+eta(2,3))*((eta(4,1)+eta(2,3))^2-3*(eta(3,2)+eta(1,4))^2)-(eta(4,1)-3*eta(2,3))*(eta(3,2)+eta(1,4))*(3*(eta(4,1)+eta(2,3))^2-(eta(3,2)+eta(1,4))^2);
阅读全文