圖像增強算法爲什麼要從RGB轉到HSI顏色空間

Retinex算法基礎上改進的MSR、MSRCR等圖像增強理論的前提是灰度世界假設,即紅綠藍各分量大致相等

若拍攝圖像某色彩佔比更多,增強圖像就會顏色偏移甚至失真,趨於灰色。

將複雜照度圖像從紅綠藍色彩空間轉變至HSI空間進行圖像增強,HSI色彩空間是直覺顏色模型,由Hue(色調)、Saturation(飽和度)和Intensity(亮度)3個分量呈現圖像色彩。避開了RGB的缺陷,分離了圖像亮度與顏色分量,對亮度分量的增強操作不影響顏色信息,能有效避免圖像顏色失真,且對圖像的增強處理僅需在一個維度上進行,提升了圖像處理速度。

RGB向HSI顏色空間的轉換公式:

% RGB轉到HSI

function hsi = rgb2hsi(rgb)  
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)); %防止除數爲0   
H = 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;  
hsi = cat(3, H, S, I);  
end

% HSI轉到RGB

function rgb=hsi2rgb(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));
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));
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));
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));
rgb=cat(3,R,G,B);
rgb=max(min(rgb,1),0);
end

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章