汪群超 Chun-Chao Wang

Dept. of Statistics, National Taipei University, Taiwan

SML/Lesson 6: 淺度機器學習:PCA 、SVD 及其在影像處理的應用


影像處理專用圖像(取自網路公用影像)


下載講義內使用的手寫數字圖像檔案:下載 minst_784 數字影像檔案,資料來源:https://www.kaggle.com/datasets/avnishnish/mnist-original/versions/1?resource=download
解壓縮後的檔案為 mnist-original.mat,取得圖像矩陣 X 與標籤 y 的程式碼為:

from scipy.io import loadmat

mnist = loadmat("mnist-original.mat")
X = mnist["data"]
y = mnist["label"][0]

請注意:

  1. 這組手寫圖像資料矩陣按照 0-9 的順序依序排列,譬如最前面的 6903 行都是數字 0。

  2. 上述程式碼取得的 X 與 y 是 ndarray 的型態,與講義中的 pandas 型態不同。講義中相關的程式碼必須修訂。譬如要調出所有的數字 3 的圖像,程式碼如下:(y 所存的標籤是數字,非文字)

digit_to_show = 3
Digit = X[:, y == digit_to_show]

習題 1:將一張圖像 X 利用 SVD 的 “Rank q approximation”,能達到壓縮的目的並保持圖像的品質。比較下列幾種對於圖像矩陣 X 的重組安排,並進行 “Rank q approximation”,在同樣的壓縮比之下,觀察還原後的圖像品質哪個最好?能說出理由嗎?

  1. X 不變

  2. 將 X 以 8\times 8 小圖(patch)進行切割,再將每個小圖拉成 64\times 1 的向量,最後重組這些向量並排成新的 64\times N 矩陣。

  3. 同上,小圖大小為 16\times 16/per patch。

  4. 同上,但分割成 32\times 32/per patch。

  5. 其他。譬如,隨機挖取 X 裡面的 patch,可重疊,小圖大小自訂、數量隨意。

如何呈現最後的比較結果,請自行決定,譬如,將圖像並列比較。圖像可以選 Lenna, 也可以自行決定。


習題 2:每張大小 28×28 的手寫數字圖像 70000 張,不經壓縮前的儲存空間為 54.88 M Bytes。若進行 SVD 的 “Rank q approximation”,則壓縮倍數由 q 決定。寫一支程式,當調整 q 值時,可以算出壓縮的倍數,並同時顯示原圖與壓縮後還原的圖各 100 張做為比較(任選 100 張)。另外 q 的選擇可以根據 \sigma_1, \sigma_2, \cdots,  \sigma_r 的「能量配置」來決定,或說決定 q 之後,可以計算所採用的主成分的能量佔比,本題也可以順便列印出這個佔比。


商學院  7F16
ccw@gm.ntpu.edu.tw
(02)8674-1111 
ext 66777

部落格統計

  • 122,304 點擊次數
%d bloggers like this: