196.图像的矩和不变矩

10. 轮廓与图像分割索引

一、轮廓的特征描述

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

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

二、 图像的矩(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阶矩),也称原点矩,由以下公式计算得到:


  • 零阶矩反映图像灰度的总和,一阶矩描述图像的灰度中心,二阶矩描述图像的主轴方向角,三阶矩描述了投影的扭曲程度,四阶矩描述投影峰度。

中心矩

  • 中间 7 个键值 [‘mu20’,‘mu11’,‘mu02’,‘mu30’,‘mu21’,‘mu12’,‘mu03’] 代表中心矩,由以下公式计算得到:


归一化的中心矩

  • 最后 7 个键值 [‘nu20’,‘nu11’,‘nu02’,‘nu30’,‘nu21’,nu12’,‘nu03’] 代表归一化的中心矩,由以下公式计算得到:


当图像发生平移时,几何距 m_{pq}也会发生变化;中心矩 mu_{pq} 具有平移不变性,但在图像旋转时会发生变化;归一化中心距不仅具有平移不变性,而且具有比例不变性(尺度不变性)

返回值 Hu 是一个列表(List),包括 7 个不变矩 M1~M7,浮点数

  • 具体定义和计算公式为:


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

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

四、例程

  • 12.3:图像的矩和不变矩
import cv2
# 12.3 图像的矩和不变矩
img = cv2.imread(r"E:/OpenCV/pattern1.png", flags=1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 灰度图像

moments = cv2.moments(gray)  # 返回字典,几何矩 mpq, 中心矩 mupq 和归一化矩 nupq
huM = cv2.HuMoments(moments)  # 计算 Hu 不变矩

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

五、资料

youcans_的博客:
https://blog.csdn.net/youcans/article/details/124998103
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容