矩是描述图像特征的算子,如今矩技术已广泛应用于图像检索和识别 、图像匹配 、图像重建 、数字压缩 、数字水印及运动图像序列分析等领域。常见的矩描述子可以分为以下几种:几何矩、正交矩、复数矩和旋转矩。
其中几何矩提出的时间最早且形式简单,对它的研究最为充分。几何矩对简单图像有一定的描述能力,他虽然在区分度上不如其他三种矩,但与其他几种算子比较起来,他极其的简单,一般只需用一个数字就可表达。所以,一般我们是用来做大粒度的区分,用来过滤显然不相关的文档。
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的矩集,则原始图像等同于一个具有确定的大小、方向和离心率,以图像质心为中心且具有恒定辐射率的椭圆。
由三阶矩以下矩构成的七个矩不变量具有平移、旋转和尺度不变性等等。当密度分布函数发生改变时,图像的实质没有改变,仍然可以看做一个薄板,只是密度分布有所改变。虽然此时各阶矩的值可能发生变化,但由各阶矩计算出的不变矩仍具有平移、旋转和尺度不变性。通过这个思想,可对图像进行简化处理,保留最能反映目标特性的信息,再用简化后的图像计算不变矩特征,可减少计算量。
研究表明,只有基于二阶矩的不变矩对二维物体的描述才是真正的与旋转、平移和尺度无关的。较高阶的矩对于成像过程中的误差,微小的变形等因素非常敏感,所以相应的不变矩基本上不能用于有效的物体识别。即使是基于二阶矩的不变矩也只能用来识别外形相差特别大的物理,否则他们的不变矩会因为很相似而不能识别。
//------------------------------------------------------------
如果让你用4个数来概括一个分布
mean: 第一矩。表位置
variance: 第二矩。表胖瘦
skewness: 第三矩。表歪斜
kurtosis: 第四矩。表尾巴胖瘦。。。。
//------------------------------------------------------------
图像意义
在图像处理,计算机视觉和相关领域中,一个图像矩是图像像素强度的某个特定加权平均(矩),或者是这样的矩的函数,通常选择具有一些有吸引力的特性或解释。
图像矩对于分割之后对象的描述是有用的。通过图像矩得到的图像的简单属性包括面积(或总强度),其质心和关于其方向的信息。
-
原点矩
对一个二维连续函数$f(x,y)$,第$(p+q)$个点的矩(原点矩)被定义为$M_{pq} = \int\limits_{-\infty}^{\infty} \int\limits_{-\infty}^{\infty} x^p y^q \,f(x,y) \,dx \,dy \quad \quad p,q=0,1,2,...$
照这个思路,像素强度为$I(x,y)$的灰度图,原点矩为:$M_{ij}=\sum\limits_x \sum\limits_y x^i y^i I(x,y)$
有些情况下,也可以把图像看成概率密度函数来计算 $\sum\limits_x \sum\limits_y x^i y^i I(x,y)$
唯一性定理(Hu[1962])指出,如果$f(x,y)$是分段连续的并且仅在xy平面的有限部分中具有非零值,则存在所有阶的矩,并且矩序列$M_pq$由$f(x,y)$唯一确定。 反之,中心矩$M_pq$唯一确定$f(x,y)$。
在实践中,图像被概括为具有几个较低阶矩的函数。
举个栗子,Opencv中moment函数从原点矩中获得的简单图像属性
- 面积(二值图)或灰度和(灰度图):M00
- 质心:$ {\bar{x},\bar{y}}={ \frac{M10}{M00},\frac{M01}{M00} }$
vector<Moments> mu(contours.size() );
vector<Point2f> mc(contours.size() );
mu[c] = moments( contours[i], false );
double area=mu[c].m00 ;
mc[c] = Point2f( mu[c].m10/mu[c].m00 , mu[c].m01/mu[c].m00 );
- 中心矩
中心矩被定义为:$\mu_{pq}=\int\limits_{-\infty}^{\infty} \int\limits_{-\infty}^{\infty} (x-\bar{x})^p (y-\bar{y})^q \,f(x,y) \,dx\,dy \quad \bar{x}=\frac{M_{10}}{M_{00}} ,\bar{y}=\frac{M_{01}}{M_{00}} $
如果是数字图像,则等式变为$\mu_{pq}=\sum\limits_x \sum\limits_y (x-\bar{x})^p (y-\bar{y})^q\,f(x,y)$ 3阶及以下中心矩依次为:
$ \mu_{00}=M_{00},\\ \mu_{01}=0,\\\mu_{10}=0,\\ \mu_{11}=M_{11}-\bar{x}M_{01}=M_{11}-\bar{y}M_{10},\\ \mu_{20}=M_{20}-\bar{x}M_{10},\\ \mu_{02}=M_{02}-\bar{y}M_{01},\\ \mu_{21}=M_{21}-2\bar{x}M_{11}-\bar{y}M_{20}+2\bar{x}^2M_{01},\\ \mu_{12}=M_{12}-2\bar{y}M_{11}-\bar{x}M_{02}+2\bar{y}^2M_{10},\\ \mu_{30}=M_{30}-3\bar{x}M_{20}+2\bar{x}^2M_{10},\\ \mu_{03}=M_{03}-3\bar{y}M_{02}+2\bar{y}^2M_{01}, $
总结出来就是$\mu_{pq}=\sum\limits_x \sum\limits_y \left( \begin{array}{c} p\\m \end{array} \right) \left( \begin{array}{c} q\\n \end{array} \right) (-\bar{x})^{p-m} (-\bar{y})^{q-n} M_{mn} $
中心矩具有平移不变性
举个栗子
图像方向的信息可以通过首先使用二阶中心矩来构造协方差矩阵导出(底下这个式子很明显就是矩阵降维)
其中,图像上一点$I(x,y)$的协方差矩阵为
矩阵的特征向量对应于图像强度的长轴和短轴,因此可以从与最大特征值相关联的特征向量的角度朝向最靠近该特征向量的轴提取取向。可以证明,该角度$\theta$可由以下公式得出:
协方差矩阵的特征值可以表示为:
且特征值与特征向量轴的长度的平方成比例。特征值的幅度的相对差异体现了图像的偏心特性或者说他多细长。偏心率是:
-
矩不变性
矩因为其在图像分析上的应用广为人知,由于他们可以被用于导出关于特定变换类的不变量。,
在这种情况下,不变矩这个术语常被滥用。然而,虽然矩不变量是从矩中形成的不变量,不变量本身的唯一矩是中心矩。
注意下面的详细的不变量仅在连续区间保持不变性。在离散区间,尺度和旋转都不能很好的形成,离散图像转换是近似的,且变换不可拟。因此,当描述离散图像中的形状时,这些不变量仅是近似不变的。- 平移不变性
通过构造,任意阶中心矩$\mu_{ij}相对于平移都是不变的。 - 尺度不变性
相对平移和尺度的不变量$\eta_{ij}$可以通过适当的缩放零阶中心矩阵从中心矩构建 $\eta_{ij}=\frac{\mu_{ij}}{\mu_{00}^{1+\frac{i+j}{2}} } \quad i+j \geq 2$
注意平移不变量仅仅在中心矩时直接跟随使用。 - 旋转不变性
正如Hu等人的工作所示,可以构建关于平移、放缩和旋转的不变量:
- 平移不变性
这就是众所周知的HU矩不变量。
第一个,I1,类似于围绕图像的质心的转动惯量,像素强度类似于物理密度。
最后一个,I7,倾斜不变性,有能力区分其他相同图像的镜像。(不懂)
J. Flusser提出了推导完整和独立的旋转矩不变量集合的一般理论。他所传统的Hu矩既不独立也不完全。I3并不是非常有用,因为他不独立,依赖于其他不变量。原始的Hu集合中有一个缺失的三阶独立不变矩。
后来,J.Flusser和T.Suk就专门研究N旋转对称形状的情况。
点云意义
PCL 关于矩的使用有两个,一个是pcl::MomentInvariantsEstimation
,估计每个3D点处的三个矩不变量(j1,j2,j3)
。另一个就是 pcl::MomentOfInertiaEstimation
类 。可以获得基于偏心率和转动惯量的描述符。还能提取点云的对齐轴和定向边界框。
Note:提取的边界框不是最小可能的边界框。
- 理论入门
先讲特征提取的idea。首先计算点云的协方差矩阵,并提取其特征值和向量。你也可以想象成归一化合成的特征向量,且总是形成右手坐标系(主特征向量表示x轴,次向量表示z轴)。下一步执行迭代。每次迭代过程中,主特征向量旋转。旋转顺序不变,且围绕其他特征向量执行。这提供了点云的旋转不变性。因此,我们把这个旋转的主矢量当成当前轴。
对于每个当前轴,计算转动惯量。另外,当前轴已被用来计算偏心率。因此,当前向量被看成平面法向量,并且将输入的点云投影到他上面。根据所获得的投影计算偏心率。
当然,这个类还提供了获取Axis Aligned Bounding Box(AABB)和Oriented bounding box(OBB)的接口。将AABB作为特征向量计算OBB。pcl提供了一个示例,来体会矩的计算。