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

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

  • Upload
    owen

  • View
    116

  • Download
    0

Embed Size (px)

DESCRIPTION

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

Citation preview

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