使用图像解释矩阵特征向量与特征值

特征值矩阵与特征向量矩阵

矩阵 A A A的维度为n×n,则矩阵 A A A与特征向量 v v v特征值 λ \lambda λ之间的关系是: A v = λ v Av=\lambda v Av=λv
通过计算,我们可以求取 A A A的一系列特征向量组成的特征矩阵 V = [ v 1 , v 2 , v 3 , . . . , v n ] V=[v_1,v_2,v_3,...,v_n] V=[v1,v2,v3,...,vn]和对应的一系列特征值组成的特征值矩阵 Λ = d i a g [ λ 11 , λ 22 , . . . , λ n n ] \Lambda=diag[\lambda_{11},\lambda_{22},...,\lambda_{nn}] Λ=diag[λ11,λ22,...,λnn],则有一下关系: A = V Λ V T A=V\Lambda V^T A=VΛVT

奇异值矩阵与奇异矩阵

矩阵 A A A的维度为n×m,则此时的 A A A无法求解特征值和特征向量,但是可以求广义上的特征值与特征向量,这就牵涉到奇异矩阵的分解。
奇异值分解步骤如下:

  1. 求解 A A T AA^T AAT的特征矩阵 U U U d i m ( U ) = n × n dim(U)=n×n dim(U)=n×n
  2. 求解 A T A A^TA ATA的特征矩阵 V V V d i m ( V ) = m × m dim(V)=m×m dim(V)=m×m
  3. 求出 A A T AA^T AAT的特征向量对应的特征值矩阵 Λ = d i a g [ λ 11 , λ 22 , . . . , λ n n ] \Lambda=diag[\lambda_{11},\lambda_{22},...,\lambda_{nn}] Λ=diag[λ11,λ22,...,λnn]
  4. 奇异值矩阵为 Σ = d i a g [ σ 11 , σ 12 , . . . , σ n n ] \Sigma=diag[\sigma_{11},\sigma_{12},...,\sigma_{nn}] Σ=diag[σ11,σ12,...,σnn] σ i i \sigma_{ii} σii λ i i \lambda_{ii} λii对应的关系为: σ i i = λ i i \sigma_{ii}=\sqrt{\lambda_{ii}} σii=λii d i m ( Σ ) = n × m dim(\Sigma)=n×m dim(Σ)=n×m

矩阵 A A A与奇异矩阵 U U U V V V,奇异值矩阵 Σ \Sigma Σ之间的关系为: A = U Σ V T A=U\Sigma V^T A=UΣVT
由上式得 A T = V Σ U T A^T=V\Sigma U^T AT=VΣUT,则 A A T = U Σ V T V Σ U T = U Σ 2 U T = U Λ U T AA^T=U\Sigma V^TV\Sigma U^T=U\Sigma^2U^T=U\Lambda U^T AAT=UΣVTVΣUT=UΣ2UT=UΛUT,即 Σ 2 = Λ \Sigma^2=\Lambda Σ2=Λ,这也是步骤4的来源。

使用图像解释特征向量与特征值

我们取灰度图 I I I d i m ( I ) = n × m dim(I)=n×m dim(I)=n×m,我们把 I I I当作矩阵 A A A
思路如下:

  1. 求解 A A A的奇异矩阵 U U U V V V,奇异值矩阵 Σ \Sigma Σ
  2. 选取最大的k个奇异值 σ i \sigma_i σi,以及对应的奇异向量 u i , v i {u_i},{v_i} ui,vi
  3. 使用挑选出来的值组成新的奇异矩阵 U n × k U_{n×k} Un×k V m × k V_{m×k} Vm×k,奇异值矩阵 Σ k × k \Sigma_{k×k} Σk×k
  4. 得到 A n × m = U n × k Σ k × k V m × k A_{n×m}=U_{n×k}\Sigma_{k×k}V_{m×k} An×m=Un×kΣk×kVm×k

过程用python实现,代码如下:

image1 = Image.open(filepath)
image1 = image1.convert('L')
image1.show()
A = np.asarray(image1)

U,Sigma,V = np.linalg.svd(A)
k = 10
indexS = np.argsort(-Sigma)
K_index = indexS[:k]
U = U[:, K_index]
S = [[0.0 for i in range(k)] for i in range(k)]
Sigma = Sigma[K_index]
for i in range(k):
    S[i][i] = Sigma[i]
V = V[K_index,:]
X = np.matmul(U,S)
A = np.matmul(X,V)
A = Image.fromarray(A)
A.show()

原图:
使用图像解释矩阵特征向量与特征值_第1张图片
特征图,仅使用前10个最大的特征值对应的特征矩阵:
使用图像解释矩阵特征向量与特征值_第2张图片
特征图,排除前10个最大的特征值对应的特征矩阵:
使用图像解释矩阵特征向量与特征值_第3张图片
你是不是一眼就看懂了特征向量的作用!!!
没有的话,但愿下面的解释可以帮助你:
矩阵较大的特征值及其对应的特征向量存储了矩阵关键整体的信息,较小的特征值及其对应的特征向量存储了矩阵细节信息。

你可能感兴趣的:(图像处理)