Python影像處理(9):Hu矩,python影像處理hu
快樂蝦
http://blog.csdn.net/lights_joy/
歡迎轉載,但請保留作者資訊
幾何矩是由Hu在1962年提出的,具有平移、旋轉和尺度不變性。opencv中關於矩的計算是由C++中的Moments這個類來完成的:
//! raster image momentsclass CV_EXPORTS_W_MAP Moments{public: //! the default constructor Moments(); //! the full constructor Moments(double m00, double m10, double m01, double m20, double m11, double m02, double m30, double m21, double m12, double m03 ); //! the conversion from CvMoments Moments( const CvMoments& moments ); //! the conversion to CvMoments operator CvMoments() const; //! spatial moments CV_PROP_RW double m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; //! central moments CV_PROP_RW double mu20, mu11, mu02, mu30, mu21, mu12, mu03; //! central normalized moments CV_PROP_RW double nu20, nu11, nu02, nu30, nu21, nu12, nu03;};
可以明顯地看到它主要包括空間矩,中心矩和中心歸一化矩。
一直不太相信幾何矩對於植物葉片識別能夠起到多大作用,尤其對於遮擋的葉片。不過剛好學習到這裡,就試試在Python下計算Hu矩。
採用的圖片是這前分割出來的彩色映像:
我們已經得到了它們的二值映像:
我們就以這兩張二值映像做為求矩的輸入映像。
# -*- coding: utf-8 -*- import cv2import numpy as np#import matplotlib.pyplot as pltdir = 'F:\\projects\\src\\opencv\\images\\cotton\\';# Hu不變矩# 讀取棉花映像cotton = cv2.imread(dir + '39.mask.jpg')cotton = cotton[:,:,0] # 這是二值映像,僅取第一個通道cv2.imshow('cotton', cotton)# 讀取雜草映像weed = cv2.imread(dir + '47.mask.jpg')weed = weed[:,:,0] # 這是二值映像,僅取第一個通道cv2.imshow('weed', weed)# 計算棉花的矩和Hu矩moments = cv2.moments(cotton)hu_moments = cv2.HuMoments(moments)print('cotton moments:')print(hu_moments)# 計算雜草的矩和Hu矩moments = cv2.moments(weed)hu_moments = cv2.HuMoments(moments)print('weed moments:')print(hu_moments)cv2.waitKey()
得到計算結果:
僅兩張圖片其實說明不了什麼問題,只不過通過上面的代碼展示一下用Python計算Hu矩的方式,僅此而已。