阅读对象:对概率论中的期望有一点了解。
1.图像几何矩
1.1简述
图像的几何矩包括空间矩、中心矩和中心归一化矩。几何矩具有平移、旋转和尺度不变性,一般是用来做大粒度的区分,用来过滤显然不相关的图像。
1.2用数学语言阐述图像的几何矩
针对于一幅图像,我们把像素的坐标看成是一个二维随机变量(X,Y),那么一幅灰度图像可以用二维灰度密度函数来表示,每个像素点的值可以看成是该处的密度,对某点求期望就是该图像在该点处的矩(原点矩),一阶矩和零阶矩可以计算某个形状的重心,二阶矩可以计算形状的方向,因此可以用矩来描述灰度图像的特征。3中矩的计算结果见图2。
图1 数学表示
1.3opencv中求矩的函数
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; }
2.图像轮廓特征和几何矩案例
''' 轮廓特征 • 查找轮廓的不同特征,例如面积,周长,重心,边界框等。 ''' import cv2 dir='C:/Users/Thinkpad/Desktop/picture/' img = cv2.imread(dir + 'q.jpg',0) ret,thresh = cv2.threshold(img,127,255,0) contours,hierarchy = cv2.findContours(thresh, 1, 2) cnt = contours[0]#取第一个轮廓 M = cv2.moments(cnt)#计算矩 cx = int(M['m10']/M['m00'])#计算重心 cy = int(M['m01']/M['m00'])#计算重心 #轮廓的面积可以使用函数 cv2.contourArea() 计算得到,也可以使用矩(0 阶矩) ,M['m00'] area = cv2.contourArea(cnt) #轮廓周长也被称为弧长。可以使用函数 cv2.arcLength() 计算得到。这个函数的第二参数可以用来指定对象的形状是闭合的(True) ,还是打开的(一条曲线) perimeter = cv2.arcLength(cnt,True)
图2 Opencv+python中矩计算结果的展现形式
参考资料:
http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_contours/py_contours_begin/py_contours_begin.html#contours-getting-started
http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_contours/py_contour_features/py_contour_features.html
http://www.cnblogs.com/skyseraph/archive/2011/07/19/2110183.html
http://blog.csdn.net/gdfsg/article/details/51015066
end!!