在OpenCV中,可以很方便的计算多边形区域的3阶特征矩,opencv中的矩主要包括以下几种:空间矩,中心矩和中心归一化矩。
class Moments { public: ...... // 空间矩 double m00, m10, m01, m20, m11, m02, m30, m21, m12, m03;
// 中心矩 double mu20, mu11, mu02, mu30, mu21, mu12, mu03;
// 中心归一化矩 double nu20, nu11, nu02, nu30, nu21, nu12, nu03; }
原型:
Moments moments( InputArray array, bool binaryImage=false );
实践表明,直接用原点矩或中心矩作为图像的特征,不能保证特征同时具有平移、旋转和比例不变性。事实上,如果仅用中心矩表示图像的特征,则特征仅具有平移不变性,如果利用归一化中心矩,则特征不仅具有平移不变性,而且还具有比例不变性,但不具有旋转不变性。
要同时具有平移、旋转和比例变换不变性,直接使用原点矩或中心矩是不行的。为此,首先提出了不变矩,他给出了连续函数矩的定义和关于矩的基本性质,证明了有关矩的平移不变性、旋转不变性以及比例不变性等性质,具体给出了具有平移不变性、旋转不变性和比例不变性的七个不变矩的表达式。
hu矩:
void HuMoments( const Moments& moments, double *);
matchShapes:
double matchShapes( InputArray contour1, InputArray contour2,
int method, double parameter );
输入的可以是图片或者轮廓点集