圖像特征提取學(xué)習(xí)筆記 | 使用低秩 SVD 的圖像壓縮實例!
點擊下方卡片,關(guān)注“新機(jī)器視覺”公眾號
視覺/圖像重磅干貨,第一時間送達(dá)
最近關(guān)注尋找一些非典型算法嘗試從一幅圖像中提取一些特征用于機(jī)器學(xué)習(xí)分類,看到Mathworks公司主頁上的這個實例,深受啟發(fā),也許從圖像對應(yīng)的矩陣分解理論能適當(dāng)?shù)亟稻S待處理的圖像數(shù)據(jù)并抽取有意義的特征用于基于圖神經(jīng)網(wǎng)絡(luò)的分類研究。
轉(zhuǎn)發(fā)于此,備忘!
文章來源:
https://ww2.mathworks.cn/help/matlab/math/image-compression-with-low-rank-svd.html
使用低秩 SVD 的圖像壓縮
此示例說明如何使用 svdsketch 壓縮圖像。
svdsketch 使用低秩矩陣逼近來保留圖像的重要特征,同時濾除不太重要的特征。
隨著 svdsketch 使用的容差量級的增大,更多特征將被濾除,從而改變圖像中的詳細(xì)程度。
加載圖像
加載圖像 street1.jpg,這是一幅城市街道圖。
形成此圖像的三維矩陣是 uint8,因此將圖像轉(zhuǎn)換為灰度矩陣。
查看具有原始矩陣秩注釋的圖像。
A = imread('street1.jpg');A = rgb2gray(A);imshow(A)title(['Original (',sprintf('Rank %d)',rank(double(A)))])
壓縮圖像
使用 svdsketch 計算低秩矩陣,該矩陣在 1e-2 的容差范圍內(nèi)逼近 A。
通過將返回的 SVD 因子乘以 svdsketch 形成低秩矩陣,將結(jié)果轉(zhuǎn)換為 uint8,并查看生成的圖像。
[U1,S1,V1] = svdsketch(double(A),1e-2);Anew1 = uint8(U1*S1*V1');imshow(uint8(Anew1))title(sprintf('Rank %d approximation',size(S1,1)))
svdsketch 產(chǎn)生秩為 288 的逼近,這導(dǎo)致圖像的部分邊界線中出現(xiàn)一些微小顆粒。
現(xiàn)在,使用容差 1e-1 再次壓縮圖像。
隨著容差量級的增大,由 svdsketch 產(chǎn)生的逼近的秩通常會減小。
[U2,S2,V2] = svdsketch(double(A),1e-1);Anew2 = uint8(U2*S2*V2');imshow(Anew2)title(sprintf('Rank %d approximation',size(S2,1)))
這一次,svdsketch 產(chǎn)生了秩為 48 的逼近。
圖像大體上仍算清晰可見,但額外的壓縮增加了模糊性。
限制子空間大小
svdsketch 根據(jù)指定的容差,以自適應(yīng)方式確定矩陣草圖的秩。
但是,您可以使用 MaxSubspaceDimension 名稱-值對組來指定應(yīng)該用于形成矩陣草圖的最大子空間大小。此選項會產(chǎn)生不滿足容差的矩陣,因為您指定的子空間可能太小。
在這些情況下,svdsketch 返回具有最大允許子空間大小的矩陣草圖。
使用容差為 1e-1、最大子空間大小為 15 的 svdsketch。
指定第四個輸出以返回相對逼近誤差。
[] = svdsketch(double(A),1e-1,'MaxSubspaceDimension',15);
將結(jié)果的相對逼近誤差與指定的容差進(jìn)行比較。
apxErr 包含一個元素,因為 svdsketch 只需一次迭代來計算解。
apxErr <= 1e-1
ans = logical
0
結(jié)果表明,矩陣草圖不滿足指定的容差。
查看高度壓縮的秩為 15 的圖像。
Anew3 = uint8(U3*S3*V3');imshow(Anew3)title(sprintf('Rank %d approximation',size(S3,1)))
比較結(jié)果
最后,并排查看所有圖像進(jìn)行比較。
tiledlayout(2,2,'TileSpacing','Compact')nexttileimshow(A)title('Original')nexttileimshow(Anew1)title(sprintf('Rank %d approximation',size(S1,1)))nexttileimshow(Anew2)title(sprintf('Rank %d approximation',size(S2,1)))nexttileimshow(Anew3)title(sprintf('Rank %d approximation',size(S3,1)))
思考:
如果對于生物醫(yī)學(xué)圖像,織物圖像等,能否找到一個適當(dāng)?shù)闹付ㄈ莶?,得到壓縮的圖片,降低新設(shè)計算法的計算復(fù)雜度?這個值得做數(shù)值實驗研究一下。
—版權(quán)聲明—
僅用于學(xué)術(shù)分享,版權(quán)屬于原作者。
若有侵權(quán),請聯(lián)系微信號:yiyang-sy 刪除或修改!





