转载请注明出处 https://mp.csdn.net/console/editor/html/105172749
接续上一节内容(颜色特征),本文主要介绍形状特征,并给出matlab上实现的demo。
形状特征有两类表示方法,一类是轮廓特征,一类是区域特征。图像的轮廓特征主要针对物体的外边界;而图像的区域特征则关系到整个形状区域。下面将介绍几种典型的形状特征描述方法:
轮廓是一系列相连的点组成的曲线,代表了物体的基本外形。其与边缘的不同:(1)轮廓是连续的,边缘并不全都连续;(2)边缘主要作为图像的物体特征;而轮廓主要用来分析物体的形态(如周长和面积);(3)边缘包括轮廓。一般在二值图像中寻找轮廓,寻找轮廓是针对白色物体,即物体是白色,而背景是黑色。
通过对边界特征的描述来获取图像的形状参数。其中Hough变换检测平行直线和边界方向直方图方法是经典方法。
Hough变换是利用图像全局特性而将边缘像素连接起来,组成区域封闭边界的一种方法,其基本思想是点-线的对偶性。
边界方向直方图:首先微分图像求得图像边缘,2)做出关于边缘大小和方向的直方图,通常的方法是构造图像灰度梯度方向矩阵。
傅里叶形状描述符(Fourier shape deors)基本思想是用物体边界的傅里叶变换作为形状描述,利用区域边界的封闭性和周期性,将二维问题转换为一维问题。
由边界点导出三种形状表达:曲率函数、质心距离、复坐标函数。
形状的表达和匹配采用更为简单的区域特征描述方法,如采用有关形状定量测量(如矩、面积、周长等)的形状参数法。——具体看后文——矩的介绍。
需要说明的是:形状参数的提取,必须以图像处理及图像分割为前提,参数的准确性必然受到分割效果的影响,对分割效果很差的图像,形状参数甚至无法提取。
利用目标所占区域的矩作为形状描述参数。
近年来,在形状的表示和匹配方面的工作还包括有限元法(Finite Element Method, FEM)、旋转函数(Turning)和小波描述符(Wavelet Deor)等方法。
矩用来抽取图像(块)的特征。图像中,低阶矩反映低频(主要的)信息,高阶矩反映高频(细节)信息。从一幅图像计算出来的矩集,不仅可以描述图像形状的全局特征,还可以提供大量关于该图像不同的几何特征信息,如大小、位置、方向和形状等。矩函数在图像分析中有广泛应用,如模式识别、目标分类、目标识别与方位估计等。
普通矩的计算:
图像矩的计算,是普通矩的离散化。对于强度为fx,y 的像素点,(p+q) 阶矩可定义为:
其中,C与R分别表示图像的列与行。
以目标区域的质心为中心构建中心矩,那么矩的计算永远是目标区域中的点相对于目标区域的质心,而与目标区域的位置无关,即具备了平移不变性。
目标区域的质心坐标:
根据求得的质心坐标,可以构造出中心距:
为抵消尺度变化对中心矩的影响,利用零阶中心矩u00 对各阶中心矩进行归一化处理,得到归一化中心矩:
零阶矩表示目标区域的质量(面积),如果目标区域的尺度发生变化,其零阶中心距也会相应发生改变,使得矩具备尺度不变性。
利用二阶和三阶规格中心距可推导出以下7个不变矩组(Φ1 ~Φ7 ),他们在图像平移、旋转和比例变化时保持不变。
Φ1=η20+η02
Φ2=(η20-η02)2+4η112
Φ3=(η30-3η12)2+(3η21-η03)2
Φ4=(η30+η12)2+(η21+η03)2
Φ5=η30-3η12η30+η12η30+η122-3η21+η032+3η21-η03η21+η033η30+η122-η21+η032
Φ6=η20-η02η30+η122-η21+η032+4η11(η30+η12)(η21+η03)
Φ7=3η21-η03η21+η03η30+η122-3η21+η032-η30-3η12η21+η033η30+η122-η21+η032
具体实现代码
function n = FcnHuSquare( oriImg )
[m,n,~] = size(oriImg);
% 图像灰度化
grayImg = rgb2gray(oriImg);
% canny边缘检测提取边缘,保留边缘灰度图像
edgeImg = edge( grayImg, 'canny' );
zerosIndex = edgeImg==0 ;
grayImg(zerosIndex)=0;
% 图像二值化
bwImg = zeros( m,n );
level = graythresh(grayImg);
thresh = level*255;
onesIndex = grayImg>=thresh ;
bwImg(onesIndex) = 1;
%% 计算图像质心
m00 = sum( sum(bwImg) ); % 零阶矩
m01 = 0; % 一阶矩的初值
m10 = 0; % 一阶矩的初值
for i = 1:m
for j = 1:n
m01 = bwImg(i,j)*j + m01;
m10 = bwImg(i,j)*i + m10;
end
end
I = m10/m00;
J = m01/m00;
% 计算图像中心矩
u11 = 0;
u20 = 0; u02 = 0;
u30 = 0; u03 = 0;
u12 = 0; u21 = 0;
for i = 1:m
for j = 1:n
u11 = bwImg(i, j)*(i-I)*(j-J) + u11;
u20 = bwImg(i, j)*(i-I)^2 + u20;
u02 = bwImg(i, j)*(j-J)^2 + u02;
u30 = bwImg(i, j)*(i-I)^3 + u30;
u03 = bwImg(i, j)*(j-J)^3 + u03;
u21 = bwImg(i, j)*(i-I)^2*(j-J) + u21;
u12 = bwImg(i, j)*(i-I)*(j-J)^2 + u12;
end
end
u20 = u20/(m00^2);
u02 = u02/(m00^2);
u11 = u11/(m00^2);
u30 = u30/(m00^(5/2));
u03 = u03/(m00^(5/2));
u12 = u12/(m00^(5/2));
u21 = u21/(m00^(5/2));
% 7个Hu不变矩
n(1) = u20 + u02;
n(2) = (u20-u02)^2 + 4*u11^2;
n(3) = (u30-3*u12)^2 + (3*u21-u03)^2;
n(4) = (u30+u12)^2 + (u21+u03)^2;
n(5) = (u30-3*u12)*(u30+u12)*( (u30+u12)^2-3*(u21+u03)^2 ) + ...
(3*u21-u03)*(u21+u03)*( 3*(u30+u12)^2-(u21+u03)^2 );
n(6) = (u20-u02)*( (u30+u12)^2-(u21+u03)^2 ) + 4*u11*(u30+u12)*(u21+u03);
n(7) = (3*u21-u03)*(u21+u03)*( (u30+u12)^2-3*(u21+u03)^2 ) - ...
(u30-3*u12)*(u21+u03)*( 3*(u30+u12)^2-(u21+u03)^2 );
end