基于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方法及其变体的不断优化,以及对其他相关技术的应用,我们可以期待在未来进一步提升水下成像的质量,为海洋科学、考古学和其他领域带来更多的可能性。
热门推荐
蓝色调的柔和色彩 — 完美展现宁静优雅的视觉效果
拌黄瓜怎么做又脆好吃?好方法爽口脆嫩!
临沂地道小吃搜罗!10款美味,你尝了几款啦?
高中就开始学的正态分布,原来如此常见却又极其强大!
在天津下馆子,直奔这8家就对了,正宗地道津味,高峰期一座难求
维生素D早上吃还是晚上吃?饭前吃还是饭后吃?这就揭晓答案吧!
违规装修是法律风险吗?上海商铺装修报备流程全解析
中国最罕见的姓氏:一个跨越500年的王子后裔传奇
睡眠健康核心信息来了!(含释义)
【癌痛诊疗】疼痛不是肿瘤的“标配” 癌痛无需忍受
亚瑟王:永恒之王的传奇与圆桌骑士的荣耀
宝宝胎动和心跳的关系是什么
为什么需要做胎心监护,胎心监护有什么作用
冰箱断电后不制冷的原因及解决方法
龙珠沙鲁篇剧情回顾:悟饭觉醒,悟空牺牲,经典战役全解析
年度奖金个人所得税应该如何申报
买断翡翠:含义、手镯退货政策及货不对板处理方法
如何安全有效地删除电脑驱动程序以提升系统性能
扬州三日游攻略:古城韵味、自然风光与文化探索完美融合
四川石桥镇烧火龙:千年民俗的传承与坚守
理解水处理中的电导率、TDS和浓度
如何催英国学校来offer
英国大学的留位费是什么?留位费与offer有什么关系?
如何用语言描绘出令人垂涎欲滴的果实?!
了解肺水肿
免维护蓄电池如何有效维护?维护时需要注意哪些方面?
长期吃面食,与长期吃米饭有什么区别?哪个身体会更好?
餐桌上的一点改变,或许就能增强你的免疫力
山药晒干防变黑全攻略:七种实用方法详解
【CUDA】 GPU与CPU体系结构对比