Python图像处理(9):Hu矩

来源:互联网 发布:宁波seo教程 编辑:程序博客网 时间:2024/05/18 15:06

快乐虾

http://blog.csdn.net/lights_joy/

欢迎转载,但请保留作者信息


几何矩是由Hu1962年提出的,具有平移、旋转和尺度不变性。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矩的方式,仅此而已。












0 0
原创粉丝点击