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

图像处理中的数学知识

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

矩阵的特征值、特征向量的概念

这里,我们讨论的是n阶的方阵A

定义

从向量的定义可知,它是方向和长度的结合体。当一个线性变换A作用在n维线性空间V中的某一非零向量x上时,便是对该向量的长度和方向进行变化。然而,存在一些向量,线性变换A并没有改变其方向,而只是改变了长度,这种向量,叫做线性变换A特征向量,它在变换中被改变的倍数,叫做它的特征值。用数学公式表示这一概念,即:

Ax=λx(1)

其中,λ的个线性变换A的某一个特征值。从公式上可以轻易发现,如果某一向量x是线性变换A的特征向量,那么与其方向相同的任意长度(不为零)向量,都是A的特征向量,并且属于同一个特征值λ。由于相同方向的特征向量具有相同特征值,我们可以同特征值来描述这一族向量(同一个特征值,可以有多个方向的特征向量)。
从公式(1)中,可以看出特征向量和特征值的计算方法:
|λEA|=0(2)
(λEA)x=0(3)

对应于同一个线性变换A,可以有多个特征向量(方向不同),但是有多个特征向量可以对应同一个特征值。 一个向量是一个方向,两个不同方向的向量就可以张成一个空间。在相同特征值的特征向量张成的空间内,任何一个向量在变换A下,都有相同的放大倍数λ

公式(2)的左侧,总可以展成如下形式的多项式:

|λEA|=λn(a11+a22++ann)λn1++(1)n|A|

所以求特征值就是求下面方程的解:

λn(a11+a22++ann)λn1++(1)n|A|=0(4)

关于从方程(4)得到的特征值,有几个比较重要的结论(参考资料1):

  1. n阶矩阵在复数范围内,一定有n个特征值(重特征值按重数计算个数)。
  2. n阶矩阵在实数范围内有多少个特征值是不一定的
  3. n阶实对称矩阵可以看成是一个特例,因为它一定有n个实特征值(重特征值按重数计算个数)。如果其中一个特征值λ=0,矩阵的秩r(A)=k,(0<k<nk是正整数),则λ=0恰为Ank重特征值。
  4. 如果 n阶矩阵A不是对称矩阵,那么,λ=0至少为Ank重特征值。

关于特征值和特征向量的理解,参考资料3写的也很好,知乎上有很多大神的回答直击要害,对问题的理解很有帮助。

作用

参考资料4中,认为矩阵的变换有三个作用:旋转拉伸投影
A是一个n×n方阵时,只涉及到旋转,拉伸。如果矩阵在实数域内可以得到n个特征值(重特征值按重数计算个数),那么利用其对应的特征向量(单位化后)组成矩阵正交Q可以使得:

A=QΛQ1

其中正交矩阵Q起到旋转作用(旋转矩阵都是正交矩阵,且行列式都为1),对角矩阵Λ起拉伸作用。
当矩阵不是方阵而是m×n时,可以对其进行SVD分解
在之前,想研究一下正交矩阵。

正交矩阵

按照定义,正交矩阵是QQT=E,它的行列式为1或者-1。

正交矩阵的性质

了解正交矩阵的性质,在很多计算方面,能够更深入了解所进行的运算的意义。
我们这里说的都是有限维欧式空间内的正交矩阵

  1. 正交矩阵的转置伴随矩阵、之间的积矩阵都是正交矩阵;
  2. .每一行(列)都是单位向量
  3. 任意两行或两列相互垂直
  4. 其行列式等于±1

