矩特征
比较两个轮廓最简单的方法是比较二者的轮廓矩。轮廓矩代表了一个轮廓、一幅图像、一组点集的全局特征。矩信息包含了对应对象不同类型的几何特征,例如大小、位置、角度、形状等
1.获取轮廓特征
使用cv2.moments()获取的轮廓特征称为轮轮廓,轮轮廓作为描述一个轮廓的重要特征,使用轮轮廓可以方便地比较两个轮廓。
retval=cv2.moments(array[,binaryImage})
- array:可以是灰度图或者二值图,也可以为点集,当作为点集时,该函数将这些点集当作轮廓的顶点,从而将整个点集作为一条轮廓
- binaryImage:当此参数为True时,array内所以的非零值被处理为1
- retval:此返回值为据特征,主要包含空间矩,中心矩,归一化矩
(1)空间矩
- 零阶矩:m00
- 一阶矩:m10,m01
- 二阶矩:m20,m11,m02
- 三阶矩:m30,m21,m12,m03
(2)中心矩
- 二阶中心矩:mu20,mu11,mu02
- 三阶中心矩:mu30,mu21,mu12,mu03
(3)归一化中心矩
- 二阶 Hu 矩:nu20,nu11,nu02
- 三阶 Hu 矩:nu30,nu21,nu12,nu13
如果两个轮廓的矩一致,那么这两个轮廓就是一致的,可以通过返回的特征值来比较两个轮廓是否相似。不管两个轮廓出现在图像的哪个位置,都可通过函数cv2.monment()的m00矩来判断面积是否一致(零阶矩表示一个轮廓的面积)
在位置发生变化,虽然轮廓的面积和周长等特征不变,但是更高阶特征会随着位置的变化而变化。在进行比较不同位置的两个对象的一致性的时候通常引入中心矩,中心矩通过减去均值而获取平移的不变性,从而使其忽略两个对象的位置关系,来比较不同位置上两对象的一致性。
除了考虑平移的不变性,还需要考虑在经过缩放后的对象的一致性,即让图像在缩放前后具有同样的特征值。此时引进归一化中心矩,通过除以物体总尺寸来获得缩放不变性、归一化矩属性值不仅具有平移不变性,还具有缩放不变性