數位影像處理第十三章色彩處理

Download Report

Transcript 數位影像處理第十三章色彩處理

數位影像處理
第十三章 色彩處理
13.1 何謂色彩
13.2 色彩模型
13.3 MATLAB的色彩影像
13.4 虛擬上色
13.5 彩色影像處理
13.1 何謂色彩
• 人類的視覺系統一般來說,會將色彩分為
不同份量的紅、綠、藍混合起來的結果,
因此紅、綠、藍稱為三原色,將任二原色
混合後得到的是第二次色:
紫紅(紫)=紅+藍
青綠=綠+藍
黃=紅+綠
RGB對色函數
13.1 何謂色彩
• 某些波長中的紅、綠、藍色值為負數,實
際上不可能會有這樣的結果,不過可以看
成色源再加上其他原色光束,以維持對色。
為了除去色彩中的負數值,CIE採用XYZ色
彩模型,XYX可以透過線性轉換與從對應
的RGB數值得到。
XYZ對色函數
13.1 何謂色彩
• 一般來說,組成特定顏色的XYZ值稱為三色
激值,若不考慮亮度,三色激值可以除以
X+Y+Z加以正規劃:
x = X / X+Y+Z
y = Y / X+Y+Z
z = Z / X+Y+Z
可發現x+y+z=1,因此顏色可以只用x與y表
示,稱為色度座標。
13.1 何謂色彩
• 知道xy與Y值後,便可以透過反推上述方程式求得三色激
值的XZ :
X= ( x / y ) r
Z= (1 – x – y / y ) r
• 色度圖:
wxyz=load('ciexyz31.txt');
xyz=wxyz(:,2:4)';
xy=xyz'./(sum(xyz)'*[1 1 1]);
x=xy(:,1)';
y=xy(:,2)';
figure,plot([x x(1)],[y y(1)]),xlabel('x'),ylabel('y'),axis square
色度圖
13.2 色彩模型
• 色彩模型是以某種標準的方式分辨顏色的
方法, 基本上是由三維座標與一個子空間
所組成,在這子空間中,一個點便代表一
個色彩。
• 要定義出色域,首先產生一個100X100X3
的陣列,陣列中的每個點都對應一個XYZ數
值(i/100 , j/100 , 1-i/100-j/100) ,然後計
算對應RGB值,若為負數,輸出為白色:
13.2 色彩模型
•
•
•
•
•
•
•
•
•
•
•
•
•
•
function res=gamut()
global cg;
x2r=[3.063 -1.393 -0.476;-0.969 1.876 0.042;0.068 -0.229 1.069];
cg=zeros(100,100,3);
for i=1:100,
for j=1:100,
cg(i,j,:)=x2r*[j/100 i/100 1-i/100-j/100]';
if min(cg(i,j,:))<0,
cg(i,j,:)=[1 1 1];
end;
end;
end;
RGB色域
res=cg;
• 然後使用下列指令顯示位於色度圖中的色域:
• >> imshow(cG),line([x' x(1)],[y' y(1)]),axis square,axis
xy,axis on
13.2 色彩模型
• 色調(Hue) ,飽和度(Saturation) ,明暗度
(Value) ,縮寫為HSA 。
• 色調(Hue):[全彩]的屬性(紅、綠、藍、橘等) 。
• 飽和度(Saturation):色彩被白色稀釋的程度。色彩
中含有白色越多,飽和度變越低,因此深紅色飽
和度高,亮紅色飽和度低。
• 明暗度(Value):亮的顏色明暗度高,岸的顏色明暗
度低。
13.3 MATLAB的色彩影像
• 由於彩色影像的每個像素資訊都必須獨立
分為三項,因此在MATLAB中,全彩影像可用
三維陣列來表示,假設獨取一RGB影像:
•
•
•
•
•
•
•
>> x=imread('lily.tif');
>> size(x)
ans =
186 230 3
>> figure,imshow(x(:,:,1))
>> figure,imshow(x(:,:,2))
>> figure,imshow(x(:,:,3))
紅色部分
綠色部分
藍色部分
13.3 MATLAB的色彩影像
• 轉換成YIQ或HSV ,再次檢視組成部分:
•
•
•
•
>> xh=rgb2hsv(x);
>> imshow(xh(:,:,1))
>> figure,imshow(xh(:,:,2))
>> figure,imshow(xh(:,:,3))
色調
飽和度
明暗度
13.3 MATLAB的色彩影像
• YIQ色彩空間:
•
•
•
•
>> xn=rgb2ntsc(x);
>> imshow(xn(:,:,1))
>> figure,imshow(xn(:,:,2))
>> figure,imshow(xn(:,:,3))
Y
I
Q
13.4 虛擬上色
• 虛擬上色指的是對灰階影像上指定顏色,以便在視
覺上凸顯影像的某些面向。
• 明暗度切割:這個方法是將影像切割成幾個灰些範
圍,每個範圍只定不同顏色:
灰階
0-63
64-127
顏色
藍
紫紅
128-191 192-255
綠
紅
13.4 虛擬上色
• 在MATLAB中,要使用另外顏色來檢視影像,可
以使用imshow ,並設定參數colormap 。
>> b=imread('blocks.tif');
>> imshow(b,colormap(jet(256)))
然而,色譜若選擇錯誤可能會破壞整個影像,例如將vga
色譜代入就很不恰當,因為這個色譜只有16列,所以必須
將影像灰階數目減至16 ,可以使用函數grayslice:
13.4 虛擬上色
• >> b16=grayslice(b,16);
• >> figure,imshow(b16,colormap(vga))
• 我們也可以自行產生色譜必須產生三個
行的矩陣,每一列都是介於0.0與1.0之間的RGB值構成,
使用下列指令產生色譜:
• >> mycolormap=[0 0 1;1 0 1;0 1 0;1 0 0];
• >> b4=grayslice(b,4);
• >> imshow(b4,mycolormap)
13.5 彩色影像處理
• 分別處理每個RGB矩陣。
• 轉換色彩空間,將明暗度自色彩資訊抽離,
單獨處理明暗度部分。
• 加強比對:透過明暗度部份處裡,可以獲得
對比加強效果。
13.5 彩色影像處理
• 轉全彩(RGB)影像:
>> [x,map]=imread('emu.tif');
>> c=ind2rgb(x,map);
RGB轉YIQ以便取明暗度部分:
>> cn=rgb2ntsc(c);
將明暗度部分帶入直方圖均化,然後轉回RGB方便顯示:
RGB
>> cn(:,:,1)=histeq(cn(:,:,1));
>> c2=ntsc2rgb(cn);
>> imshow(c2)
將RGB各個部份帶入直方圖均化:
>> cr=histeq(c(:,:,1));
>> cg=histeq(c(:,:,2));
>> cb=histeq(c(:,:,3));
全部放入單一三維陣列顯示:
>> c3=cat(3,cr,cg,cb);
>> imshow(c3)
轉直方圖均化
RGB
單一三維陣列
13.5 彩色影像處理
• 空間濾波:
低通
>> a15=fspecial('average',15);
>> cr=filter2(a15,c(:,:,1));
>> cg=filter2(a15,c(:,:,2));
>> cb=filter2(a15,c(:,:,3));
>> blur=cat(3,cr,cg,cb);
>> imshow(blur)
高通
>>cn=rab2ntsc(c);
>>a=fspecial(‘unsharp’);
>>cn(:,:,1)=filter2(a,cn(:,:,1));
>>cu=ntsc2rgb(cn);
>> imshow(cu)
低通
高通
13.5 彩色影像處理
• 去除雜訊:
使用色彩影像處理
tw=imread('twins.tif');
加入雜訊
tn=imnoise(tw,'salt & pepper');
figure,imshow(tn(:,:,1))
figure,imshow(tn(:,:,2))
figure,imshow(tn(:,:,3))
將各RGB部分帶入中位數濾波器
trm=medfilt2(tn(:,:,1));
tgm=medfilt2(tn(:,:,2));
tbm=medfilt2(tn(:,:,3));
tm=cat(3,trm,tgm,tbm);
imshow(tm)
雜訊紅色部分
雜訊綠色部分
雜訊藍色部分
13.5 彩色影像處理
只除去y部分雜訊
tnn=rgb2ntsc(tn);
tnn(:,:,1)=medfilt2(tnn(:,:,1));
tm2=ntsc2rgb(tnn);
imshow(tm2)
去除RGB各部份雜訊
除去y部分雜訊
13.5 彩色影像處理
• 邊緣檢測:
使用函數rgb2gray
f=imread('flowers.tif');
fg=rgb2gray(f);
fe1=edge(fg);
imshow(fe1)
fe1
使用邏輯運算子or合併結果
f1=edge(f(:,:,1));
f2=edge(f(:,:,2));
f3=edge(f(:,:,3));
fe2=f1 |f2| f3;
figure,imshow(fe2)
fe2