基于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方法及其变体的不断优化,以及对其他相关技术的应用,我们可以期待在未来进一步提升水下成像的质量,为海洋科学、考古学和其他领域带来更多的可能性。
热门推荐
从公关的角度看,袁绍在官渡之战中失败的原因
揭秘蒋介石如何通过黄埔军校校长之位掌控国民党
做事不需要人人都理解,只需尽职尽责,问心无愧
宝宝从爬到走的发育全攻略:不同月龄爬行特点及训练指南
吃辣会让人上瘾?辣椒是把“双刃剑”,这4类人吃多了,有损健康
新中国成立75周年:10组数据见证中国教育发展历程
中域教育:应对法规阻碍,让中医文化在海外绽放光彩
用户密码如何做到最安全加密
胸积液怎么引起的?成因与处理方法全解析
詹姆斯拔头筹!美媒评历史TOP20小前锋:甜瓜12小卡8 杜兰特排第3
租房遇到问题怎么办?三大常见问题及解决方案
十二生肖儿歌顺口溜拼音版:附发音技巧+童谣合集
古茗上市之压:全国同店GMV增长率“转负”,单店日均销售额下滑
晚上怎样钓土鲮鱼最好?5步告诉你答案
8所在京部属高校,落户雄安!
过年健康坚果怎么挑,如何吃?
白银什么地方买?购买白银需要注意什么?
铁锅生锈如何处理?教你轻松恢复铁锅光彩与使用寿命
谷维素片的9种功效及联合用药
有三张信用卡算多吗?如何使用这三张信用卡最合理?
无线网显示无IP分配怎么办?多种原因分析与解决方案
Nature深度:大模型如何“赋能”机器人?机器人又如何“训练”大模型?
辽宁金融大事件!这家省级农商行,吸收合并36家银行
护发素成分解析:科学选择与正确使用
低烧可能是这些疾病的前兆,及时就医是关键
如何确保你的苹果手机为正品?这5个步骤帮你辨真伪
业主委员会职责和权利是什么
活动项目怎么分类管理
培训机构退费难?该怎么维权?看看法院怎么判!
提高员工收入水平的途径与方法