首页 > 编程语言 >python和matlab水下目标图像增强算法(Retinex图像增强算法(SSR, MSR, MSRCR))

python和matlab水下目标图像增强算法(Retinex图像增强算法(SSR, MSR, MSRCR))

时间:2025-01-04 09:29:22浏览次数:3  
标签:ifft2 Retinex log MIN EXPBb 算法 图像 图像增强

水下图像颜色校正与增强使用Retinex方法

水下图像常常因为能见度差和散射而退化,导致色彩丢失和光照减弱,特别是在红色通道。本项目复制了一种用于水下图像的颜色校正算法。该算法利用相机中的彩色滤波阵列(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);  
方法论

为了实现上述目标,本项目采用了以下几种关键技术:

  • 彩色滤波阵列(CFA)属性:利用相机传感器中的CFA特性来捕捉和增强水下的色彩信息。
  • Retinex模型:这是一种模拟人类视觉系统的算法,它分离反射光和环境光成分,从而改善图像的光照条件。特别适用于修正因水介质引起的颜色失真。
  • 自适应直方图均衡化:这种方法可以动态调整图像的对比度,使得暗部和亮部都能显示出更多细节,而不只是简单地拉伸整个图像的亮度范围。
结论

综上所述,本项目不仅实现了有效的水下图像颜色校正和增强,还为后续研究提供了宝贵的经验和技术参考。随着对Retinex方法及其变体的不断优化,以及对其他相关技术的应用,我们可以期待在未来进一步提升水下成像的质量,为海洋科学、考古学和其他领域带来更多的可能性。

请注意,文中提到的图片链接仅为示意,实际应用时应替换为真实图像路径或直接嵌入相应的图像。

标签:ifft2,Retinex,log,MIN,EXPBb,算法,图像,图像增强
From: https://blog.csdn.net/qq1309399183/article/details/144861219

相关文章

  • 机器学习基础算法 (七)-朴素贝叶斯(Naive Bayes)
    介绍朴素贝叶斯(NaiveBayes)算法是一种基于贝叶斯定理的简单概率分类算法,通常用于文本分类、垃圾邮件过滤、情感分析等任务。尽管其“朴素”之名可能让人觉得它不够复杂,但实际应用中,朴素贝叶斯算法以其高效性和简单性,尤其适用于特征之间条件独立的假设下,表现出色。本文将......
  • 如何使用建筑物变化检测算法的Baseline工程 ,使用PyTorch框架,并选择U-Net来进行二分类
    建筑物变化检测算法baseline工程使用PyTorch框架,并选择U-Net来进行二分类任务(变化/不变)Baseline工程将基于深度学习方法来检测建筑物的变化备注:博客所有文章代码仅供参考!如何使用建筑物变化检测算法的Baseline工程,一个详细的步骤和代码示例。这个Baseline工程将基于深......
  • 算法解析-经典150(双指针、滑动窗口)
    文章目录双指针1.验证回文串1.答案2.思路2.判断子序列1.动态规划解法2.双指针3.两数之和II-输入有序数组1.答案2.思路4.盛最多水的容器1.答案2.思路5.三数之和1.答案2.思路滑动窗口1.长度最小的子数组1.答案2.思路2.无重复字符的最长子串1.答案2.思路3......
  • 算法解析-经典150(矩阵、哈希表)
    文章目录矩阵1.有效的数独1.答案2.思路2.螺旋矩阵1.答案2.思路3.旋转图像1.答案2.思路4.矩阵置零1.答案2.思路哈希表1.赎金信1.答案2.思路2.同构字符串1.答案2.思路3.单词规律1.答案2.思路4.有效的字母异位词1.答案2.思路5.字母异位词分组1.答案2.思路......
  • R机器学习:神经网络算法的理解与实操,实例解析
    神经网络算法是一种模仿生物神经网络(尤其是人脑)结构和功能的算法。它由大量相互连接的节点(称为神经元)组成,这些神经元组织成层,通过传递信号来处理信息。神经网络算法在机器学习、人工智能等领域中扮演着至关重要的角色,尤其擅长处理复杂的模式识别、分类和预测问题。今天给大家介绍......
  • BP神经网络的反向传播算法
    BP神经网络(BackpropagationNeuralNetwork)是一种常用的多层前馈神经网络,通过反向传播算法进行训练。反向传播算法的核心思想是通过计算损失函数对每个权重的偏导数,从而调整权重,使得网络的预测输出与真实输出之间的误差最小。下面是反向传播算法的公式推导过程:1.前向传播(Forw......
  • 通信工程专业课设[音响放大器设计与制作、电梯内部控制器的设计、基于单片机的GRPSGSM
    通信工程专业课设各种课设总览①模电级课程设计-音响放大器设计与制作②数电课程设计-电梯内部控制器的设计③单片机课设-基于单片机的GRPSGSM系统设计`&`基于单片机的433M无线通信系统④FPGA课设-异步fifo设计⑤Protel课程设计-基于单片机的温湿度控制系统⑥信息论课设-......
  • 算法导论复习
    概论重要特性输入、输出、确定性、有限性算法描述自然语言、流程图、伪代码、程序代码算法的复杂性时间复杂性、空间复杂性算法的渐进性态O(g(n))上界Ω(g(n))下界Θ(g(n))确界logn<n<nlogn<n2<n3<2nNP完全理论能在多项式时间内求解的判定性问题称为P问题,在多......
  • 算法基础一
    认识时间复杂度常数时间的操作一个操作如果和样本的数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。时间复杂度为一个算法流程中,常数操作数量的一个指标。常用O(读作bigO)来表示。具体来说,先要对一个算法流程非常熟悉,然后去写出这个算法流程中,发生了多少常数操作,......
  • K均值聚类算法的入门指南
    大家好!今天我们来聊聊机器学习中的一个经典算法——K均值聚类(K-MeansClustering)我们从两个方面来进行了解:什么是K均值聚类?为什么叫K均值?什么是K均值聚类?K均值聚类(K-MeansClustering)是一种非常流行的机器学习算法,用于将数据集分成K个不同的组,这些组被称为“簇”。这个......