机器学习图像特征提取—Hu矩(Hu不变矩)原理及代码

目录

1 矩的概念

2 Hu不变矩

3 利用opencv-python计算Hu矩

1 矩的概念

       图像识别的一个核心问题是图像的特征提取,简单描述即为用一组简单的数据(图像描述量)来描述整个图像,这组数据越简单越有代表性越好。良好的特征不受光线、噪点、几何形变的干扰。图像识别发展几十年,不断有新的特征提出,而图像不变矩就是其中一个。

       矩是概率与统计中的一个概念,是随机变量的一种数字特征。设X为随机变量,c为常数,k为正整数。则量E[(x−c)k]称为X关于c点的k阶矩。

比较重要的有两种情况:

1. c=0。这时ak=E(Xk)称为X的k阶原点矩

2. c=E(X)。这时μk=E[(X−EX)k]称为X的k阶中心矩。

      一阶原点矩就是期望。一阶中心矩μ1=0,二阶中心矩μ2就是X的方差Var(X)。在统计学上,高于4阶的矩极少使用。μ3可以去衡量分布是否有偏。μ4可以去衡量分布(密度)在均值附近的陡峭程度如何。

       针对于一幅图像,我们把像素的坐标看成是一个二维随机变量(X,Y),那么一幅灰度图像可以用二维灰度密度函数来表示,因此可以用矩来描述灰度图像的特征。

      不变矩(Invariant Moments)是一处高度浓缩的图像特征,具有平移、灰度、尺度、旋转不变性。M.K.Hu在1961年首先提出了不变矩的概念。1979年M.R.Teague根据正交多项式理论提出了Zernike矩。

2 Hu不变矩

       Hu 距值具有旋转、缩放、镜像和平移不变性,也就是说相同或相似的形状经过旋转、缩放、平移变换后,其 Hu 矩值不变。对于彩色帐篷形状固定的障碍物,在无人机飞行过程中会产生缩放、平移等变化,但其 Hu 矩值变化不大;而对于火焰由于其面积和轮廓的无规律变化,其 Hu 矩值也会呈相应的无规律变化。Hu 矩是通过二阶和三阶中心矩可求得 7 个不变矩组,如下式所示。

       由Hu矩组成的特征量对图片进行识别,优点就是速度快,缺点是识别率比较低,对于纹理比较丰富的图片,识别率低。

       Hu不变矩一般用于识别图像中大的物体,对于物体的形状描述得比较好,图像的纹理特征不能太复杂,像识别水果形状,或者对于车牌中的简单字符的识别效果会相对好一些。

3 利用opencv-python计算Hu矩

#============hu不变矩==============
# Hu不变矩的性质:(1)图像形状平移不变性;(2)图像形状尺度不变性;(3)图像形状旋转不变性。
# Hu不变矩的应用与意义:(1)图像形状匹配;(2)图像形状区分;(3)图像形状相似度计算。
import cv2
from datetime import datetime
import numpy as np

def test(img):
    moments = cv2.moments(img)
    humoments = cv2.HuMoments(moments)
    # 因为直接计算出来的矩可能很小或者很大,因此取对数好比较,这里的对数底数为e,通过对数除法的性质将其转换为以10为底的对数,一般是负值,因此加一个负号将其变为正的
    humoments = -(np.log(np.abs(humoments)))/np.log(10) # 同样建议取对数
    print(humoments)

if __name__ == '__main__':
    #t1 = datetime.now()
    fp = './photo/7-5-1250.bmp'
    img = cv2.imread(fp)
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    test(img_gray)
    #print (datetime.now() - t1)

参考来源:图像的矩特征 - ☆Ronny丶 - 博客园

Hu 矩计算 - 知乎

图像矩(Hu矩)简介_呜呜我是小侠客的博客-CSDN博客_hu矩

猜你喜欢

转载自blog.csdn.net/weixin_42795788/article/details/124061341