机器视觉

机器视觉,图形处理,VC++,C#

图像的矩

 

图像的矩
一幅图像的矩,是通过一定的公式计算出来的。明白这个公式背后的原理,对于初学者来说,有一定的困难。
这里,对图像的矩进行讲解。
------------------------------若转载本文,请注明出自:www.opencvchina.com----------------------------------

(1)数学公式
在纯数学理论上,关于某一个点的第n阶矩,定义为:
图像的矩 

在这个定义中,函数里只有一个独立变量。而,图像是二维的,所以,需要2个独立变量。那么公式变成:
公式2.png 

这里,f(x,y)是一幅图像,并且,其值是连续的。但,在实际应用中,图像的像素值是离散的。所以,我们需要一种
离散的方式来描述图像的矩
那么公式为:
图像的矩 

使用求和代替积分运算。矩的阶 使用m+n表示,通常,我们求关于(0,0)的矩,所以,可以忽略常量cx,cy

(2)计算面积(如图1所示)
图1
图像的矩 
计算一幅二值化图像的白色区域的面积,其实是计算它的0阶矩:
图像的矩 

公式中x0和y0,不起作用,可以删除:
图像的矩 

现在,在一幅二值化的图像中,一个像素点的值要么是0,要么是1;所以,对于每一个白色像素点,
一个‘1’被加到矩中。(这是一种高效的计算二值化图像中白色点个数的方法)。另外,需要注意的是,
只有一个0阶矩。

(3)计算物体的质心(或者是重心)(如图2)

图2:
图像的矩 
计算一幅二值化图像的质心,需要计算两个坐标
图像的矩 

怎么计算呢?看看图像的一阶矩:
图像的矩 

公式中的两个求和符号 可以用一个for循环实现。即,把所以白色像素点处(即f(x,y)=1)的x坐标加起来。
同样的方法,我们可以计算所有白色像素点的y坐标的和:
图像的矩 

到此,我们得到了白色像素点的x坐标的和、y坐标的和。由于是一个和,所以,我们需要得到其均值,即通过除以白色像素点的个数。白色像素点的个数可以通过(2)计算面积中的公式实现,即图像的0阶矩,所以,得到:
图像的矩 , 图像的矩

这种计算物体质心的方法,它的一个优点是,对噪声不敏感。当,有外部噪声干扰的时候,计算出的质心不会有太大的偏离。
从数学的角度来看,这种方法是计算一个连通域的质心,或者说,是计算一个团块(blob)的质心。如果,你的图像中有两个连通域,即有两个blob,那么,就需要把两个blob提取出来,分别计算它们的质心。

(4)中心矩
这种除法很常见-- 一个矩除以其0阶矩。由于很常见,所以,它有个专用的术语,称之为-- 中心矩。
所以,计算质心,也说为:计算一阶中心矩。

(5)高阶矩
计算高阶矩,就更复杂。有3个2阶矩,4个3阶矩,。。。。你可以把这些矩结合成一个向量特征,这样的特征具有旋转不变性,尺度不变性,变换不变性等优良特点。
关于图像的矩,在模式识别中有非常重要的地位,甚至有一整本书来介绍它在模式识别中的使用。
这本书的名字就是--《Moments and Moment Invariants in Pattern Recognition》
http://www.amazon.com/gp/product ... ie=UTF8&tag=aish04-
20&linkCode=as2&camp=217145&creative=399373&creativeASIN=0470699876

(6)总结
1、在数学领域,矩 非常的常见
2、在计算机视觉中,使用2维离散形式的矩计算方法
3、使用矩,可以计算物体的面积,物体的质心等。
4、中心矩的计算方法是:某个矩除以0阶矩
5、高阶矩具有旋转不变性,尺度不变性,变换不变性等。

阅读更多
个人分类: C++ 数学
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