基于Retinex的水下图像增强算法详解
创作时间:
作者:
@小白创作中心
基于Retinex的水下图像增强算法详解
引用
CSDN
1.
https://m.blog.csdn.net/qq_1309399183/article/details/144861767
水下图像常常因为能见度差和散射而退化,导致色彩丢失和光照减弱,特别是在红色通道。本项目复制了一种用于水下图像的颜色校正算法。该算法利用相机中的彩色滤波阵列(CFA)特性来增强色彩和光照,并采用Retinex模型改进光照效果以及自适应直方图均衡化来提升对比度。算法的有效性在各种图像上进行了测试。主要目标是恢复水下图像的颜色和对比度,以利于研究和探索中的分析和推理。
项目概述
本项目成功实现了基于文献的水下图像颜色校正算法。该算法分步骤地增强了图像,解决了由水下红色通道衰减和散射引起的问题。通过恢复原始色彩和对比度,提高了水下图像用于分析和探索的可用性。
动机
项目的动机在于将实际的图像处理技术应用于之前难以处理的彩色图像。由于文献中关于Retinex增强细节的缺乏,促使了更深入的研究。确保处理步骤之间的兼容性和理解中间数据类型至关重要。未来的工作包括自动化参数调整和提高计算效率,因为Retinex计算过程耗时较长。
阶段性成果
以下展示了各阶段处理后获得的结果:
原始图像
红色通道补偿
白平衡处理后的红色通道补偿
使用Retinex改善光照
直方图均衡化
代码实现
function output_img = MSRCR_retinex(I)
R = I(:, :, 1);
G = I(:, :, 2);
B = I(:, :, 3);
R0 = double(R);
G0 = double(G);
B0 = double(B);
[N1, M1] = size(R);
Rlog = log(R0+1);
Rfft2 = fft2(R0);
sigma1 = 128;
F1 = fspecial('gaussian', [N1,M1], sigma1);
Efft1 = fft2(double(F1));
DR0 = Rfft2.* Efft1;
DR = ifft2(DR0);
DRlog = log(DR +1);
Rr1 = Rlog - DRlog;
sigma2 = 256;
F2 = fspecial('gaussian', [N1,M1], sigma2);
Efft2 = fft2(double(F2));
DR0 = Rfft2.* Efft2;
DR = ifft2(DR0);
DRlog = log(DR +1);
Rr2 = Rlog - DRlog;
sigma3 = 512;
F3 = fspecial('gaussian', [N1,M1], sigma3);
Efft3 = fft2(double(F3));
DR0 = Rfft2.* Efft3;
DR = ifft2(DR0);
DRlog = log(DR +1);
Rr3 = Rlog - DRlog;
Rr = (Rr1 + Rr2 +Rr3)/3;
a = 125;
II = imadd(R0, G0);
II = imadd(II, B0);
Ir = immultiply(R0, a);
C = imdivide(Ir, II);
C = log(C+1);
Rr = immultiply(C, Rr);
EXPRr = exp(Rr);
MIN = min(min(EXPRr));
MAX = max(max(EXPRr));
EXPRr = (EXPRr - MIN)/(MAX - MIN);
EXPRr = adapthisteq(EXPRr);
Glog = log(G0+1);
Gfft2 = fft2(G0);
DG0 = Gfft2.* Efft1;
DG = ifft2(DG0);
DGlog = log(DG +1);
Gg1 = Glog - DGlog;
DG0 = Gfft2.* Efft2;
DG = ifft2(DG0);
DGlog = log(DG +1);
Gg2 = Glog - DGlog;
DG0 = Gfft2.* Efft3;
DG = ifft2(DG0);
DGlog = log(DG +1);
Gg3 = Glog - DGlog;
Gg = (Gg1 + Gg2 +Gg3)/3;
Ig = immultiply(G0, a);
C = imdivide(Ig, II);
C = log(C+1);
Gg = immultiply(C, Gg);
EXPGg = exp(Gg);
MIN = min(min(EXPGg));
MAX = max(max(EXPGg));
EXPGg = (EXPGg - MIN)/(MAX - MIN);
EXPGg = adapthisteq(EXPGg);
Blog = log(B0+1);
Bfft2 = fft2(B0);
DB0 = Bfft2.* Efft1;
DB = ifft2(DB0);
DBlog = log(DB +1);
Bb1 = Blog - DBlog;
DB0 = Gfft2.* Efft2;
DB = ifft2(DB0);
DBlog = log(DB +1);
Bb2 = Blog - DBlog;
DB0 = Gfft2.* Efft3;
DB = ifft2(DB0);
DBlog = log(DB +1);
Bb3 = Blog - DBlog;
Bb = (Bb1 + Bb2 + Bb3)/3;
Ib = immultiply(B0, a);
C = imdivide(Ib, II);
C = log(C+1);
Bb = immultiply(C, Bb);
EXPBb= exp(Bb);
MIN = min(min(EXPBb));
MAX = max(max(EXPBb));
EXPBb = (EXPBb - MIN)/(MAX - MIN);
EXPBb = adapthisteq(EXPBb);
output_img = cat(3, EXPRr, EXPGg, EXPBb);
end
方法论
为了实现上述目标,本项目采用了以下几种关键技术:
- 彩色滤波阵列(CFA)属性:利用相机传感器中的CFA特性来捕捉和增强水下的色彩信息。
- Retinex模型:这是一种模拟人类视觉系统的算法,它分离反射光和环境光成分,从而改善图像的光照条件。特别适用于修正因水介质引起的颜色失真。
- 自适应直方图均衡化:这种方法可以动态调整图像的对比度,使得暗部和亮部都能显示出更多细节,而不只是简单地拉伸整个图像的亮度范围。
结论
综上所述,本项目不仅实现了有效的水下图像颜色校正和增强,还为后续研究提供了宝贵的经验和技术参考。随着对Retinex方法及其变体的不断优化,以及对其他相关技术的应用,我们可以期待在未来进一步提升水下成像的质量,为海洋科学、考古学和其他领域带来更多的可能性。
热门推荐
补充视力营养的食物有哪些
口碑最好的日系车
供应链安全管理体系是什么?为什么对现代企业至关重要?
企业供应链安全:风险识别与防范策略
糍粑的烹饪指南:蒸制与煎制的完美技巧
老人身体不适可能与情绪有关!医生这样说↘
星芒效果如何达成?揭秘光圈与星芒的神秘面纱!
成功人士励志经典语录
糖醋排骨~不油不腻
甘草是什么?“众药之王”甘草的功效与副作用全解析
网友喊话小米做卫生巾,供应链优势能破行业困局吗?
被执行人名下财产如何变现?三种方式任你选择!
健康科普丨胃肠无阻,一路“肠”通—带您了解肠梗阻
肠梗阻的症状与预防方法
大和重生?日本2万吨神盾舰模型首次公开,会比中国055舰更强吗
《复明症漫记》——揭示人性深处的光明与黑暗
个人所得税申报中的房贷扣除方法
破局化工人才困境:多维赋能与女性成长
皮肤上有小红点是什么病的征兆
喝茶的5大健康益处
地球在偷偷“变慢”,未来一天可能延长到25小时?
无菌袋灌装机系列
婚约财产纠纷需要准备什么证据
椰子油能直接用到头皮上吗
什么朝向的房子最吉利
如何正确配土养护绣球(掌握正确比例)
750ml红酒能过高铁安检吗?当然可以,但你得注意这些!
极具浪漫意义的传统节日——七夕节
九歌·山鬼
三部运动番推荐:边看边感觉自己一天的运动达标了