youcans 的 OpenCV 例程200篇196.图像的矩和不变矩(cv.moments)
Posted 小白YouCans
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了youcans 的 OpenCV 例程200篇196.图像的矩和不变矩(cv.moments)相关的知识,希望对你有一定的参考价值。
【youcans 的 OpenCV 例程200篇】196.图像的矩和不变矩(cv.moments)
2. 轮廓的特征描述
在对实际图像进行轮廓查找时,得到的轮廓数量很多。获取轮廓后,通常基于轮廓的特征进行筛选、识别和处理。例如,基于轮廓的周长和面积对轮廓进行筛选,然后绘制筛选的目标轮廓或其最小外接矩形。
常用的轮廓特征,包括图像距、轮廓周长、轮廓近似、凸包、边界矩形、拟合图形等特征。
2.1 图像的矩(image moments)
矩是概率与统计中的一个概念,是随机变量的一种数字特征。把图像的像素坐标看成二维随机变量 (X,Y),就可以用概率密度函数来表示一幅灰度图像,因此可以用矩来描述灰度图像的特征。
矩函数在图像分析中有着广泛的应用,如模式识别、目标分类、图像编码与重构等。图像矩通常描述了图像形状的全局特征,并提供了大量的关于该图像不同类型的几何特性信息,比如大小、位置、方向及形状等。图像矩的特征描述能力被广泛应用于目标识别与方位估计。
图像矩有零阶矩、一阶矩、二阶矩、三阶矩,等等。零阶矩与物体的质量有关,一阶矩与形状有关,由零阶矩与一阶矩可以求出重心,二阶矩显示曲线围绕直线平均值的扩展程度,三阶矩则是关于平均值的对称性的测量。
Hu 利用二阶和三阶归一化中心距构造了 7 个不变矩 M1~M7, 在连续图像下具有平移、灰度、尺度、旋转不变性, 是高度浓缩的图像特征。不变矩能够描述图像的整体性质,从而在边缘提取、图像匹配及目标识别中得到了广泛的应用。
OpenCV 提供了函数 cv2.moments() 计算图像矩 Mu,函数 cv2.HuMoments() 计算目标轮廓的 Hu 不变矩。
函数说明:
cv.moments(array[, binaryImage]) → Mu
cv.HuMoments(Mu[, hu]) → Hu
函数 cv2.moments() 以字典(Dict)形式返回图像的矩。
函数 cv2.HuMoments() 以列表(List)形式返回目标轮廓的 Hu 不变矩。
参数说明:
array:是一幅单通道 8-bits 图像,或一个二维浮点数组(如轮廓列表 contours 中的一个轮廓)
binaryImage:指示输入图像是否二值图像
返回值 Mu 是字典格式,包括 24个键值对。
[‘m00’,‘m10’,‘m01’,‘m20’,‘m11’,‘m02’,‘m30’,‘m21’,‘m12’,‘m03’,‘mu20’,‘mu11’,‘mu02’,‘mu30’,‘mu21’,‘mu12’,‘mu03’,‘nu20’,‘nu11’,‘nu02’,‘nu30’,‘nu21’,nu12’,‘nu03’]
- 几何矩
前 10个键值 [‘m00’,‘m10’,‘m01’,‘m20’,‘m11’,‘m02’,‘m30’,‘m21’,‘m12’,‘m03’] 代表几何矩(p+q阶矩),也称原点矩,由以下公式计算得到:
m
p
q
=
∑
y
=
1
N
∑
x
=
1
M
x
p
y
q
f
(
x
,
y
)
,
p
+
q
<
4
m_pq = \\sum^N_y=1 \\sum^M_x=1 x^p y^q f(x,y), \\quad p+q<4
mpq=y=1∑Nx=1∑Mxpyqf(x,y),p+q<4
零阶矩反映图像灰度的总和,一阶矩描述图像的灰度中心,二阶矩描述图像的主轴方向角,三阶矩描述了投影的扭曲程度,四阶矩描述投影峰度。
- 中心矩
中间 7 个键值 [‘mu20’,‘mu11’,‘mu02’,‘mu30’,‘mu21’,‘mu12’,‘mu03’] 代表中心矩,由以下公式计算得到:
m
u
p
q
=
∑
y
=
1
N
∑
x
=
1
M
(
x
−
C
x
)
p
(
y
−
C
y
)
q
f
(
x
,
y
)
,
1
<
p
+
q
<
4
mu_pq = \\sum^N_y=1 \\sum^M_x=1 (x-Cx)^p (y-Cy)^q f(x,y), \\quad 1<p+q<4
mupq=y=1∑Nx=1∑M(x−Cx)p(y−Cy)qf(x,y),1<p+q<4
- 归一化的中心矩
最后 7 个键值 [‘nu20’,‘nu11’,‘nu02’,‘nu30’,‘nu21’,nu12’,‘nu03’] 代表归一化的中心矩,由以下公式计算得到:
n
u
p
q
=
m
n
p
q
(
m
n
00
)
r
,
1
<
p
+
q
<
4
,
r
=
(
p
+
q
)
/
2
+
1
nu_pq = \\fracmn_pq(mn_00)^r, \\quad 1<p+q<4, r=(p+q)/2+1
nupq=(mn00)rmnpq,1<p+q<4,r=(p+q)/2+1
当图像发生平移时,几何距
m
p
q
m_pq
mpq 也会发生变化;中心矩
m
u
p
q
mu_pq
mupq 具有平移不变性,但在图像旋转时会发生变化;归一化中心距不仅具有平移不变性,而且具有比例不变性(尺度不变性)。
返回值 Hu 是一个列表(List),包括 7 个不变矩 M1~M7,浮点数。
具体定义和计算公式为:
M 1 = n u 20 + n u 02 M 2 = ( n u 20 − n u 02 ) 2 + 4 ( n u 11 ) 2 M 3 = ( n u 30 − 3 n u 12 ) 2 + ( 3 n u 21 − n u 03 ) 2 M 4 = ( n u 30 + n u 12 ) 2 + ( n u 21 + n u 03 ) 2 M 5 = ( n u 30 − 3 n u 12 ) ( n u 30 + n u 12 ) [ ( n u 30 + n u 12 ) 2 − 3 ( n u 21 + n u 03 ) 2 ] + ( 3 n u 21 − n u 03 ) ( n u 21 + n u 03 ) [ 3 ( n u 30 + n u 12 ) 2 − ( n u 21 + n u 03 ) 2 ] M 6 = ( n u 20 − n u 02 ) [ ( n u 30 + n u 12 ) 2 − ( n u 21 + n u 03 ) 2 ] + 4 n u 11 ( n u 30 + n u 12 ) ( n u 21 + n u 03 ) M 7 = ( 3 n u 21 − n u 03 ) ( n u 30 + n u 12 ) [ ( n u 30 + n u 12 ) 2 − 3 ( n u 21 + n u 03 ) 2 ] − ( n u 30 − 3 n u 12 ) ( n u 21 + n u 03 ) [ 3 ( n u 30 + n u 12 ) 2 − ( n u 21 + n u 03 ) 2 ] \\beginaligned M1 = &nu_20 + nu_02 \\\\ M2 = &(nu_20 - nu_02)^2 + 4(nu_11)^2 \\\\ M3 = &(nu_30 - 3nu_12)^2 + (3nu_21 - nu_03)^2 \\\\ M4 = &(nu_30 + nu_12)^2 + (nu_21 + nu_03)^2\\\\ M5 = &(nu_30-3nu_12)(nu_30+nu_12)[(nu_30+nu_12)^2-3(nu_21+nu_03)^2]\\\\ +&(3nu_21-nu_03)(nu_21+nu_03)[3(nu_30+nu_12)^2-(nu_21+nu_03)^2]\\\\ M6 = &(nu_20 - nu_02) [(nu_30+nu_12)^2-(nu_21+nu_03)^2] + 4nu_11(nu_30 + nu_12)(nu_21 + nu_03)\\\\ M7 = &(3nu_21-nu_03)(nu_30 + nu_12)[(nu_30+nu_12)^2-3(nu_21+nu_03)^2]\\\\ -&(nu_30-3nu_12)(nu_21+nu_03)[3(nu_30+nu_12)^2-(nu_21+nu_03)^2] \\endaligned M1=M2=M3=M4=M5=+M6=M7=−nu20+nu02(nu20−nu02)2+4(nu11)2(nu30−3nu12)2+(3nu21−nu03)2(nu30+nu12)2+(nu21+nu03)2(nu30−3nu以上是关于youcans 的 OpenCV 例程200篇196.图像的矩和不变矩(cv.moments)的主要内容,如果未能解决你的问题,请参考以下文章
youcans 的 OpenCV 例程200篇183.基于轮廓标记的分水岭算法
youcans 的 OpenCV 例程200篇182.基于形态学梯度的分水岭算法