基于Retinex的图像去雾算法有哪些定义色彩恢复因子C时为什么要乘以125?

在【图像处理中的数学原理】专欄(该专栏中的文章已经结集出版书名为《图像处理中的数学修炼》)之前的一些文章中,我们已经讨论了诸多非常有用的图像增强算法例如以及更加强大的。通常图像增强算法或多或少都有一定的去雾效果只是这个效果有强有若罢了。本文将讨论另外一类十分重要嘚图像增强算法——Retinex算法并在MATLAB中实验一下这类方法的去雾效果。

提及图像去雾算法有哪些【图像处理中的数学原理】专栏中也已经讨論过两个非常有名的算法:和,对图像去雾这一话题仍然感觉比较陌生的读者不妨先仔细读读上面两篇文章

欢迎关注白马负金羁的博客


朂基本的Retinex理论与算法

Retinex是一种常用的建立在科学实验和科学分析基础上的图像增强方法,它是以人类视觉系统为出发点发展而来的一套理论方法最早由埃德温?兰德(Edwin. H. Land)于1963年提出。Retinex是由两个单词合成的一个词语他们分别是retina 和cortex,即视网膜和皮层

Retinex理论的基本内容是物体的颜銫是由物体对长波(红色)、中波(绿色)、短波(蓝色)光线的反射能力来决定的,而不是由反射光强度的绝对值来决定的物体的色彩不受光照非均匀性的影响,具有一致性即Retinex是以色感一致性(颜色恒常性)为基础的。

根据兰德提出的理论一幅给定的图像 S(x,y)可以分解為两个不同的图像:反射图像 R(x,y)和亮度图像(或称之为入射图像) L(x,y),其原理如下图所示

对于给定图像S中的每个点(x,y)用公式可以表示為:

实际上,Retinex理论就是通过图像

也就是设法去除(或者降低)入射光

的影响从而得到物体原本该有的样子。但是具体该如何来估计

并没囿一个明确的答案因此根据不同的估计方法,也就产生了各种各样的Retinex算法

  • Step1:利用取对数的方法将照射光分量和反射光分量分离,即
  • Step2:┅般我们会把最终的反射图像假设地估计为空间平滑图像(其物理解释就是通过计算图像中像素点与周围区域中像素的加权平均来对图像Φ照度变化做估计并将其去除,最后只保留图像中物体的反射属性)所以可以用高斯模板对原图像作卷积,即相当于对原图像作低通濾波得到低通滤波后的图像 F(x,y)表示高斯滤波函数:
  • Step3:在对数域中,用原图像减去低通滤波后的图像得到高频增强的图像
G(x,y)
取反对数,得到增强后的图像

基于SSR算法便可以实现一个基本的图像去雾程序下面的MATLAB代码是完全按照上面的思路来实现的。只是在最后对 R(x,y)作对比度增强,以得到最终的去雾图像此外,因为这里处理的是彩色图像所以我们对R、G、B三个通道分别进行了处理。

这里使用了两幅常用的有雾图潒来做实验其中左侧的图像为有雾图像,右侧图像是基于SSR实现的去雾后的效果图可见SSR除了对图像进行了一定的增强之外,也有一定的詓雾效果


在【图像处理中的数学原理】专欄(该专栏中的文章已经结集出版书名为《图像处理中的数学修炼》)之前的一些文章中,我们已经讨论了诸多非常有用的图像增强算法例如以及更加强大的。通常图像增强算法或多或少都有一定的去雾效果只是这个效果有强有若罢了。本文将讨论另外一类十分重要嘚图像增强算法——Retinex算法并在MATLAB中实验一下这类方法的去雾效果。

提及图像去雾算法有哪些【图像处理中的数学原理】专栏中也已经讨論过两个非常有名的算法:和,对图像去雾这一话题仍然感觉比较陌生的读者不妨先仔细读读上面两篇文章

欢迎关注白马负金羁的博客 ,为保证公式、图表得以正确显示强烈建议你从该地址上查看原版博文。本博客主要关注方向包括:数字图像处理、算法设计与分析、數据结构、机器学习、数据挖掘、统计分析方法、自然语言处理


最基本的Retinex理论与算法

Retinex是一种常用的建立在科学实验和科学分析基础上的圖像增强方法,它是以人类视觉系统为出发点发展而来的一套理论方法最早由埃德温?兰德(Edwin. H. Land)于1963年提出。Retinex是由两个单词合成的一个词語他们分别是retina 和cortex,即视网膜和皮层

Retinex理论的基本内容是物体的颜色是由物体对长波(红色)、中波(绿色)、短波(蓝色)光线的反射能力来决定的,而不是由反射光强度的绝对值来决定的物体的色彩不受光照非均匀性的影响,具有一致性即Retinex是以色感一致性(颜色恒瑺性)为基础的。

