欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

矩-图像处理中的距

程序员文章站 2022-07-15 23:31:10
...

数学中的矩

*关于 Moment (mathematics) 的介绍:

In mathematics, a moment is a specific quantitative measure, used in both mechanics and statistics, of the shape of a set of points. If the points represent mass, then the zeroth moment is the total mass, the first moment divided by the total mass is the center of mass, and the second moment is the rotational inertia. If the points represent probability density, then the zeroth moment is the total probability (i.e. one), the first moment is the mean, the second central moment is the variance, the third moment is the skewness, and the fourth moment (with normalization and shift) is the kurtosis. The mathematical concept is closely related to the concept of moment in physics.For a bounded distribution of mass or probability, the collection of all the moments (of all orders, from 0 to ∞) uniquely determines the distribution.

设 X 和 Y 是随机变量,c 为常数,k 为正整数, 
如果  存在,则称  为 X 关于点 c 的 k 阶矩。

  • c = 0 时, 称为 k 阶原点矩;
  • c = E(x) 时,称为 k 阶中心矩。

如果  存在,则称其为 X,Y 关于 c 点 p+q 阶矩。


图像的矩

零阶矩:


这里的图像是单通道图像, 表示图像在  点上的灰度值。 
我们可以发现,当图像为二值图时, 就是这个图像上白色区域的总和,因此, 可以用来求二值图像(轮廓,连通域)的面积。

一阶矩:


当图像为二值图时, 只有 0(黑),1(白)两个值。 就是图像上所以白色区域 x 坐标值的累加。因此,一阶矩可以用来求二值图像的重心: 

二阶矩


二阶矩可以用来求物体形状的方向。 

其中:

fastAtan2()为OpenCV的函数,输入向量,返回一个0-360的角度。


这里修改一下,我之前在看二阶矩求物体形状方向的时候,有公式是这么写的: 


我当时很奇怪,arctan的范围是,再除以2就只有,但是物体形状的方向肯定不止这个范围,而且我在测试的时候也感觉不对,因此就写成了上面那个用opencv函数表示的公式。 
其实,这个公式是对的,只不过需要再根据分子分母的正负性来判断一下象限范围,而fastAtan2()已经加入了这个功能。 
顺便说一下 math.h 中atan()求出来的是弧度,而fastAtan2()求出来的是角度。


利用矩求图像的重心,方向

Mat image = imread(imagename, 0);//读入灰度图
Mat binary;
//二值,椭圆是黑色的,所以反色下
threshold(image, binary, 200, 255, CV_THRESH_BINARY_INV);
Moments m = moments(binary, true);//moments()函数计算出三阶及一下的矩
Point2d center(m.m10 / m.m00, m.m01 / m.m00);//此为重心
//计算方向
double a = m.m20 / m.m00 - center.x*center.x;
double b = m.m11 / m.m00 - center.x*center.y;
double c = m.m02 / m.m00 - center.y*center.y;
double theta = fastAtan2(2*b,(a - c))/2;//此为形状的方向



矩是描述图像特征的算子,如今矩技术已广泛应用于图像检索和识别 、图像匹配 、图像重建 、数字压缩 、数字水印及运动图像序列分析等领域。常见的矩描述子可以分为以下几种:几何矩、正交矩、复数矩和旋转矩。

        其中几何矩提出的时间最早且形式简单,对它的研究最为充分。几何矩对简单图像有一定的描述能力,他虽然在区分度上不如其他三种矩,但与其他几种算子比较起来,他极其的简单,一般只需用一个数字就可表达。所以,一般我们是用来做大粒度的区分,用来过滤显然不相关的文档。

1. 数学中的矩

矩-图像处理中的距

2. 图像的几何矩

矩-图像处理中的距

矩-图像处理中的距

     补充一点,懂的请无视:

      可能有人会问,为什么像素点的值表示的是概率?meanshift算法里用到的反向投影图就是概率图。什么又是反向投影图呢?举个例子。

    (1)例如灰度图像如下

      Image=

      0 1 2 3

      4 5 6 7

      8 9 10 11

      8 9 14 15

    (2)该灰度图的直方图为(bin指定的区间为[0,4),[4,7),[7,12),[12,16))

      Histogram=

      4 3 7 2

    (3)反向投影图

      Back_Projection=

      4 4 4 4

      3 3 3 7

      7 7 7 7

      7 7 2 2

      可见,反向投影图就是反应了颜色分布的概率图。

