【数学和算法】奇异值分解在【图像压缩】中的应用
圖片壓縮
這篇博客奇異值的物理意義是什么有例子分析使用奇異值分解來進行圖像壓縮與圖像去噪,并且對于不是方陣的矩陣也可以分解。
下面這個圖像壓縮例子是以方陣圖像為例,使用暴力分解得到特征值和特征向量。但是一般情況下,圖像不是方陣,所以沒有特征值,就需要用到SVD奇異值分解來進行壓縮。方法點擊這里。
千萬別把本文圖像壓縮和PCA降維當成一回事:
- 因為PCA降維是降低特征的維度,而本文圖像壓縮并沒有降低特征的維度,也沒有求平均值、求協方差、求協方差的特征值和特征向量等操作;
- 只不過,某些地方和PCA有點像,都是取前k個主要特征;
- 一個是直接求圖像像素的原始矩陣的特征向量,另一個是求原始矩陣的協方差矩陣的特征向量。
這里附上PCA的相關博客:【機器學習】降維——PCA(非常詳細)。
PCA降維中可能會用到奇異值分解,【數學和算法】SVD奇異值分解原理、以及在PCA中的運用。
比如說,有下面這么一副512x512的圖片(方陣才有特征值,所以找了張正方形的圖):
這個圖片可以放到一個矩陣里面去,就是把每個像素的顏色值填入到一個512x512的A矩陣中。
其中, Λ\color{blue}\LambdaΛ是對角陣,對角線上是從大到小排列的特征值。
現在,有了A的特征值,可以求得上面的對角陣Λ\color{blue}\LambdaΛ,也可以求出特征值對應的特征向量,從而也就得到了P和P的逆,那么就可以反推出矩陣A。
我們在對角陣 Λ\color{blue}\LambdaΛ中只保留前面50個的特征值(也就是最大的50個,其實也只占了所有特征值的百分之十),其它的都填0,P也只保留前50個特征向量,其他特征向量值全部賦值為0,并不是去掉那些向量,重新計算矩陣后,恢復為下面這樣的圖像:
效果還可以,其實一兩百個特征值之和可能就占了所有特征值和的百分之九十了,其他的特征值都可以丟棄了。
該方法就是使用暴力特征分解,運算時很耗時,我自己測試時,跑程序有明顯的卡頓,效率很低,還會求出復數解,不推薦。
上面的圖像壓縮Am?mA_{m*m}Am?m?,把對角陣Λ\color{blue}\LambdaΛ中的第k個后面的對角元素全置零,那么對應的矩陣PPP就可以把第k個后面向量也全部置零,這樣PPP就只保存m*k個數,Λ\color{blue}\LambdaΛ只保存k個數,總共保存m*k+k,由于m>>k,所以壓縮后需要保存的數字個數肯定遠小于保存原始像素矩陣有m*m個值,即m*k+k <<m*m。這樣就達到了壓縮的目的。需要恢復圖像的時候,就可以直接使用這m*k+k個數字即可。
例如,矩陣AAA為512*512的圖像,取矩陣AAA的前50個特征值,那么,需要保存的數字個數為:512*50+50=25650,而不壓縮的話需要存儲原始矩陣512*512=262144,一下子少了10倍。
本文的圖片壓縮借鑒馬同學博客 《如何理解矩陣特征值和特征向量?》中的例子,添加了我自己的一些理解和說明。
總結
以上是生活随笔為你收集整理的【数学和算法】奇异值分解在【图像压缩】中的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux】35. python脚本重
- 下一篇: 【opencv】数字图像处理 精选博客搜