3.6 量化與混色

Download Report

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