矩概念与图像矩详解及其hu矩的运用

一、矩概念详解

矩这个东西,能组成的名词太多了,矩形,就是长方形,矩阵,就是m行n列的二维数组,所以想了解矩,就要从其具体的场景中去理解。

今天我们要讲的图像矩,就是一个新的概念,图像矩就是图像的矩,这个概念来源于数学中的矩,所以我们要先来理解一下,数学中的矩。首先我们先来看一下它的定义和相关概念:

       在数学和统计学中,矩(moment)是对变量分布和形态特点的一组度量。当所有的变
量矩的定义是各点对某一固定点离差幂的平均值。n阶矩被定义为一变量的n次方与其概率密度函数(ProbabilityDensity Function, PDF)之积的积分。在文献中n阶矩通常用符号μn表示。

直接使用变量计算的矩被称为原始矩(raw moment),移除均值后计算的矩被称为中心矩(central moment)。

1、离散情况

我们从矩的概念出发,我们先考虑离散情况:

假设有一个离散的随机变量X,用A表示一个常数,用k来表示幂(阶数)。那么我们有下面这个公式:

在这里插入图片描述

这个称为X关于点A的k阶矩。
如果这个常数A为0,我们把这个k阶矩称之为k阶原点矩。
如果这个常数A为X的均值E(X),我们把这个k阶矩称之为k阶中心矩。

变量的一阶矩是数学期望(expectation),表示分布重心;
变量的二阶矩是方差(variance),表示离散程度;
变量的三阶矩是偏度(skewness),表示分布偏离对称的程度;
变量的四阶矩是峰度(kurtosis),描述分布的尖峰程度,例如正态分布峰态系数=0。

如果我们有两个离散随机变量:X,Y。A1,A2分别代表对应于两个随机变量的常数,用p,q表示幂(阶数),那么我们有下面的公式:
在这里插入图片描述
这个称为X,Y关于点A1,A2的p+q阶矩。
如果两个常数都是0,那么我们称之为p+q阶混合原点矩。
如果两个常数都是对应的均值,即A1=E(X),A2=E(Y),那么我们称之为p+q阶混合中心矩。

2、连续情况

接下来我们考虑连续情况:

假设有一个连续的随机变量x,其单变量的概率密度函数为f(x),用A表示一个常数,用k来表示幂(阶数)。那么我们有下面这个公式:

在这里插入图片描述

这个称为X关于点A的k阶矩。 如果我们有两个连续的随机变量:x,y,两个变量的联合概率密度为f(x,y)。A1,A2分别代表对应于两个随机变量的常数,用p,q表示幂(阶数),那么我们有下面的公式:

在这里插入图片描述

这个称为x,y关于点A1,A2的p+q阶矩。
一阶原点矩就是期望。二阶中心矩就是随机变量的的方差. 在统计学上,高于4阶的矩极少使用。三阶中心距可以去衡量分布是否有偏。四阶中心矩可以去衡量分布在均值附近的陡峭程度如何。

二、图像的几何矩

1、几何矩的概念

了解了矩的概念,我们接下来说一下图像的几何矩。在图像中,矩的概念如下:

矩是描述图像特征的算子。

这里的图像是单通道,也就是灰度图像,相当于一个矩阵,也就是上面提到的离散的情况。矩阵上每个位置的取值范围是0-255的整数。

2、图像的p+q阶矩

一阶原点矩就是期望。二阶中心矩就是随机变量的的方差. 在统计学上,高于4阶的矩极少使用。三阶中心距可以去衡量分布是否有偏。四阶中心矩可以去衡量分布在均值附近的陡峭程度如何。

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

在这里插入图片描述

空间矩的实质为面积或者质量。可以通过一阶矩计算质心/重心。

图像的重心坐标 为:

在这里插入图片描述

物体形状方向 为:
在这里插入图片描述

在这里插入图片描述

3、HU矩

把图像的像素看做密度函数f(x,y)f(x,y),对该像素点求期望,即是图像的矩(原点矩)

一般来说,一阶矩和零阶矩可以计算某个形状的重心,二阶矩可以计算形状的方向。

