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