假设n维欧式空间Rn中,一个正交变换Q存在一个一一对应的正交矩阵Q。所以研究正交变换的性质,可以转为研究正交矩阵。
根据正交矩阵行列式的值,将其分为两类:|Q|=1,为第一类;|Q|=1,为第二类。
第一类正交矩阵,当其左乘一个向量时,几何意义是使该量在Oxyz坐标系下旋转;
第一类正交矩阵,当其左乘一个向量时,几何意义是使该向量沿Oxyz某一轴(点)进行反射;[5]
无论是哪一类正交矩阵,其左乘向量,均不会改变向量的长度,即|Qv|=|Q||v|=|v|
所以上面将矩阵A拆成A=QΛQ1的形式后,由于Q是正交矩阵,它作用在向量v上,只是对其进行旋转或者反射,而对向量长度有影响的是矩阵Λ。其上的元素由矩阵A的特征值组成。
需要注意的是,只有当矩阵A能够在实数域内有n个特征值(重数也计入)的情况下,可以如此分解。但是,对更多的一般性矩阵A,在实数域内没有n个实特征根,或者是更一般的m×n维矩阵,此时,我们用SVD分解的方法进行研究。

SVD分解

协方差

假设有两个变量XY,他们的取值为X={x1,x2,,xn}Y={y1,y2,,yn},他们的平均值(期望)记为是E(X)=X¯=1nxiE(Y)=Y¯=1nyiXY的协方差就是研究两个变量之间的相关关系。比如当一个的取值不断增大时,另一个变量的取值如何变化,知乎上的一篇文章( 如何通俗易懂地解释「协方差」与「相关系数」的概念?)讲的很好。

根据奇异值分解

n×n阶矩阵按特征值分解相似,任一m×n阶矩阵A也可以写成类似的形式:

A=UΣVT(5)

那么得到的U是一个m×m的方阵(里面的向量是正交的,U里面的向量称为左奇异向量),Σ是一个m×n的矩阵(除了对角线的元素都是0,对角线上的元素称为奇异值),VT(V的转置)是一个n×n的矩阵,里面的向量也是正交的,V里面的向量称为右奇异向量)。

求法

利用如下公式可以计算出各矩阵:

(ATA)vi=λivi(6)

δi=λi(7)

ui=1δiAvi(8)

对方程计算,得到的v,就是的右奇异向量σ就是奇异值u就是左奇异向量

作用

当矩阵A=UΣVT左乘一个向量v时,只有Σ对向量的长度进行了拉伸(收缩),而矩阵UV都只是对其进行旋转或反射。当作用在图像上时,也只有Σ对图像进行了各个方向上的伸缩改变。

用奇异值分解图像

图像处理中的数学知识
用奇异值的方法,将这幅图像进行分解,得形如A=UΣVT格式的矩阵。其中Σ是由矩阵奇异值由大到小排列组成的对角矩阵。
我们分别保留前10,30,100,300个奇异值,其余奇异值设为0,比较图像的变化:
图像处理中的数学知识
奇异值保留前10
图像处理中的数学知识
奇异值保留前30
图像处理中的数学知识
奇异值保留前100
图像处理中的数学知识
奇异值保留前300。

代码

import cv2
import numpy as np
from numpy import linalg as la  # 用到别名
from scipy.misc import imsave

import scipy
im = cv2.imread('lena512.bmp')
print(im.shape)
gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
U, Sigma, VT = la.svd(gray)
print('矩阵U的形状:', U.shape, '    矩阵Sigma的形状:',
      Sigma.shape, '    矩阵VT的形状:', VT.shape)
se = np.eye(512, dtype=np.float64)
n = 512
i = 0
k = 30  # 保留特征值数目
# 改变特征值
while i < n:
    if i > k - 1:
        Sigma[i] = 0
    se[i, i] = Sigma[i]
    i += 1

svt = np.dot(se, VT)
usvt = np.dot(U, svt)
imsave('USVT_Sigma=30m.bmp', usvt)

参考资料

  1. 秦川, 李小飞. 方阵的秩与特征值的关系[J]. 课程教育研究:学法教法研究, 2015(27):120-120.
  2. 如何通俗易懂地解释「协方差」与「相关系数」的概念?
  3. 如何理解矩阵特征值?马同学的回答
  4. 矩阵的特征值分解与奇异值分解的几何意义
  5. 杜美华, 孙建英. 正交变换的几何意义及其应用[J]. 哈尔滨师范大学自然科学学报, 2014, 30(3):36-39.