3. 几个图像的不变矩

HU矩

矩-图像处理中的距

矩-图像处理中的距

       这7个不变矩构成一组特征量,Hu.M.K在1962年证明了他们具有旋转,缩放和平移不变性。实际上,在对图片中物体的识别过程中,只有M1和M2不变性保持的比较好,其他的几个不变矩带来的误差比较大,有学者认为只有基于二阶矩的不变矩对二维物体的描述才是真正的具有旋转、缩放和平移不变性(M1和M2刚好都是由二阶矩组成的)。

       由Hu矩组成的特征量对图片进行识别,优点就是速度很快,缺点是识别率比较低。Hu不变矩一般用来识别图像中大的物体,对于物体的形状描述得比较好,图像的纹理特征不能太复杂,像识别水果的形状,或者对于车牌中的简单字符的识别效果会相对好一些。

 

  其他常见的图像矩

        连续正交矩:Zernike矩和Legendre矩

       离散正交矩:Tchebichef矩、Krawtchouk矩、Hahn矩、Racah矩等。

       虽然非正交矩形式简单 、计算快、易于实现,但抗噪性差、基函数非正交 ,且具有较大的信息冗余。连续正交矩的基函数正交,不仅其矩变换可逆 ,且易于图像重建 , 由于其各阶矩相互独立,故具有最小的信息冗余。其不足之处是该矩的基函数只在特定范围内是正交的。

 

4. OpenCV先关函数

      由OpenCV提供计算中心距、归一化中心距和hu矩的函数为:

void cvMoments(const CvArr*image,CvMoments*moments,int isBinary=0)

double cvGetCentralMoment(CvMoments*moments,intx_order,int y_order)

doublecvGetNormalizedCentralMoment(CvMoments*moments,int x_order,int y_order);

voidcvGetHuMoments(CvMoments*moments,CvHuMoments*HuMoments);

     其中cvMoments和上面的cvContourMoments是同一个函数。

     同时opencv还提供了输入图像直接进行hu矩匹配的函数是

double cvMatchShapes(constvoid*object1,const void*object2,int method,double parameter=0);

 

5. 小结

        图像的矩通常描述了该图像形状的全局特征,并被广泛的应用在各种图像处理、计算机视觉机器人技术领域的目标识别与方位估计中。一阶矩与形状有关,二阶矩显示曲线围绕直线平均值的扩展程度,三阶矩则是关于平均值的对称性的测量。不变矩是图像的统计特性,满足平移、伸缩、旋转均不变的不变性。

        如果把图像看成是一块质量密度不均匀的薄板,其图像的灰度分布函数f(x,y)就是薄板的密度分布函数,则其各阶矩有着不同的含义,如零阶矩表示它的总质量;一阶矩表示它的质心;二阶矩又叫惯性矩,表示图像的大小和方向。事实上,如果仅考虑阶次为2的矩集,则原始图像等同于一个具有确定的大小、方向和离心率,以图像质心为中心且具有恒定辐射率的椭圆。

        由三阶矩以下矩构成的七个矩不变量具有平移、旋转和尺度不变性等等。当密度分布函数发生改变时,图像的实质没有改变,仍然可以看做一个薄板,只是密度分布有所改变。虽然此时各阶矩的值可能发生变化,但由各阶矩计算出的不变矩仍具有平移、旋转和尺度不变性。通过这个思想,可对图像进行简化处理,保留最能反映目标特性的信息,再用简化后的图像计算不变矩特征,可减少计算量。

        研究表明,只有基于二阶矩的不变矩对二维物体的描述才是真正的与旋转、平移和尺度无关的。较高阶的矩对于成像过程中的误差,微小的变形等因素非常敏感,所以相应的不变矩基本上不能用于有效的物体识别。即使是基于二阶矩的不变矩也只能用来识别外形相差特别大的物理,否则他们的不变矩会因为很相似而不能识别。