Transcript 3.6 量化與混色
第三章 影像顯示 3.1 前言 • 看看空間解析度和量化會如何影響影像的顯示, 尤其是影像品質的部分,各種影像的屬性如何 影響到顯示的品質。 • 人類的視覺大致都比較喜歡銳利而精細的影像。 • 許多因子都會影響到顯示效果,包括: 1. 2. 3. 4. 1 環境照明。 顯示器類型與設定。 顯示卡。 顯示器解析度。 3.2 影像顯示的基礎 • 這個函數的作用就是將矩陣顯示為影像 50 100 150 200 250 50 100 150 200 250 • image 指令是以色譜來指定矩陣元素的顏色。 2 3.2 影像顯示的基礎 • 要適當地顯示出影像,就必須在image 這個 指令外加上幾個額外的指令。 3 3.2 影像顯示的基礎 • 我們也可以調整色譜顏色的多寡,不過這可能 會大大影響顯示效果。 4 3.2 影像顯示的基礎 • image 指令也可以顯示索引色彩影像,不過 要記得在imread 中讀入色譜: >> [t, tmap]=imread(‘trees.tif’); >> figure, image(t), truesize, axis off, colormap(tmap) – tmap 是 一<256×3 double>的data 5 3.2 影像顯示的基礎 • 至於全彩影像,imread 指令會將之讀取為 3D 陣列 – image 指令則會忽略設定的色譜,直接使用陣列 中的顏色值來顯示色彩。 >> a=imread(‘autumn.tif’); >> figure, image(a), truesize, axis off 6 3.3 imshow 函數 • 7 顯示Matlab影像處理指令所輸出的矩陣(通常 是double形態)有兩種選擇: 1. 轉換為uint8 形態並顯示。 2. 直接顯示矩陣。 – 只要矩陣元素介於0 與1 之間,imshow 就 可以將double形態的矩陣正確地顯示成 灰階影像。 圖 3.1 >> ce=imread(‘cell.tif’); >> ced=double(ce); >>imshow(ced) >>imshow(ce) >>imshow(ced/255) >>imshow(ced/512) 8 >>imshow(ced/128) 3.3 imshow 函數 • 使用im2double 函數便可將原始影像更正確 地轉換成double 形態 >> ced1=im2double(ce); >> imshow(ced1) • 若將double 形態的影像cd 的數值適當的調 整於0 至1 之間,就有兩種方法將之轉換回 uint8形態的影像: >> ce1=uint8(255*ced1); >>ce2=im2uint8(ced1); 9 3.3 imshow 函數 • MATLAB沒有這種二元資料形態,不過可以使 用邏輯(logical)旗標,將uint8的數值0 與1 解讀成邏輯資料。 • 若用whos指令檢查所有的變數,結果會包含 下面這一行: 10 圖 3.3 >> imshow(cl) 11 >> imshow(uint8(cl)) 3.4 位元平面 • 灰階影像按照位元平面(bitplanes)分割後, 就可以轉換為一系列的二元影像。 • 第0 個位元平面 – 最低位元平面(least significant bit plane) • 第八位元平面 – 最高位元平面(most significant bit plane) 12 3.4 位元平面 • 先將一個灰階影像轉換成double形態的矩陣 ,也就是進行下列運算: 13 圖 3.4 • 最低位元平面(least significant bit plane) • 最高位元平面(most significant bit plane) 14 3.5 空間解析度 • 空間解析度意指影像像素的密度,空間解析度 越高,用來顯示影像的像素越多。 • 用MATLAB 的imresize 函數可以用來實驗空 間解析度變化的影響。 >> imresize(x,1/2); 15 3.5 空間解析度 >> x2=imresize(imresize(x,1/2),2); • Pixelization 像素化效果 16 圖 3.5 17 圖 3.6 18 圖 3.7 19 3.6 量化與混色 • 量化 (quantization) 是指用來顯 示影像的灰 階數目。 • 均勻量化( uniform quantization ) 20 第三章 影像顯示 第58頁 圖3.8 3.6 量化與混色 • 運用MATLAB 進行上述映射,可以使用下列指 令。假設x 為uint8形態的矩陣: • 然而,要減少影像的灰階數還有一個更好的方 法,就是使用grayslice函數。 21 圖 3.9 22 圖 3.10 23 圖 3.11 24 圖 3.12 • 均勻量化最明顯的效果便是輪廓失真,灰階數 越少越明顯。 25 3.6 量化與混色 • 混色(dithering) 簡單來說,混色就是減少 影像色彩數目的過程。 • 將影像用兩種色調表示的方法也稱為半色調 (halftoning)。 • 混色矩陣(dither matrix) • 重複這個矩陣到和原影像矩陣一樣大。 26 3.6 量化與混色 • 假設d(i, j) 是重複D 之後得到的矩陣,則輸出 像素p(i, j)便定義為: 27 圖 3.14 28 3.6 量化與混色 • 二個灰階值以上的影像也可以使用混色法產生。 • 舉例來說,若想量化成四個輸出層次0、1、2 及3 。 (由於 255/3 = 85) 29 圖 3.15 >> >> >> >> >> >> 30 D = [0 56; 84 28]; r = repmat(D, 128, 128); x = double(x); q = floor(x/85); x4 = q+(x-85*q>r); imshow(uint8(85*x4)) >> >> >> >> >> >> D = [0 24; 36 12]; r = repmat(D, 128, 128); x = double(x); q = floor(x/37); x8 = q+(x-37*q>r); imshow(uint8(37*x8)) 3.6 量化與混色 • 誤差擴散法(error diffusion) – 將影像量化成兩個層次。 – 我們考慮要每一個像素的灰階值及其量化值之間的 誤差。 – 所謂的誤差擴散法就是將誤差分散到鄰近的像素。 • 最常用的方法是由Floyd 和Steinberg 發展出來。 – 影像中的每個像素p(i, j) 都會執行下列步驟: 1.進行量化 2.計算量化誤差。定義為: 31 3.6 量化與混色 3. 根據右表將誤差E 往右往下擴散: 32 第三章 影像顯示 第65頁 圖 3.17 33 圖 3.18 34