算法流程

  1. 首先将输入图像从 RGB 色彩空间转换到 与视锥细胞相对应的 LMS 色彩空间[1]

(LMS)=(0.31920.60980.04470.16470.76380.08700.02020.12960.9391)(RGB)\left(\begin{array}{c} L \\ M \\ S \end{array}\right)=\left(\begin{array}{lll} 0.3192 & 0.6098 & 0.0447 \\ 0.1647 & 0.7638 & 0.0870 \\ 0.0202 & 0.1296 & 0.9391 \end{array}\right)\left(\begin{array}{l} R \\ G \\ B \end{array}\right)

  1. 使用 2 维高斯函数模拟视锥细胞对输入颜色信息的相应[2]

    Fc(x,y)=fc(x,y)g(x,y;σ)F_{c}(x, y)=f_{c}(x, y) \otimes g(x, y ; \sigma)

    其中, \in{L, M, S}$,2 维高斯函数记为:

    g(x,y;σ)=12πσ2exp((x2+y2)/(2σ2))g(x, y ; \sigma)=\frac{1}{2 \pi \sigma^{2}} \exp \left(-\left(x^{2}+y^{2}\right) /\left(2 \sigma^{2}\right)\right)

  2. 使用自适应的伽马矫正模拟水平细胞对光感受体的反馈。

    Out(x,y)c=Fcλc(x,y)Out(x,y)_{c} = F_{c}^{\lambda_{c}}(x,y)

    其中,λc\lambda _c可由输入图像的色彩信息自适应求得:

    λc=μcμmax\lambda _c = \frac{\mu _c}{\mu _{max}}

    μc=mean(Fc(x,y))\mu _c = mean(F_c(x,y))

    μmax=max(μL,μM,μS)\mu _{max} = max(\mu _L,\mu _M, \mu _S)

  3. 最后将图像从 LMS 空间转换到 RGB 空间。

(RGB)=(5.33414.28290.14281.15562.25810.15420.04480.21951.0831)(LMS)\left(\begin{array}{c} R \\ G \\ B \end{array}\right)=\left(\begin{array}{ccc} 5.3341 & -4.2829 & 0.1428 \\ -1.1556 & 2.2581 & -0.1542 \\ 0.0448 & -0.2195 & 1.0831 \end{array}\right)\left(\begin{array}{c} L \\ M \\ S \end{array}\right)

Matlab代码实现

function out = LMS_HC(I)
I = im2double(I);
LMS = [0.3192 0.6098 0.0447;0.1647 0.7638 0.0870 ; 0.0202 0.1296 0.9391];
invLMS = inv(LMS);

R = I(:,:,1);
G = I(:,:,2);
B = I(:,:,3);

L = LMS(1,1)*R + LMS(1,2)*G + LMS(1,3)*B;
M = LMS(2,1)*R + LMS(2,2)*G + LMS(2,3)*B;
S = LMS(3,1)*R + LMS(3,2)*G + LMS(3,3)*B;

h = fspecial('gaussian',[3 3],0.5);

Lg = imfilter(L,h);
Mg = imfilter(M,h);
Sg = imfilter(S,h);

Lmean = mean(Lg(:));
Mmean = mean(Mg(:));
Smean = mean(Sg(:));

MAX = max([Lmean Mmean Smean]);

lamL = Lmean / MAX;
lamM = Mmean / MAX;
lamS = Smean / MAX;

outL = L .^ lamL;
outM = M .^ lamM;
outS = S .^ lamS;

out(:,:,1) = invLMS(1,1)*outL + invLMS(1,2)*outM +invLMS(1,3)*outS;
out(:,:,2) = invLMS(2,1)*outL + invLMS(2,2)*outM +invLMS(2,3)*outS;
out(:,:,3) = invLMS(3,1)*outL + invLMS(3,2)*outM +invLMS(3,3)*outS;
end

实验结果对比

首先选取 4 张原颜色恒常算法也可以获得较好结果的图片。

image-20210110190511382其中,第一行为原图,第二行为目前(组内)颜色恒常算法结果图,第三行为此处颜色恒常算法结果图。

由于水下成像环境恶劣,往往会出现红光衰减特别严重的情况。以下四张图片中,其红色通道像素的平均值都不超过 0.15 ,个别图片红通道像素均值甚至仅为 0.02,这会导致原有的基于伽马矫正的颜色恒常算法中 γ\gamma 值过小,最终引起红通道过度补偿。

从算法流程和实验结果上看,此处基于 LMS 空间的颜色恒常算法并没有解决红通道过度补偿的问题,但可以获得一个较好视觉效果的最终结果图。

以下四张图片为原算法不能很好处理的图片。

image-20210110190716652其中,第一行为原图,第二行为现有(组内)颜色恒常算法结果,第三行为此处颜色恒昌算法结果。

为了验证算法的鲁棒性,在数据集上运行了此处算法。

实验结果已汇总在 Google Drive 中,点击下载

中国特色社会主义互联网可以点击这里尝试下载

用户名:wgx

密码:123456

文件:LMS_HC_890.zip

参考文献

[1] Gao S B, Yang K F, Li C Y, et al. Color constancy using double-opponency[J]. IEEE transactions on pattern analysis and machine intelligence, 2015, 37(10): 1973-1985.

[2] Zhang X S, Gao S B, Li R X, et al. A retinal mechanism inspired color constancy model[J]. IEEE Transactions on Image Processing, 2016, 25(3): 1219-1232.