美文网首页
OpenCV Hu不变矩

OpenCV Hu不变矩

作者: LiuJP | 来源:发表于2022-04-18 15:43 被阅读0次

1. 矩的概念

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

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

比较重要的有两种情况:

  1. 𝑘阶原点矩

  2. 𝑘阶中心矩。

一阶原点矩就是期望。一阶中心矩𝜇4可以去衡量分布(密度)在均值附近的陡峭程度如何。

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

不变矩(Invariant Moments)是一处高度浓缩的图像特征,具有平移、灰度、尺度、旋转不变性。M.K.Hu在1961年首先提出了不变矩的概念。1979年M.R.Teague根据正交多项式理论提出了Zernike矩。下面主要介绍这两种矩特征的算法原理与实现。

2. Hu矩

一幅𝜇𝑝𝑞为:

𝑚𝑝𝑞=∑𝑖=1𝑀∑𝑗=1𝑁𝑖𝑝𝑗𝑞𝑓(𝑖,𝑗)

𝜇𝑝𝑞=∑𝑖=1𝑀∑𝑗=1𝑁(𝑖−𝑖¯)𝑝(𝑗−𝑗¯)𝑞𝑓(𝑖,𝑗)

其中𝑖¯=𝑚10/𝑚00,𝑗¯=𝑚01/𝑚00

若将𝜇𝑝𝑎<msub>反映的是图像灰度相对于其灰度质心的分布情况。可以用几何矩来表示中心矩,0~3阶中心矩与几何矩的关系如下:

𝜇00=∑𝑀𝑖=1∑𝑁𝑗=1(𝑖−𝑖¯)0(𝑗−𝑗¯)0𝑓(𝑖,𝑗)=𝑚00

𝜇10=∑𝑀𝑖=1∑𝑁𝑗=1(𝑖−𝑖¯)1(𝑗−𝑗¯)0𝑓(𝑖,𝑗)=0

𝜇01=∑𝑀𝑖=1∑𝑁𝑗=1(𝑖−𝑖¯)0(𝑗−𝑗¯)1𝑓(𝑖,𝑗)=0

𝜇11=∑𝑀𝑖=1∑𝑁𝑗=1(𝑖−𝑖¯)1(𝑗−𝑗¯)1𝑓(𝑖,𝑗)=𝑚11−𝑦¯𝑚10

𝜇20=∑𝑀𝑖=1∑𝑁𝑗=1(𝑖−𝑖¯)2(𝑗−𝑗¯)0𝑓(𝑖,𝑗)=𝑚20−𝑦¯𝑚01

𝜇02=∑𝑀𝑖=1∑𝑁𝑗=1(𝑖−𝑖¯)0(𝑗−𝑗¯)2𝑓(𝑖,𝑗)=𝑚02−𝑦¯𝑚01

𝜇30=∑𝑀𝑖=1∑𝑁𝑗=1(𝑖−𝑖¯)3(𝑗−𝑗¯)0𝑓(𝑖,𝑗)=𝑚30−2𝑥¯𝑚20+2𝑥¯2𝑚10

𝜇12=∑𝑀𝑖=1∑𝑁𝑗=1(𝑖−𝑖¯)1(𝑗−𝑗¯)2𝑓(𝑖,𝑗)=𝑚12−2𝑦¯𝑚11−𝑥¯𝑚02+2𝑦¯2𝑚10

𝜇21=∑𝑀𝑖=1∑𝑁𝑗=1(𝑖−𝑖¯)2(𝑗−𝑗¯)1𝑓(𝑖,𝑗)=𝑚21−2𝑥¯𝑚11−𝑦¯𝑚20+2𝑥¯2𝑚01

𝜇03=∑𝑀𝑖=1∑𝑁𝑗=1(𝑖−𝑖¯)0(𝑗−𝑗¯)3𝑓(𝑖,𝑗)=𝑚03−2𝑦¯𝑚02+2𝑦¯2𝑚01

为了消除图像比例变化带来的影响,定义规格化中心矩如下:

𝜂𝑝𝑞=𝜇𝑝𝑎𝜇𝛾00,(𝛾=𝑝+𝑞2,𝑝+𝑞=2,3,…)

利用二阶和三阶规格中心矩可以导出下面7个不变矩组(Φ1 Φ7),它们在图像平移、旋转和比例变化时保持不变。

Φ1=𝜂20+𝜂02

Φ2=(𝜂20−𝜂02)2+4𝜂211

Φ3=(𝜂20−3𝜂12)2+3(𝜂21−𝜂03)2

Φ4=(𝜂30+𝜂12)2+(𝜂21+𝜂03)2

Φ5=(𝜂30+3𝜂12)(𝜂30+𝜂12)[(𝜂30+𝜂12)2−3(𝜂21+𝜂03)2]+(3𝜂21−𝜂03)(𝜂21+𝜂03)[3(𝜂30+𝜂12)2−(𝜂21+𝜂03)2]

Φ6=(𝜂20−𝜂02)[(𝜂30+𝜂12)2−(𝜂21+𝜂03)2]+4𝜂11(𝜂30+𝜂12)(𝜂21+𝜂03)

