彩色图像处理
彩色基礎
什么是彩色
彩色是物體的一種屬性,就像紋理、形狀、重量一樣. 通常, 它依賴于3個方面的因素:
- 光源一一照射光的譜性質或譜能量分布.
- 物體-一被照射物體的反射性質.
- 成像接收器(眼睛或成像傳感器)一一光譜能量吸收性質
其中,光特性是顏色科學的核心。假如光沒有顏色(捎色的,如觀察者看到的黑白電視的光),那么它的屬性僅僅是亮度或者數值。可以用灰度值來描述亮度, 光的范圍從黑到灰.最后到白。
而對于彩色光,我們通常用3個基本量來描述其光源的質量: 輻射率、光強和亮度。
(1)輻射率是從光源流出能量的總量, 通常用瓦特(W)度量;
(2)光強用流明度量,它給出了觀察者從光源接收的能量總和的度量:
(3)亮度是彩色強度概念的具體化。它實際上是一個難以度量的主關描繪子.
同樣作為能量的度盤,輻射率與光強卻往往沒有必然的聯系.例如,在進行X光檢查時,光從X射線源中發出,它是具有實際意義上的能量的。但由于其處于可見光范圍以外,觀察者很難感覺到。因此對我們來說,它的光強幾乎為o.
我們眼中的彩色
人類能夠感受到的物體的顏色是由物體反射光的性質決定的,. 如圖7.2所示,可見光是由電磁波譜中較窄的液段組成。如果物體反射的光在所有可見光披長范圍內是平衡的, 則站在觀察者的角度它就是白色的:如果物體僅對有限的可見光譜范圍反射,則物體表現為某種特定顏色。例如,反射披長范圍在450~500nm 之間的物體呈現藍色, 它吸收了其他被長光的多數能量: 而如果物體吸收了所有的入射光,則將呈現為黑色。
三原色
據詳細的實驗結果可知,人眼中負責彩色感知的細胞中約有65%對紅光敏感, 33%對綠光敏感,而只有2%對藍光敏感。正是人眼的這些極收特性決定了被看到的彩色是通常所謂的原色紅(R )、綠(G )、藍(B)的各種組合。國際照明委員會(CIE )規定以藍=435.8nm、綠=546.lnm、紅=700nm 作為主原色, 紅CR )、綠(G )、藍( B )也因此被稱為3 原色。
在圖7.3所示的CIE色度圖中,最外圍的輪廓對應所有的可見光譜色,在其邊緣上標出了對應的波長值(以m為單位〉,該輪廓之內的區域包含了所有的可見顏色.如果將色度圈中的三色點兩兩連接成一個三角形, 則該三角形內的任何顏色都可以自這3種原色的不同混合產生。
我們看到, 圖7.3中由R、G、B三種標準原色所連成的三角形并不能涵蓋整個可見顏色區域, 這說明僅使用三原色并不能得到所有的可見顏色。事實上, 圖7.3中的三角形區域對應著典型的RGB監視器所能夠產生的顏色范圍, 稱為彩色全域:而在三角形內不規則的區域表示高質量的彩色打印設備的彩色域.
計算機中的顏色表示
在計算機中,顯示器的任何顏色〈色彩全域〉都可以自紅、綠、藍3種顏色組成,稱為三基色.每種基色的取值范圍是0~255.任何顏色都可以用這3種顏色按不同的比例混合而成, 這就是三原色原理. 在計算機中, 三原色的原理可以這樣解釋:
- 計算機中的任何顏色都可以由3種顏色按不同比例混合而成;而每種顏色也都可以分解成三種基本顏色.
- 三原色之間相互獨立,任何一種顏色都不能由其余兩種顏色組成.
- 混合色的飽和度由3種顏色的比例來決定 混合色的亮度為3種顏色的亮度之和.
彩色模型
彩色模型也稱彩色空間或彩色系統, 是用來精確標定和生成各種顏色的一套規則和定義, 它的用途是在某些標準下用通常可接受的方式簡化彩色規范. 彩色模型通常可以采用坐標系統來描述, 而位于系統中的每種顏色都由坐標空間中的單個點來表示。
如今使用的大部分彩色模型都是面向應用或是面向硬件, 比如眾所周知的針對彩色電視器的RGB( 紅、綠、藍〉模型, 以及面向彩色打印機的CMY(青、深紅、黃〉和CMYK(青、深紅、黃、黑〉模型。而HSI(色調、飽和度、亮度〉模型非常符合人眼描述和解釋顏色的
方式。此外, 目前廣泛使用的彩色模型還有如:HSV模型、YUV 模型、YIQ模型、Lab模型等。下面將分別介紹這些彩色模型并給出它們與最為常用的RGB模型之間的轉換方式。
RGB模型
RGB模型是工業界的一種顏色標準. 是通過對紅(Red)、綠(Green)、藍(Blue)3種顏色亮度的變化以及它們相互之間的疊加來得到各種各樣的顏色的。該標準兒乎包括了人類視覺所能感知的所有顏色,是目前運用最廣的顏色模型之一。
理論基礎
RGB彩色空間對應的坐標系統是如圖7.4所示的立方體. 紅、綠和藍位手立方體的3個頂點上:青、深紅和黃位于另外3個頂點上:黑色在原點處, 而白色位于距離原點最遠的頂點處, 灰度等級就沿這兩點連線分布: 不同的顏色處于立方體外部和內部, 因此可以用一個3維向量來表示。例如,在所有顏色均己歸一化到(O, 1)的情況下,藍色可表示為(O, 0, 1),而灰色可由向量(0.5, 0.5, 0.5)來表示。
在RGB模型中,3個圖像分量組成了所要表示的圖像,而每一個分量圖像都是其原色圖像,如圖7.5所示。當送入RGB監視器時,這3個分量圖像便在屏上混合產生一幅合成彩色圖像:
在RGB空間中,用以表示每一像素的比特數叫做像素深度。RGB圖像的3個紅、綠、 藍分量圖像都是一幅8比特圖像,每一個彩色像素有24比特深度。因此,全彩色圖像常用來定義24比特的彩色圖像,顏色總數是(28)3=16777216
matlab實現
CMY、CMYK模型
CMY模型(Cyan、Magenta、Yellow)是采用青、品紅、黃色3種基本原色按一定比例合成顏色的方法。由于色彩的顯示不是直接來自于光線的色彩,而是由光線被物體吸收掉一部分之后反射回來的剩余光線產生,因此CMY模型又稱為減色法混色模型。當光線都被吸收時成為黑色,都被反射時成為白色.
像CMY 模型這樣的減色混合模型正好適用于彩色打印機和復印機這類需要在紙上沉積彩色顏料的設備, 因為顏料不是像顯示器那樣發出顏色, 而是反射顏色。例如,當青色顏料涂覆的表面用。白光照射時, 從該表面反射的不是紅光, 而是從反射的白光中減去紅色得到的青色(白光本身是等量的紅、綠、藍光的組合). CMY模型的顏料混合效果如圖7.6所示, 注意這里的混合是原色的相減, 與
RGB模型的混合正好相反。
CMYK模型
由圖7.6可見, 等量的顏料原色(青、品紅和黃)可以混合產生黑色。然而在實際運用
中, 通過這些顏色混合產生的黑色是不純的。因此, 為產生真正的黑色〈黑色在打印中起主
要作用〉, 專門在CMY模型中加入了第4種顏色一一黑色, 從而得到CMYK影色模型. 這
樣當出版商說到“ 四色打印” 時, 即指CMY彩色模型的3種原色再加上黑色。
HSI模型
HSI模型是從人的視覺系統出發,直接使用顏色三要素色調(Hue)、飽和度(Saturation) 和亮度(intensity,有時也翻譯作密度或灰度〉來描述顏色.
- 亮度是指人眼感覺光的明暗程度.光的能量越大,亮度越大.
- 色調是彩色最重要的屬性,決定顏色的本質,由物體反射光線中占優勢的波長來決定. 不同的波長產生不同的顏色感覺,我們叫來一種顏色為紅、橙、黃,這就是說我們在規定一種色調.
- 飽和度是指顏色的深淺和濃淡程度,飽和度越高,顏色越深.飽和度的深淺和白色的 比例有關,白色所占比例越高,飽和度越低.
HSI彩色空間可以用一個圓錐空間模型來描述, 如圖7.8所示。我們通常把色調和飽和度統稱為色度, 用來表示顏色的類別與深淺程度。在圖中
四錐中間的橫截面圓就是色度圓, 而圓錐向上或向下延伸的便是亮度分量的表示.
由于人的視覺對亮度的敏感程度遠強于對顏色濃淡的敏感程度, 為了便于顏色處理和識別, 人的視覺系統經常采用HSI彩色空間, 它比RGB彩色空間更符合人的視覺特性。此外, 由于HSl空間中亮度和色度具有可分離特性, 使得圖像處理和機器視覺中大量灰度處理算法都可在
HSI彩色空間中方便地使用。
HSI彩色空間和RGB 彩色空間只是同一物理量的不同表示法, 它們之間存在著轉換關系. 下面將介紹RGB到到HSI的彩色轉換和HSI到RGB的彩色轉換
從RGB到HSI的彩色轉換及其實現
給定一幅RGB格式的圖像, 每一個RGB像素和H分量可用下面的公式得到:
matlab實現
function hsi = rgb2hsi(rgb) % hsi = rgb2hsi(rgb)把一幅RGB圖像轉換為HSI圖像, % 輸入圖像是一個彩色像素的M×N×3的數組, % 其中每一個彩色像素都在特定空間位置的彩色圖像中對應紅、綠、藍三個分量。 % 假如所有的RGB分量是均衡的,那么HSI轉換就是未定義的。 % 輸入圖像可能是double(取值范圍是[0, 1]),uint8或 uint16。 % % 輸出HSI圖像是double, % 其中hsi(:, :, 1)是色度分量,它的范圍是除以2*pi后的[0, 1]; % hsi(:, :, 2)是飽和度分量,范圍是[0, 1]; % hsi(:, :, 3)是亮度分量,范圍是[0, 1]。% 抽取圖像分量 rgb = im2double(rgb); r = rgb(:, :, 1); g = rgb(:, :, 2); b = rgb(:, :, 3);% 執行轉換方程 num = 0.5*((r - g) + (r - b)); den = sqrt((r - g).^2 + (r - b).*(g - b)); theta = acos(num./(den + eps)); %防止除數為0H = theta; H(b > g) = 2*pi - H(b > g); H = H/(2*pi);num = min(min(r, g), b); den = r + g + b; den(den == 0) = eps; %防止除數為0 S = 1 - 3.* num./den;H(S == 0) = 0;I = (r + g + b)/3;% 將3個分量聯合成為一個HSI圖像 hsi = cat(3, H, S, I);
從HSI到RGB的彩色轉換及其實現
在[O, 1]內給出HSI值, 現在要在相同的值域找到RGB值, 可利用H值公式。在原始色分割中有3個相隔120· 的扇形, 如圖7.10所示。從H乘以360" 開始, 這時色調值返回原來的[0,360]的范圍.
matlab實現
function rgb = hsi2rgb(hsi) % rgb = hsi2rgb(hsi)把一幅HSI圖像轉換為RGB圖像, % 其中hsi(:, :, 1)是色度分量,它的范圍是除以2*pi后的[0, 1]; % hsi(:, :, 2)是飽和度分量,范圍是[0, 1]; % hsi(:, :, 3)是亮度分量,范圍是[0, 1]。 % % 輸出圖像分量: % rgb(:, :, 1)為紅; % rgb(:, :, 2)為綠; % rgb(:, :, 3)為藍。% 抽取圖像分量 hsi = im2double(hsi); H = hsi(:, :, 1) * 2 * pi; S = hsi(:, :, 2); I = hsi(:, :, 3);% 執行轉換方程 R = zeros(size(hsi, 1), size(hsi, 2)); G = zeros(size(hsi, 1), size(hsi, 2)); B = zeros(size(hsi, 1), size(hsi, 2));% RG扇形(0 <= H < 2*pi/3) idx = find( (0 <= H) & (H < 2*pi/3)); B(idx) = I(idx) .* (1 - S(idx)); R(idx) = I(idx) .* (1 + S(idx) .* cos(H(idx)) ./ ... cos(pi/3 - H(idx))); G(idx) = 3*I(idx) - (R(idx) + B(idx));% BG扇形(2*pi/3 <= H < 4*pi/3) idx = find( (2*pi/3 <= H) & (H < 4*pi/3) ); R(idx) = I(idx) .* (1 - S(idx)); G(idx) = I(idx) .* (1 + S(idx) .* cos(H(idx) - 2*pi/3) ./ ... cos(pi - H(idx))); B(idx) = 3*I(idx) - (R(idx) + G(idx));% BR扇形 idx = find( (4*pi/3 <= H) & (H <= 2*pi)); G(idx) = I(idx) .* (1 - S(idx)); B(idx) = I(idx) .* (1 + S(idx) .* cos(H(idx) - 4*pi/3) ./ ... cos(5*pi/3 - H(idx))); R(idx) = 3*I(idx) - (G(idx) + B(idx));% 將3個分量聯合成為一個RGB圖像 rgb = cat(3, R, G, B); rgb = max(min(rgb, 1), 0);全彩色圖像處理基礎
本節主要介紹全彩色圖像處理技術,以及面對不同的圖像處理任務怎樣處理全彩色圖像.通常,全彩色圖像處理技術總的可以分為以下兩大類。
(1)對3個平面分量單獨處理,然后將分別處理過的3個分量合成彩色圖像。對每個分量的處理技術可以應用到對灰度圖像處理的技術上。但是這種通道式的獨立處理技術忽略了通道間的相互影響。
(2)直接對彩色像素進行處理。因為全彩色圖像至少有3個分量,彩色像素實際上是一個向量。直接處理就是同時對所有分量進行無差別的處理.這時彩色圖像的 3個分量用向量形式表示,即對彩色圖像上任一點的像素 c(x,y),有:
c(x,y)= [R(x,y);G(x,y);B(x,y)]
那么對像素點(x,y)處理的操作實際上是同時對 R、G、 B這3個分量操作.不過通常大多數圖像處理技術都是指對每個分量的單獨處理。接下來將講述全彩色圖像處理的兩個常用技術:彩色補償和彩色平衡。
彩色補償及其Matlab實現
有些圖像處理任務的目標是根據顏色分離出不同類型的物體。但由于常用的彩色成像設備具有較寬且相互覆蓋的光譜敏感區,加之待拍攝圖像的染色是變化的,所以很難在3 個分量圖中將物體分離出來,這種現象稱為顏色擴散。彩色補償的作用就是通過不同的顏色通道提取不同的目標物。
matlab實現
% compensate.m % 彩色補償 im=double(imread('plane.bmp')); subplot(1,2,1); imshow(uint8(im)); title('原始圖'); [m,n,p]=size(im); [h1,k1]=min(255-im(:,:,1)+im(:,:,2)+im(:,:,3)); [j1,minx]=min(h1);i1=k1(j1);%提取圖像中最接近紅色的點,其在im中的坐標為i1,j1r1=im(i1,j1,1);g1=im(i1,j1,2);b1=im(i1,j1,3); R=0.30*r1+0.59*g1+0.11*b1;[h2,k2]=min(255-im(:,:,2)+im(:,:,1)+im(:,:,3)); [j2,minx]=min(h2);i2=k2(j2);%提取圖像中最接近綠色的點,其在im中的坐標為i2,j2r2=im(i2,j2,1);g2=im(i2,j2,2);b2=im(i2,j2,3); G=0.30*r2+0.59*g2+0.11*b2;[h3,k3]=min(255-im(:,:,3)+im(:,:,1)+im(:,:,2)); [j3,minx]=min(h3);i3=k3(j3);%提取圖像中最接近藍色的點,其在im中的坐標為i3,j3r3=im(i3,j3,1);g3=im(i3,j3,2);b3=im(i3,j3,3); B=0.30*r3+0.59*g3+0.11*b3;A1=[r1 r2 r3g1 g2 g3b1 b2 b3]; A2=[R 0 00 G 00 0 B]; C=A1*inv(A2);for i=1:mfor j=1:nimR=im(i,j,1);imG=im(i,j,2);imB=im(i,j,3);temp=inv(C)*[imR;imG;imB];S(i,j,1)=temp(1);S(i,j,2)=temp(2);S(i,j,3)=temp(3);end end S=uint8(S); subplot(1,2,2); imshow(S); title('補償后');
彩色平衡及其Matlab實現
一幅彩色圖像數字化后, 在顯示時顏色經常看起來有些不正常。 這是色通道的不同敏感度、增光因子和偏移量等原因導致的,稱其為三基色不平衡。將之校正的過程就是彩色平衡
matlab實現
% balance.m % 彩色平衡im=double(imread('plane.bmp')); [m,n,p]=size(im); F1=im(1,1,:); F2=im(1,2,:); F1_(1,1,1)=F1(:,:,2); F1_(1,1,2)=F1(:,:,2); F1_(1,1,3)=F1(:,:,2); F2_(1,1,1)=F2(:,:,2); F2_(1,1,2)=F2(:,:,2); F2_(1,1,3)=F2(:,:,2); K1=(F1_(1,1,1)-F2_(1,1,1))/(F1(1,1,1)-F2(1,1,1)); K2=F1_(1,1,1)-K1*F1(1,1,1); L1=(F1_(1,1,3)-F2_(1,1,3))/(F1(1,1,3)-F2(1,1,3)); L2=F1_(1,1,3)-L1*F1(1,1,3); for i=1:mfor j=1:nnew(i,j,1)=K1*im(i,j,1)+K2;new(i,j,2)=im(i,j,2);new(i,j,3)=L1*im(i,j,3)+L2;end end im=uint8(im); new=uint8(new); subplot(1,2,1); imshow(im); title('原始圖'); subplot(1,2,2); imshow(new); title('平衡后');
總結
- 上一篇: 三个数据集与deploy.prototx
- 下一篇: 自定义viewgroup实现ArcMen