OpenCV 例程200篇233. 区域特征之矩不变量
Posted 小白YouCans
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV 例程200篇233. 区域特征之矩不变量相关的知识,希望对你有一定的参考价值。
『youcans 的 OpenCV 例程200篇 - 总目录』
【youcans 的 OpenCV 例程200篇】233. 区域特征之矩不变量
4.4 区域特征之矩不变量
矩是概率与统计中的一个概念,是随机变量的一种数字特征。矩函数在图像分析中有着广泛的应用,如模式识别、目标分类、图像编码与重构等。
把图像的像素坐标视为二维随机变量 (X,Y),就可以用矩来描述灰度图像的特征。
图像矩是对特征进行参数描述的一种算法,通常描述了图像形状的全局特征,并提供了大量的关于该图像不同类型的几何特性信息,比如大小、位置、方向及形状等。
当图像发生平移时,几何距 m p q m_pq mpq 也会发生变化;中心矩 m u p q mu_pq mupq 具有平移不变性,但在图像旋转时会发生变化;归一化中心距不仅具有平移不变性,而且具有比例不变性(尺度不变性)。
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个键值对。
返回值 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−3nu12)(nu30+nu12)[(nu30+nu12)2−3(nu21+nu03)2](3nu21−nu03)(nu21+nu03)[3(nu30+nu12)2−(nu21+nu03)2](nu20−nu02)[(nu30+nu12)2−(nu21+nu03)2]4nu11(nu30+nu12)(nu21+nu03)(3nu21−nu03)(nu30+nu12以上是关于OpenCV 例程200篇233. 区域特征之矩不变量的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV 例程200篇226. 区域特征之紧致度/圆度/偏心率