閱讀對象:對概率論中的期望有一點了解。
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!!