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

20
數數數數數數 數數數數 數數數數 13.1 何何何何 13.2 何何何何 13.3 MATLAB 何何何何何 13.4 何何何何 13.5 何何何何何何

description

數位影像處理 第十三章 色彩處理. 13.1 何謂色彩 13.2 色彩模型 13.3 MATLAB 的色彩影像 13.4 虛擬上色 13.5 彩色影像處理. 13.1 何謂色彩. 人類的視覺系統一般來說,會將色彩分為不同份量的紅、綠、藍混合起來的結果,因此紅、綠、藍稱為三原色,將任二原色混合後得到的是第二次色 : 紫紅 ( 紫 )= 紅 + 藍 青綠 = 綠 + 藍 黃 = 紅 + 綠. RGB 對色函數. 13.1 何謂色彩. - PowerPoint PPT Presentation

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

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

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

13.1 何謂色彩13.2 色彩模型13.3 MATLAB的色彩影像13.4 虛擬上色13.5 彩色影像處理

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

13.1 何謂色彩• 人類的視覺系統一般來說,會將色彩分為

不同份量的紅、綠、藍混合起來的結果,因此紅、綠、藍稱為三原色,將任二原色混合後得到的是第二次色 :

紫紅 ( 紫 )= 紅 + 藍 青綠 = 綠 + 藍 黃 = 紅 + 綠

RGB 對色函數

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

13.1 何謂色彩• 某些波長中的紅、綠、藍色值為負數,實

際上不可能會有這樣的結果,不過可以看成色源再加上其他原色光束,以維持對色。為了除去色彩中的負數值, CIE 採用 XYZ色彩模型, XYX 可以透過線性轉換與從對應的 RGB 數值得到。

XYZ 對色函數

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

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表示,稱為色度座標。

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

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

色度圖

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

13.2 色彩模型• 色彩模型是以某種標準的方式分辨顏色的

方法, 基本上是由三維座標與一個子空間所組成,在這子空間中,一個點便代表一個色彩。

• 要定義出色域,首先產生一個 100X100X3的陣列,陣列中的每個點都對應一個 XYZ數值 (i/100 , j/100 , 1-i/100-j/100) ,然後計算對應 RGB 值,若為負數,輸出為白色 :

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

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;• res=cg;• 然後使用下列指令顯示位於色度圖中的色域 :• >> imshow(cG),line([x' x(1)],[y' y(1)]),axis square,axis xy,

axis on

RGB 色域

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

13.2 色彩模型• 色調 (Hue) ,飽和度 (Saturation) ,明暗度 (Val

ue) ,縮寫為 HSA 。• 色調 (Hue):[ 全彩 ] 的屬性 ( 紅、綠、藍、橘等 ) 。• 飽和度 (Saturation): 色彩被白色稀釋的程度。色

彩中含有白色越多,飽和度變越低,因此深紅色飽和度高,亮紅色飽和度低。

• 明暗度 (Value): 亮的顏色明暗度高,岸的顏色明暗度低。

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

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))

紅色部分

綠色部分 藍色部分

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

13.3 MATLAB的色彩影像• 轉換成 YIQ 或 HSV ,再次檢視組成部分 :

• >> xh=rgb2hsv(x);• >> imshow(xh(:,:,1))• >> figure,imshow(xh(:,:,2))• >> figure,imshow(xh(:,:,3))

色調 飽和度 明暗度

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

13.3 MATLAB的色彩影像• YIQ 色彩空間 :• >> xn=rgb2ntsc(x);• >> imshow(xn(:,:,1))• >> figure,imshow(xn(:,:,2))• >> figure,imshow(xn(:,:,3))

Y I Q

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

13.4 虛擬上色• 虛擬上色指的是對灰階影像上指定顏色,以便在視

覺上凸顯影像的某些面向。• 明暗度切割 : 這個方法是將影像切割成幾個灰些範

圍,每個範圍只定不同顏色 :

灰階 0-63 64-127 128-191 192-255

顏色 藍 紫紅 綠 紅

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

13.4 虛擬上色• 在 MATLAB 中,要使用另外顏色來檢視影像,可

以使用 imshow ,並設定參數 colormap 。>> b=imread('blocks.tif');

>> imshow(b,colormap(jet(256)))

然而,色譜若選擇錯誤可能會破壞整個影像,例如將 vga色譜代入就很不恰當,因為這個色譜只有 16 列,所以必須將影像灰階數目減至 16 ,可以使用函數 grayslice:

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

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)

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

13.5 彩色影像處理• 分別處理每個 RGB 矩陣。• 轉換色彩空間,將明暗度自色彩資訊抽離,

單獨處理明暗度部分。

• 加強比對 : 透過明暗度部份處裡,可以獲得對比加強效果。

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

13.5 彩色影像處理• 轉全彩 (RGB) 影像 :>> [x,map]=imread('emu.tif'); >> c=ind2rgb(x,map);

RGB 轉 YIQ 以便取明暗度部分 :>> cn=rgb2ntsc(c);

將明暗度部分帶入直方圖均化,然後轉回 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

轉直方圖均化RGB

單一三維陣列

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

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)

低通

高通

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

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)

雜訊紅色部分

雜訊綠色部分

雜訊藍色部分

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

13.5 彩色影像處理只除去 y 部分雜訊tnn=rgb2ntsc(tn);

tnn(:,:,1)=medfilt2(tnn(:,:,1));

tm2=ntsc2rgb(tnn);

imshow(tm2)

去除 RGB各部份雜訊 除去 y 部分雜訊

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

13.5 彩色影像處理• 邊緣檢測 :

使用函數 rgb2gray

f=imread('flowers.tif');

fg=rgb2gray(f);

fe1=edge(fg);

imshow(fe1)

使用邏輯運算子 or 合併結果f1=edge(f(:,:,1));

f2=edge(f(:,:,2));

f3=edge(f(:,:,3));

fe2=f1 |f2| f3;

figure,imshow(fe2)

fe1

fe2