【youcans 的 OpenCV 例程200篇】196.图像的矩和不变矩(cv.moments)

2. 轮廓的特征描述

在对实际图像进行轮廓查找时,得到的轮廓数量很多。获取轮廓后,通常基于轮廓的特征进行筛选、识别和处理。例如,基于轮廓的周长和面积对轮廓进行筛选,然后绘制筛选的目标轮廓或其最小外接矩形。

常用的轮廓特征,包括图像距、轮廓周长、轮廓近似、凸包、边界矩形、拟合图形等特征。

矩是概率与统计中的一个概念,是随机变量的一种数字特征。把图像的像素坐标看成二维随机变量 (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
零阶矩反映图像灰度的总和,一阶矩描述图像的灰度中心,二阶矩描述图像的主轴方向角,三阶矩描述了投影的扭曲程度,四阶矩描述投影峰度。

  • *中心矩

中间 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

  • *归一化的中心矩

最后 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} = \frac{mn_{pq}}{(mn_{00})^r}, \quad 1
当图像发生平移时,几何距 m p q m_{pq}m p q ​ 也会发生变化;中心矩 m u p q mu_{pq}m u p q ​ 具有平移不变性,但在图像旋转时会发生变化;归一化中心距不仅具有平移不变性,而且具有比例不变性(尺度不变性)。

返回值 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 ] \begin{aligned} 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] \end{aligned}M 1 =M 2 =M 3 =M 4 =M 5 =+M 6 =M 7 =−​n u 2 0 ​+n u 0 2 ​(n u 2 0 ​−n u 0 2 ​)2 +4 (n u 1 1 ​)2 (n u 3 0 ​−3 n u 1 2 ​)2 +(3 n u 2 1 ​−n u 0 3 ​)2 (n u 3 0 ​+n u 1 2 ​)2 +(n u 2 1 ​+n u 0 3 ​)2 (n u 3 0 ​−3 n u 1 2 ​)(n u 3 0 ​+n u 1 2 ​)(n u 3 0 ​+n u 1 2 ​)2 −3 (n u 2 1 ​+n u 0 3 ​)2 (n u 2 1 ​+n u 0 3 ​)3 (n u 3 0 ​+n u 1 2 ​)2 −(n u 2 1 ​+n u 0 3 ​)2 [(n u 3 0 ​+n u 1 2 ​)2 −(n u 2 1 ​+n u 0 3 ​)2 ]+4 n u 1 1 ​(n u 3 0 ​+n u 1 2 ​)(n u 2 1 ​+n u 0 3 ​)(3 n u 2 1 ​−n u 0 3 ​)(n u 3 0 ​+n u 1 2 ​)(n u 3 0 ​+n u 1 2 ​)2 −3 (n u 2 1 ​+n u 0 3 ​)2 (n u 2 1 ​+n u 0 3 ​)[3 (n u 3 0 ​+n u 1 2 ​)2 −(n u 2 1 ​+n u 0 3 ​)2 ]​

Hu 利用二阶和三阶归一化中心距构造了 7 个不变矩 M1~M7, 在连续图像下具有平移、灰度、尺度、旋转不变性, 是高度浓缩的图像特征。 不变矩能够描述图像的整体性质,从而在边缘提取、图像匹配及目标识别中得到了广泛的应用。

在实际的图像识别中,只有 M1 和 M2 的不变性比较好,而 M3~M7 的误差较大,识别率比较低。Hu不变矩对于物体的形状描述比较稳定,比较适合识别较大尺寸的物体,如水果的形状、车牌的字符等。


    img = cv2.imread("../images/pattern1.png", flags=1)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    moments = cv2.moments(gray)
    huM = cv2.HuMoments(moments)

    print("Moments of gray:\n", moments)
    print("HuMoments of gray:\n", huM)

运行结果:

Moments of gray:
 {'m00': 57220590.0, 'm10': 13719961613.0, 'm01': 17916046951.0, 'm20': 4341053990449.0,
 'm11': 4299435737123.0, 'm02': 7389498908905.0, 'm30': 1545593411457635.0, 'm21': 1359833719777393.0,
 'm12': 1774311676022503.0, 'm03': 3399191343099955.0, 'mu20': 1051375455813.2412, 'mu11': 3648566378.5934014,
 'mu02': 1779896869666.3901, 'mu30': 541955362253.2455, 'mu21': -1121200313849.6638, 'mu12': 223412644453.03842,
 'mu03': -29085806193109.273, 'nu20': 0.00032110951253946555, 'nu11': 1.114339663171786e-06, 'nu02': 0.0005436134285130389,
 'nu30': 2.1881782097659954e-08, 'nu21': -4.5269154369990506e-08, 'nu12': 9.020423348997114e-09, 'nu03': -1.1743573688546415e-06}
HuMoments of gray:
 [[ 8.64722941e-04]
 [ 4.95129596e-08]
 [ 1.07861273e-12]
 [ 1.48844380e-12]
 [ 1.88120273e-24]
 [ 3.30591622e-16]
 [-1.33807015e-25]]

(本节完)

版权声明:

OpenCV 例程200篇 总目录-202205更新
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/124998103)

Copyright 2022 youcans, XUPT
Crated:2022-5-28

Original: https://blog.csdn.net/youcans/article/details/124998103
Author: YouCans
Title: 【youcans 的 OpenCV 例程200篇】196.图像的矩和不变矩(cv.moments)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/637123/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球