图像的矩主要表征了图像区域的几何特征,又称几何矩,由于具有旋转、平移、尺度等不变的特兴奋,所以又称为不变矩。
利用不变矩可以计算出物体的圆形度(物体形状和园的接近程度)、物体的矩形度(物体形状和矩形的接近程度)、物体的水平和垂直对称性、物体的主轴方向、扁度等。

几何矩:

在这里插入图片描述

中心距:(https://i-blog.csdnimg.cn/blog_migrate/479c3e4f1376ef7d944e5bec4be65860.png

由几何矩可表示出中心距:

在这里插入图片描述

请注意,上述中心距是平移不变的。 换句话说,无论图像中的斑点在哪里,如果形状相同,则矩将是相同的。

如果我们还能让这个距具有尺度不变,那会不会很酷? 那么,为此,我们需要标准化的中心矩,如下所示。

归一化中心距:

在这里插入图片描述

其中r=p+q+2, p+q=2,3,…r=p+q+22,p+q=2,3,…

中心距是平移不变的。 但这还不足以进行形状匹配。 我们想要计算对平移,缩放和旋转不变的矩,如下图所示。

幸运的是,我们实际上可以计算出这样的距,他们被称为Hu不变距。

在这里插入图片描述
7个Hu不变距计算如下:

在这里插入图片描述
感兴趣的可以尝试推导一下,这些都是关于图像的平移,缩放大小,旋转等参数不变性的推导式,
hu不变距的数学依据

在OpenCV中计算Hu不变距:
在这里插入图片描述

4. Log转化

K的7维Hu不变距
在这里插入图片描述
在这里插入图片描述

Python

# Log scale hu moments
for i in range(0,7):
  huMoments[i] = -1* copysign(1.0, huMoments[i]) * log10(abs(huMoments[i])))

C++

// Log scale hu moments
for(int i = 0; i < 7; i++)
{
  huMoments[i] = -1 * copysign(1.0, huMoments[i]) * log10(abs(huMoments[i]));  

5. 基于Hu不变距的形状匹配

计算Hu距:

在这里插入图片描述
如图所见,图像K0.png只是字母K,S0.png是字母S.接下来,我们在S1.png中移动字母S,并在S2.png中移动+缩放。 我们添加了一些旋转来制作S3.png并进一步翻转图像以制作S4.png。

注意,S0,S1,S2,S3和S4的所有Hu矩在值上彼此接近,除了翻转S4的最后Hu矩的符号。 另外,请注意它们与K0非常不同。

5.1 匹配形状的距离

在本节中,我们将学习如何使用Hu Moments来找到两个形状之间的距离。 如果距离小,则形状在外观上接近,并且如果距离大,则形状在外观上更加分开。

OpenCV提供了一个易于使用的名为matchShapes的实用程序函数,它接收两个图像(或轮廓)并使用Hu Moments找到它们之间的距离。 所以,你不必明确计算胡时刻。 只需将图像二值化并使用matchShapes。

用法如下所示。

Python

d1 = cv2.matchShapes(im1,im2,cv2.CONTOURS_MATCH_I1,0)
d2 = cv2.matchShapes(im1,im2,cv2.CONTOURS_MATCH_I2,0)
d3 = cv2.matchShapes(im1,im2,cv2.CONTOURS_MATCH_I3,0)

C++

double d1 = matchShapes(im1, im2, CONTOURS_MATCH_I1, 0);
double d2 = matchShapes(im1, im2, CONTOURS_MATCH_I2, 0);
double d3 = matchShapes(im1, im2, CONTOURS_MATCH_I3, 0);

第一个参数是待匹配的物体1
第二个是待匹配的物体2
第三个参数method有三种输入:【即三种不同的判定物体相似的方法】

  1. CV_CONTOURS_MATCH_I1
  2. CV_CONTOURS_MATCH_I2
  3. CV_CONTOURS_MATCH_I3

令D(A,B)为形状A和B之间的距离,并且和为形状A和B的对数变换的Hu矩。定义对应于三种情况的距离 如
在这里插入图片描述
当然也可以自己定义一个hu矩之间的距离:(欧几里德距离)
在这里插入图片描述

参考文章:

https://blog.csdn.net/shuiyixin/article/details/104646531
https://blog.csdn.net/lql0716/article/details/68267829
https://blog.csdn.net/red_ear/article/details/86165142

  • 7
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值