Φ7=(3𝜂21−𝜂03)(𝜂30+𝜂12)[(𝜂30+𝜂12)2−3(𝜂21+𝜂03)2]+]+(3𝜂12−𝜂30)(𝜂21+𝜂03)[3(𝜂30+𝜂12)2−(𝜂21+𝜂03)2]

3. 利用OpenCV计算Hu矩

opencv里对Hu矩的计算有直接的API,它分为了两个函数:moments()函数用于计算中心矩,HuMoments函数用于由中心矩计算Hu矩。

Moments moments(InputArray array, bool binaryImage=false )

参数说明

  • 输入参数:array是一幅单通道,8-bits的图像,或一个二维浮点数组(Point of Point2f)。binaryImage用来指示输出图像是否为一幅二值图像,如果是二值图像,则图像中所有非0像素看作为1进行计算。
  • 输出参数:moments是一个类:

里面保存了图像的2阶与3阶中心矩的值。

参数说明:

  • 输入参数:moments即为上面一个函数计算得到的moments类型。
  • 输出参数:hu是一个含有7个数的数组。
    {
    Mat image = imread(argv[1]);
    cvtColor(image, image, CV_BGR2GRAY);
    Moments mts = moments(image); double hu[7];
    HuMoments(mts, hu); for (int i=0; i<7; i++)
    {
    cout << log(abs(hu[i])) <<endl;
    } return 0;
    }</pre>

上面代码中,最终输出的值为𝑙𝑜𝑔|Φ𝑖|

我们分别计算一幅图像在,旋转,噪声与模糊时的Hu矩。

[图片上传失败...(image-bba0ed-1650266548197)] [图片上传失败...(image-abbff1-1650266548197)] [图片上传失败...(image-eb3c8f-1650266548197)] [图片上传失败...(image-9fb3c3-1650266548197)]

| 类别 | 𝑙𝑜𝑔|Φ7| |
| 原图 | -6.76181 | -19.1286 | -23.7441 | -26.776 | -51.7618 | -35.8491 | -51.534 |
| 旋转 | -6.72102 | -19.0844 | -23.5756 | -25.9122 | -51.4619 | -35.4595 | -50.7674 |
| 加放噪点 | -6.76086 | -19.1255 | -23.7611 | -26.3228 | -51.5056 | -35.895 | -51.6321 |
| 模糊 | -6.76183 | -19.1295 | -23.7451 | -26.2767 | -51.765 | -35.8484 | -51.5307 |

5. 总结

不变矩的应用过程一般包括:

  1. 选择合适的不变矩类型;
  2. 选择分类器(如神经网络、最短距离等);
  3. 如果是神经网络分类器,则需要计算学习样例的不变矩去训练神经网络;
  4. 计算待识别对象的不变矩,输入神经网络就可得到待识别对象的类型,或者计算待识别对象不变矩与类别对象不变矩之间的距离,选择最短距离的类别作为待识别对象的类别。

可以看出,不变矩作用主要目的是描述事物(图像)的特征。人眼识别图像的特征往往又表现为“求和”的形式,因此不变矩是对图像元素进行了积分操作。

不变矩能够描述图像整体特征就是因为它具有平移不变形、比例不变性和旋转不变性等性质。

然而,另一方面图像的各阶不变矩究竟代表的什么特征很难进行直观的物理解释。

转载自https://www.cnblogs.com/ronny/p/3985810.html

相关文章

  • OpenCV Hu不变矩

    1. 矩的概念 图像识别的一个核心问题是图像的特征提取,简单描述即为用一组简单的数据(图像描述量)来描述整个图像,...

  • Hu矩---OpenCV-Python开发指南(26)

    什么是Hu矩 Hu矩是归一化中心矩的线性组合。Hu矩在图像的旋转,缩放,平移等操作后,仍然保持矩的特征不变,所以经...

  • Hu矩

    Hu矩是归一化矩的线性组合,Hu矩在图像旋转、平移、缩放等操作后,仍能保持不变性,所以经常使用Hu矩来识别图像的特...

  • 图像的矩(含hu不变矩)

    冒泡!八月下旬啦~暑假要过去了诶,制定的plan因为lan只完成了个p这周就提前更新一下 在图像识别中遇到的关于图...

  • 胡矩 Hu Moments, OpenCV Shape Desc

    图像的几何矩 - CSDN 这7个不变矩构成一组特征量,Hu.M.K在1962年证明了他们具有旋转,缩放和平移不变...

  • OpenCV 之ios 轮廓矩

    OpenCV 之ios 轮廓矩 目标 在这节教程中您将学到: 使用OpenCV函数 moments 计算图像所有的...

  • Hu 假hu 威

    这个鬼天气还让上班,呵

  • hu

  • huó

    huó 我活在 一个不为人知的地方 虽然你们看得到我 触摸得到我 但是在那个无言的沉默里 没有人可以走进 走进这里...

  • hu

    当我看到一台很抢眼很霸气的小汽车, 带虎的, 这是我很喜欢的车, 金黄色, 亮闪闪, 特别抢眼, 然后看到一个打扮...

网友评论

      本文标题:OpenCV Hu不变矩

      本文链接:https://www.haomeiwen.com/subject/pwudertx.html