[影像處理] 全彩圖片轉256色
圖片資料壓縮 - 全彩轉換成索引色圖片
索引色概念 - Indexed color
在計算機領域當中,索引色是一種資料壓縮的技巧,主要是用來快速呈現圖片、或是加速資料傳輸,也稱之「向量量化壓縮」。如果一張圖片是上述方式編碼,顏色資訊就不會直接存在該張圖片裡,而是另外一個檔案中稱「調色盤」,以陣列的方式儲存,陣列中的每一個元素都代表著一個顏色。
換言之,該張圖片並不包含原圖的所有顏色,而是參照另一個檔案所提供的顏色,編寫而成。
調色盤的大小 - Palette size
ALPHA | RED | GREEN | BLUE | |
---|---|---|---|---|
BIT POSITION | 31-24 | 23-16 | 15-8 | 7-0 |
一張數位全彩影像(含透明值)由 32 個位元所組成,Alpha、紅、綠、藍各占 4 個 bit,可以表示的顏色為 2 的 24 次方,相當為 16,777,216 個顏色,我們可以得知控制位元大小可以控制可以表現出來的色彩。
調色盤為儲存索引顏色的地方,最常見有 4 色、 16 色、或 256 色,電腦數字表示都是 01 表示法,會根據位元的多寡來呈現,所以色彩種類都是 2 的次方。256 色就是由一個位元組(8 個位元)所組成的,4 個位元則可以表示 16 種顏色,以此類推。
PNG 圖檔、或是視訊覆蓋技術有使用到透明值,調色盤會額外保留一個位置來儲存透明值。
轉換公式 - Formula
在本作品裡頭是使用 256 種索引色彩,我使用歐幾里德距離公式對一張全彩的圖片進行色彩置換,我們國中所學的數學公式正好可以運用在此,利用巢狀走訪所有的像素值,將該像素值的 RGB 值與 256 色的索引色套此公式,會得到一個數值,求出數值差異最小的寫入一張空白的圖片上。
公式:dist((r1, r2), (g1, g2), (b1, b2)) = √((r1 - r2)² + (g1 - g2)² + (b1 - b2)²)
進一步說明,這套公式是在歐氏空間內求出距離,一顆像素值有紅、綠、藍,如果我們將紅、綠、藍視為座標,這顆像素則存在在三維空間,另外我們是用這顆像素值跟索引色比較,兩顆像素形成一向量。
主要程式
1 | for(int i=0; i<height; i++){ |