您的位置:首页 > 运维架构

openCV 计算连通区域的形状描述符之距的概念和计算

2015-04-30 18:26 375 查看

本文转自:http://blog.csdn.net/huixingshao/article/details/42060231

opencv中的矩主要包括以下几种:空间矩,中心矩和中心归一化矩。

classMoments{public:......

//空间矩

doublem00,m10,m01,m20,m11,m02,m30,m21,m12,m03;

//中心矩

doublemu20,mu11,mu02,mu30,mu21,mu12,mu03;

//中心归一化矩
doublenu20,nu11,nu02,nu30,nu21,nu12,nu03;

}

空间矩的公式为:




可以知道,对于01二值化的图像,m00即为轮廓的面积。

中心矩的公式为:




其中:




归一化的中心矩公式为:





矩的基本概念可参考:

http://www.opencvchina.com/thread-509-1-1.html



在OpenCV中,还可以很方便的得到Hu不变距,Hu不变矩在图像旋转、缩放、平移等操作后,仍能保持矩的不变性,所以有时候用Hu不变距更能识别图像的特征。Hu不变矩的基本概念请参考paper:Hu.VisualPatternRecognitionbyMomentInvariants,IRETransactionsonInformationTheory,8:2,pp.179-187,1962,或者参考中文介绍:http://www.cnblogs.com/skyseraph/archive/2011/07/19/2110183.html[code]
OpenCV中计算矩的函数为:Momentsmoments(InputArrayarray,boolbinaryImage=false)
Hu不变矩主要是利用归一化中心矩构造了7个不变特征矩:



OpenCV中计算Hu矩的公式为:
HuMoments(constMoments&m,OutputArrayhu)
voidHuMoments(constMoments&moments,doublehu[7])

matchShapes函数其实比较的是两个轮廓的Hu不变矩:
doublecomres;
comres=matchShapes(contours[0],contours[1],CV_CONTOURS_MATCH_I1,0.0);
printf("CV_CONTOURS_MATCH_I1比较结果是:%f\n",comres);
comres=matchShapes(contours[0],contours[1],CV_CONTOURS_MATCH_I2,0.0);
printf("CV_CONTOURS_MATCH_I2比较结果是:%f\n",comres);
comres=matchShapes(contours[0],contours[1],CV_CONTOURS_MATCH_I3,0.0);
printf("CV_CONTOURS_MATCH_I3比较结果是:%f\n",comres);

第三个参数决定比较的方式,下面是第三个参数的三个可选值。
CV_CONTOURS_MATCH_I1



CV_CONTOURS_MATCH_I2



CV_CONTOURS_MATCH_I3

这里:分别是A,B的Hu矩。

[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: