影像處理專用圖像(取自網路公用影像)
下載講義內使用的手寫數字圖像檔案:下載 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]
請注意:
這組手寫圖像資料矩陣按照 0-9 的順序依序排列,譬如最前面的 6903 行都是數字 0。
上述程式碼取得的 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”,在同樣的壓縮比之下,觀察還原後的圖像品質哪個最好?能說出理由嗎?
X 不變
將 X 以 小圖(patch)進行切割,再將每個小圖拉成
的向量,最後重組這些向量並排成新的
矩陣。
同上,小圖大小為 /per patch。
同上,但分割成 /per patch。
其他。譬如,隨機挖取 X 裡面的 patch,可重疊,小圖大小自訂、數量隨意。
如何呈現最後的比較結果,請自行決定,譬如,將圖像並列比較。圖像可以選 Lenna, 也可以自行決定。
習題 2:每張大小 28×28 的手寫數字圖像 70000 張,不經壓縮前的儲存空間為 54.88 M Bytes。若進行 SVD 的 “Rank q approximation”,則壓縮倍數由 q 決定。寫一支程式,當調整 q 值時,可以算出壓縮的倍數,並同時顯示原圖與壓縮後還原的圖各 100 張做為比較(任選 100 張)。另外 q 的選擇可以根據
的「能量配置」來決定,或說決定 q 之後,可以計算所採用的主成分的能量佔比,本題也可以順便列印出這個佔比。