网上许多对于图像矩的分析都是直接给出结论,比如零阶原点矩和一阶矩可以表征质心,二阶中心矩可以表征方向,但为何如此并没有理论上的解释,本文从概率和线性代数出发给出一定的理论支撑。
图像的矩是用于描述图像中灰度值分布的一系列值,矩原本是概率论中的概念,存在一随机变量 X X X,我们记其关于点 c c c的n阶矩为 E [ ( X − c ) n ] E[(X-c)^n] E[(X−c)n],当 c = 0 c=0 c=0时称之为原点矩,当 c = E [ x ] c=E[x] c=E[x]时称之为中心矩。同理,如果存在两个随机变量 X , Y X,Y X,Y,我们记我们记其关于点 c 1 , c 2 c_1,c_2 c1,c2的 p + q p+q p+q阶矩为 E [ ( X − c 1 ) p ( Y − c 2 ) q ] E[(X-c_1)^p(Y-c_2)^q] E[(X−c1)p(Y−c2)q],当 c 1 = c 2 = 0 c_1=c_2=0 c1=c2=0时称之为原点矩,当 c 1 = E [ x ] , c 2 = E [ Y ] c_1=E[x],c_2=E[Y] c1=E[x],c2=E[Y]时称之为中心矩。可以发现,一阶原点矩其实就是随机变量的均值,二阶中心矩就是随机变量的方差。
在图像领域,我们将图像的在水平和竖直方向上的分布视为是两个随机变量 X , Y X,Y X,Y,对应位置处的灰度值则是相应的概率值 P ( x , y ) = f ( x , y ) P(x,y)=f(x,y) P(x,y)=f(x,y),虽并未显式的执行归一化操作,但我们可以直觉的理解为 P ( x 0 , y 0 ) = x 0 , y 0 ∑ x ∑ y f ( x , y ) P(x_0,y_0)=\frac{x_0,y_0}{\sum_x\sum_yf(x,y)} P(x0,y0)=∑x∑yf(x,y)x0,y0。值得注意的是在求取图像的矩时,我们通常会对图像进行二值化,隐含的考量是我们只关心某位置处是否为前景,而不在乎前景的内容是什么,所有位置同等重要,即 P ( x 1 , y 1 ) = P ( x 2 , y 2 ) , x 1 , x 2 = 0 , 1 , . . . , W , y 1 , y 2 = 0 , 1 , . . . , H P(x_1,y_1)=P(x_2,y_2),x_1,x_2=0,1,...,W,y_1,y_2=0,1,...,H P(x1,y1)=P(x2,y2),x1,x2=0,1,...,W,y1,y2=0,1,...,H。如下给出图像相应阶次矩的公式及分析1。
m 00 = ∑ ∑ f ( x , y ) (4) m_{00}=\sum\sum f(x,y)\tag{4} m00=∑∑f(x,y)(4)
零阶矩从概率上的角度理解无甚特殊,就是概率和1;从图像的角度上来理解则是图像的灰度值总和(二值化图像则是前景的面积)。
m 10 = ∑ ∑ x f ( x , y ) m 01 = ∑ ∑ y f ( x , y (5) m_{10}=\sum\sum xf(x,y)\\ m_{01}=\sum\sum yf(x,y\tag{5} m10=∑∑xf(x,y)m01=∑∑yf(x,y(5)
一阶矩类似于边缘概率密度, m 10 m_{10} m10实际描述了图像灰度值在 x x x上分布的期望,即将图像从二维坍缩至一维,概率变为 m 10 = g ( x 0 ) = ∑ y f ( x 0 , y ) m_{10}=g(x_0)=\sum_y f(x_0,y) m10=g(x0)=∑yf(x0,y),求得 E [ X ] = ∑ x g ( x ) E[X]=\sum_xg(x) E[X]=∑xg(x)。但正如前面提到的,这里的概率或者说灰度值 f ( x , y ) f(x,y) f(x,y)没有归一,无法反映真实的期望,所以我们要进行额外的归一化操作,结果即为 x c = m 10 m 00 x_c=\frac{m_{10}}{m_{00}} xc=m00m10,同理得 y c = m 01 m 00 y_c=\frac{m_{01}}{m_{00}} yc=m00m01。这也就解释了质心和矩的关系,质心描述了图像灰度值分布在 x , y x,y x,y方向上分布的期望值,拥有前后,左右等灰度值的意义,而一阶矩正是在描述边缘分布。
μ 20 = ∑ ∑ ( x − x c ) 2 f ( x , y ) μ 02 = ∑ ∑ ( y − y c ) 2 f ( x , y ) μ 11 = ∑ ∑ ( x − x c ) ( y − y c ) f ( x , y ) (6) \mu_{20}=\sum\sum (x-x_c)^2f(x,y)\\ \mu_{02}=\sum\sum (y-y_c)^2f(x,y)\\ \mu_{11}=\sum\sum (x-x_c)(y-y_c)f(x,y)\tag{6} μ20=∑∑(x−xc)2f(x,y)μ02=∑∑(y−yc)2f(x,y)μ11=∑∑(x−xc)(y−yc)f(x,y)(6)
有了前面对于一阶矩的概率介绍,二阶矩的概念也就水到渠成了,二阶矩实际是在描述图像灰度值在 x , y x,y x,y方向上分布的方差,同样的为了体现概率的归一性质,实际的方差 σ x 2 = μ 20 m 00 , σ y 2 = μ 02 m 00 \sigma_x^2=\frac{\mu_{20}}{m_{00}},\sigma_y^2=\frac{\mu_{02}}{m_{00}} σx2=m00μ20,σy2=m00μ02。如此我们就可以更加清楚的理解式(3)的含义了,其实就是类似于正态分布中的 3 σ 3\sigma 3σ法则,通过分布的标准差来确定一个经验区域尽可能的包含所有取值。也因此在许多论文中我们也能看到这样的表述:
W 1 = 2 ∗ k μ 20 H 1 = 2 ∗ k μ 02 (7) W_1=2*k\sqrt{\mu_{20}}\\ H_1=2*k\sqrt{\mu_{02}}\tag{7} W1=2∗kμ20H1=2∗kμ02(7)
实际上这是忽略了概率的归一化特性,在实际编程过程中我们会发现这么计算会使得 W 1 , H 1 W_1,H_1 W1,H1远远大于实际大小。
此外,额外介绍一个二阶中心矩很有意思的特质,二阶中心矩可以用来确定目标物体的主轴和方向角,之前看过的介绍中都是不加解释的给出这一结论,没有详细的推导和证明,现给出理论解释和公式推导如下。
为了求出目标物体的方向,我们需要定义图像的方向,这个方向应当是一个单位向量的相角(主轴的相角),那么自然而然的这个单位向量应该能最大程度的保留原始图片的信息,也就是图片上所有点在其上的投影值之和最大,假定这样一个单位向量为 r r r。又由于我们考虑的方向是对于图像本身而言,应当具有平移不变性,因此所有点的位置都应是对图像的质心坐标系而言,则原图中的所有点可以记为:
A = [ x 0 − x c y 0 − y c x 1 − x c y 1 − y c . . . . . . x N − x c y N − y c ] A=\begin{bmatrix} x_0-x_c&y_0-y_c\\ x_1-x_c&y_1-y_c\\ ...&...\\ x_N-x_c&y_N-y_c \end{bmatrix} A=⎣⎢⎢⎡x0−xcx1−xc...xN−xcy0−ycy1−yc...yN−yc⎦⎥⎥⎤
而我们的目标是找到一个单位向量 r ∈ R 2 r\in R^2 r∈R2使得 A A A中所有行向量在其上的投影值之和最大,这是一个典型优化问题如下
m a x : 1 2 ( A r ) T ( A r ) s . t . ∣ ∣ r ∣ ∣ 2 2 = 1 max:\quad \frac{1}{2}(Ar)^T(Ar)\\ s.t. ||r||^2_2=1 max:21(Ar)T(Ar)s.t.∣∣r∣∣22=1
而目标函数中的 A T A A^TA ATA正是随机变量 X , Y X,Y X,Y的协方差矩阵:
C = 1 m 00 [ μ 20 μ 11 μ 11 μ 02 ] C=\frac{1}{m_{00}}\begin{bmatrix} \mu_{20}&\mu_{11}\\ \mu_{11}&\mu_{02} \end{bmatrix} C=m001[μ20μ11μ11μ02]
那么前面的问题可以转化为:
m a x : 1 2 r T C r s . t . ∣ ∣ r ∣ ∣ 2 2 = 1 max:\quad \frac{1}{2}r^TCr\\ s.t. ||r||^2_2=1 max:21rTCrs.t.∣∣r∣∣22=1
而由拉格朗日乘子法2对该问题求解我们可以得到,唯一能使目标函数最大化(或最小化)的是 C C C的特征向量,最大值(最小值)即为特征值,而 C C C的两个特征向量正好是正交的单位向量3,我们就此确定了图像的方向即为协方差矩阵的较大特征值对应特征向量的方向。
更进一步的,由于我们知道图像有两个相互正交的特征向量,图像在其上的投影值分别为最大和最小,我们可以将其分别定义为图像的长轴和短轴,从而设计出了一个与原图相对应的椭圆,用椭圆的方向来代替图像的方向。这样一个椭圆可以用一个正定二次型矩阵来描述4,也就是用协方差矩阵 C C C来描述,我们又有一个正椭圆的表达式为5:
x 2 a 2 + y 2 b 2 = 1 \frac{x^2}{a^2}+\frac{y^2}{b^2}=1 a2x2+b2y2=1
其对应正定二次形矩阵为:
[ 1 a 2 0 0 1 b 2 ] \begin{bmatrix} \frac{1}{a^2}&0\\ 0&\frac{1}{b^2}\\ \end{bmatrix} [a2100b21]
将其绕原点逆时针旋转可得其上点的坐标变换为(参见图像的仿射变换):
u = x c o s α − y s i n α v = x s i n α + y c o s α u=xcos\alpha-ysin\alpha\\ v=xsin\alpha+ycos\alpha u=xcosα−ysinαv=xsinα+ycosα
则旋转后的椭圆满足:
( u c o s α + v s i n α ) 2 a 2 + ( u s i n α − v c o s α ) 2 b 2 = 1 \frac{(ucos\alpha+vsin\alpha)^2}{a^2}+\frac{(usin\alpha-vcos\alpha)^2}{b^2}=1 a2(ucosα+vsinα)2+b2(usinα−vcosα)2=1
化为标准参数形态则为:
( c o s 2 α a 2 + s i n 2 α b 2 ) x 2 + 2 c o s α s i n α ( 1 a 2 − 1 b 2 ) x y + ( s i n 2 α a 2 + c o s 2 α b 2 ) y 2 = 1 (\frac{cos^2 \alpha}{a^2}+\frac{sin^2\alpha}{b^2})x^2+2cos\alpha sin\alpha (\frac{1}{a^2}-\frac{1}{b^2})xy+(\frac{sin^2 \alpha}{a^2}+\frac{cos^2\alpha}{b^2})y^2=1 (a2cos2α+b2sin2α)x2+2cosαsinα(a21−b21)xy+(a2sin2α+b2cos2α)y2=1
其对应正定二次形矩阵为:
[ c o s 2 α a 2 + s i n 2 α b 2 c o s α s i n α ( 1 a 2 − 1 b 2 ) c o s α s i n α ( 1 a 2 − 1 b 2 ) s i n 2 α a 2 + c o s 2 α b 2 ] \begin{bmatrix} \frac{cos^2 \alpha}{a^2}+\frac{sin^2\alpha}{b^2}&cos\alpha sin\alpha (\frac{1}{a^2}-\frac{1}{b^2})\\ cos\alpha sin\alpha (\frac{1}{a^2}-\frac{1}{b^2})&\frac{sin^2 \alpha}{a^2}+\frac{cos^2\alpha}{b^2}\\ \end{bmatrix} [a2cos2α+b2sin2αcosαsinα(a21−b21)cosαsinα(a21−b21)a2sin2α+b2cos2α]
这个矩阵就和之前的协方差矩阵是一一对应的,从而我们可以求出:
t a n ( 2 α ) = 2 μ 11 μ 20 − μ 02 tan(2\alpha)=\frac{2\mu_{11}}{\mu_{20}-\mu_{02}} tan(2α)=μ20−μ022μ11
至此完成了图像方向角的求解,求出的 α \alpha α图像主轴和x轴正方向的夹角,当 α > 0 \alpha>0 α>0时为逆时针旋转,否则为顺时针旋转。但值得注意的是这一推导是建立在笛卡尔坐标系的状况下,而在图像坐标系中默认是以左上角为坐标原点,越往下y值越大,这于常见的笛卡尔坐标系是相反的,因此此时如果我们仍以普遍的左下角为原点来观测图像,则由上式求得的角度要取反才符合一般认知。
代码部分可参见1
一文弄懂图像的矩和相关应用 ↩︎ ↩︎
机器学习 CS229 01:线性代数(含有笔记 ↩︎
协方差矩阵特征值的几何意义 ↩︎
矩阵特征值和椭圆长短轴的关系? ↩︎
标准椭圆和任意椭圆方程之间的变换公式推导 ↩︎