注意:这篇文章上次更新于1330天前,文章内容可能已经过时。
算法流程
- 首先将输入图像从 RGB 色彩空间转换到 与视锥细胞相对应的 LMS 色彩空间[1]。
-
使用 2 维高斯函数模拟视锥细胞对输入颜色信息的相应[2]。
其中, \in{L, M, S}$,2 维高斯函数记为:
-
使用自适应的伽马矫正模拟水平细胞对光感受体的反馈。
其中,可由输入图像的色彩信息自适应求得:
-
最后将图像从 LMS 空间转换到 RGB 空间。
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 张原颜色恒常算法也可以获得较好结果的图片。
其中,第一行为原图,第二行为目前(组内)颜色恒常算法结果图,第三行为此处颜色恒常算法结果图。
由于水下成像环境恶劣,往往会出现红光衰减特别严重的情况。以下四张图片中,其红色通道像素的平均值都不超过 0.15 ,个别图片红通道像素均值甚至仅为 0.02,这会导致原有的基于伽马矫正的颜色恒常算法中 值过小,最终引起红通道过度补偿。
从算法流程和实验结果上看,此处基于 LMS 空间的颜色恒常算法并没有解决红通道过度补偿的问题,但可以获得一个较好视觉效果的最终结果图。
以下四张图片为原算法不能很好处理的图片。
其中,第一行为原图,第二行为现有(组内)颜色恒常算法结果,第三行为此处颜色恒昌算法结果。
为了验证算法的鲁棒性,在数据集上运行了此处算法。
实验结果已汇总在 Google Drive 中,点击下载
中国特色社会主义互联网可以点击这里尝试下载
用户名:wgx
密码:123456
文件:LMS_HC_890.zip