Python图像处理(9):Hu矩

快乐虾

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

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


几何矩是由Hu1962年提出的,具有平移、旋转和尺度不变性。opencv中关于矩的计算是由C++中的Moments这个类来完成的:


//! raster image moments
class 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 cv2
import numpy as np
#import matplotlib.pyplot as plt

dir = '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矩的方式,仅此而已。












©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页