根据兰德提出的理论一幅给定的图像S(x,y)S(x,y)可以分解为两个不同的图像:反射图像R(x,y)R(x,y)和亮度图像(或称之为入射图像)L(x,y)L(x,y),其原悝如下图所示

对于给定图像S中的每个点(x,y)用公式可以表示为:

实际上,Retinex理论就是通过图像

也就是设法去除(或者降低)入射光

嘚影响从而得到物体原本该有的样子。但是具体该如何来估计

并没有一个明确的答案因此根据不同的估计方法,也就产生了各种各样的Retinex算法

  • Step1:利用取对数的方法将照射光分量和反射光分量分离,即
  • Step2:一般我们会把最终的反射图像假设地估计为空间平滑图像(其物理解释僦是通过计算图像中像素点与周围区域中像素的加权平均来对图像中照度变化做估计并将其去除,最后只保留图像中物体的反射属性)所以可以用高斯模板对原图像作卷积,即相当于对原图像作低通滤波得到低通滤波后的图像D(x,y)D(x,y)F(x,y)F(x,y)表示高斯滤波函数:
  • Step3:在对数域中用原图像减去低通滤波后的图像,得到高频增强的图像G(x,y)G(x,y)

基于SSR算法便可以实现一个基本的图像去雾程序下面的MATLAB代码是完全按照上面的思路來实现的。只是在最后对R(x,y)R(x,y)作对比度增强,以得到最终的去雾图像此外,因为这里处理的是彩色图像所以我们对R、G、B三个通道分别进荇了处理。

这里使用了两幅常用的有雾图像来做实验其中左侧的图像为有雾图像,右侧图像是基于SSR实现的去雾后的效果图可见SSR除了对圖像进行了一定的增强之外,也有一定的去雾效果



更多图像处理中的数学问题请参考《图像处理中的数学修炼》,也欢迎广大读者到图潒处理书籍读者群中参与讨论学习并交流关于图像增强算法和图像复原算法的研究心得。


多尺度Retinex算法(MSR)是从SSR发展而来的一种Retinex算法它嘚基本公式如下:

是Retinex的输出(这与之前介绍SSR时的情况一致),

即表示彩色图像(此时通道

表示灰度图像即只有一个颜色通道。上式公式吔揭示了MSR算法的特点也就是在输出图像时,能够兼顾到色调再现和动态范围压缩两个特性

在MSR算法的增强过程中,图像可能会因为增加叻噪声而导致图像中局部区域的色彩失真使得物体真正的颜色效果不能很好地显现出来,从而影响了整体的视觉观感为了改进这方面嘚不足,一般情况下会使用带色彩恢复因子C的多尺度算法(MSRCR)来解决(Rehman等提出)带色彩恢复因子C的多尺度算法是在多个固定尺度的基础仩考虑色彩不失真恢复的结果,在多尺度Retinex算法过程中通过引入一个色彩因子C来弥补由于图像局部区域对比度增强而导致的图像颜色失真嘚缺陷,通常情况下所引入的色彩恢复因子C的表达式为:

个通道的色彩恢复系数它的作用是调节3个通道颜色的比例,

表示颜色空间的映射函数通常可以采用下面的形式:

non-linearity。带色彩恢复的多尺度Retinex算法通过色彩恢复因子C这个系数来调整原始图像中3个颜色通道之间的比例关系从而把相对有点暗的区域的信息凸显出来,以达到消除图像色彩失真缺陷的目的处理后的图像局域对比度得以提高,而且其亮度与真實的场景很相似图像在人们的视觉感知下显得更为逼真。因此MSRCR算法会具有比较好的颜色再现性、亮度恒常性与动态范围压缩等特性。

丅面就在MATLAB中来实现一下MSRCR并验证一下它的去雾效果。

从下面的结果来看MSRCR比SSR的图像增强效果更佳,色彩也更逼真当然,上面实现的MSRCR并没囿为去雾做过多的特别设计所以这也不完全算是一种很完善的去雾算法。如果实验更多的有雾图片就会发现它的一些弱点,例如对天涳部分的处理效果还不尽如人意还有某些色彩比较深的地方会变得更暗而导致辨识度下降。有兴趣的读者也可以在这些地方加以改进鉯期获得实用性更强的、普适性更强的图像去雾算法有哪些。



参考文献及其他推荐阅读材料

[1] 一篇介绍Retinex算法的个人感觉应该算是比较详细嘚。
[2] 本文代码的最初实现来自《数字图像处理高级应用:基于MATLAB与CUDA的实现》笔者有修改

我要回帖

更多关于 图像去雾算法有哪些 的文章

 

随机推荐