博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码/项目合作可以联系(QQ:3249726188)
个人主页:Matlab_ImagePro-CSDN博客
原则:代码均由本人编写完成,非中介,提供有偿Matlab算法代码编程服务,不从事不违反涉及学术原则的事。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
本次分享的是基于多尺度视网膜增强图像去雾算法(MSR,Multi-Scale Retinex),用matlab实现。(有疑问或者想交流细节的QQ:3249726188)
一、简述一下算法情况
Retinex理论主要包含了两个方面的内容:物体的颜色是由物体对长波、 中波和短波光线的反射能力决定的,而不是由反射光强度的绝对值决定的;物体的色彩不受光照 非均匀性的影响,具有一致性 。 根据Retinex理论,人眼感知物体的亮度取决于环境的照明和物体表面对照射光的反射,其数学表达式为:
I(x,y)=L(x,y)*R(x,y) (2-1)
式中: I(x,y)代表被观察或照相机接收到的图像信号;L(x,y)代表环境光的照射分量 ;R(x,y)表示携带图像细节信息的目标物体的反射分量 。
将(2-1)式两边取对数,则可抛开入射光的性质得到物体的本来面貌,即有关系式 :
Log[R(x,y)] = Log[I(x,y)]-Log[L(x,y)]; (2-2)
把这个技术运用到图像处理上,就是针对我们现在已经获得的一副图像数据I(x,y),计算出对应的R(x,y),则R(x,y)认为是增强后的图像,现在的关键是如何得到L(X,Y)。Retinex理论的提出者指出这个L(x,y)可以通过对图像数据I(x,y)进行高斯模糊而得到。
因此这个算法的细路就很简单了,具体步骤如下:
1、输入: 原始图像数据I(x,y),尺度(也就是所谓的模糊的半径)
2、处理:(1) 计算原始图像按指定尺度进行模糊后的图像 L(x,y);
(2) 按照2-2式的计算方法计算出 Log[R(x,y)]的值。
(3) 将 Log[R(x,y)]量化为0到255范围的像素值,作为最终的输出。
以上算法所实现的过程通常倍称作为SSR(Single Scale Retinex,单尺度视网膜增强)。为了得到更好的效果,开发出所谓的多尺度视网膜增强算法(MSR, Multi-Scale Retinex),最为经典的就是3尺度的,大、中、小,既能实现图像动态范围的压缩,又能保持色感的一致性较好。总的来说,MSR算法流程就是采取不同的尺度进行SSR操作,再进行加权处理即可。
二、算法流程
MSR去雾算法流程步骤如下:
1、读取图像
2、设置高斯滤波器滤波尺度参数(高斯模糊)
3、根据高斯滤波参数,对图像RGB图像分别进行SSR(单尺度retinxe)处理,根据不同尺度的SSR,进行加权处理,得到每个图层的MSR结果
4、去雾滤波后的每个图层合成为去雾后的图像。
下面看看matlab的实现效了。
三、Matlab实现效果
1、读取原图
2、去雾后的图像
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
专注、专一于Matlab图像处理学习、交流、代做
QQ:3249726188