文档章节

带色彩恢复的多尺度视网膜增强算法(MSRCR)的原理、实现及应用。

abcijkxyz
 abcijkxyz
发布于 2016/11/22 16:38
字数 2613
阅读 17
收藏 0

    Retinex这个词是由视网膜(Retina)和大脑皮层(Cortex) 两个词组合构成的。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)进行高斯模糊而得到,很多论文中都列出了那个中心/围绕函数以及需要归一化的K值,搞的很多新手都不明白是什么了,其实就是一个模糊而已。从实际运用的角度来说,也可以用均值模糊来代替高斯模糊。

     因此这个算法的细路就很简单了,具体步骤如下:

     1、输入: 原始图像数据I(x,y),尺度(也就是所谓的模糊的半径)

     2、处理:(1) 计算原始图像按指定尺度进行模糊后的图像 L(x,y);

              (2) 按照2-2式的计算方法计算出 Log[R(x,y)]的值。

              (3) 将 Log[R(x,y)]量化为0到255范围的像素值,作为最终的输出。

    可以看得出,算法很简单,其核心的东西还是在于高斯模糊的实现。关于高斯模糊,网上有很多快速优化的文章参考,具体的参考代码可能很少有好人提供的。

    注意到一点,似乎在量化的时候没有谁会将 Log[R(x,y)]进行Exp函数的运算而直接得到R(x,y),至于为什么,我无法给出明确的答案。

    量化的方式其实有很多种,而这个方法在很大的程度上对处理的效果有着决定性的影响。至今我没看到有哪一篇论文对这一块讲的很清楚,也不知道他们的那些结果是如何取得的,一种最简单的方式就是计算出Log[R(x,y)]的最大值Max和最小值Min,然后对每一个值Value,进行线性量化,公式为:

            R(x,y) = ( Value - Min ) / (Max - Min) * (255-0)                           (2-3)

    效果测试:

         

                         原图                                   经过Retinex(尺度为10)增强后的图像              经过Retinex(尺度为300)增强后的图像

        

                       原图                                   经过Retinex(尺度为10)增强后的图像                 经过Retinex(尺度为300)增强后的图像

    论文中说,尺度取值较小时, 能够较好地完成动态范围的压缩,暗区域的细节能得到较好地增强,但输出颜色易失真;取值较大时,色感一致性较好。 我倒是没看出尺度小有什么好处。

    以上算法所实现的过程通常倍称作为SSR(Single Scale Retinex,单尺度视网膜增强);

    为了得到更好的效果,人们又开发出所谓的多尺度视网膜增强算法(MSR, Multi-Scale Retinex),最为经典的就是3尺度的,大、中、小,既能实现图像动态范围的压缩,又能保持色感的一致性较好。同单尺度相比,该算法有在计算Log[R(x,y)]的值时步骤有所不同:

    (1) 需要对原始图像进行每个尺度的高斯模糊,得到模糊后的图像Li(x,y),其中小标i表示尺度数。

     (2)  对每个尺度下进行累加计算  Log[R(x,y)] =  Log[R(x,y)] + Weight(i)* ( Log[Ii(x,y)]-Log[Li(x,y)]);  其中Weight(i)表示每个尺度对应的权重,要求各尺度权重之和必须为1,经典的取值为等权重。

     其他的步骤和单尺度的没有区别。

           

                        原图                                      经过SSR(尺度为300)增强后的图像               经过MSR(最大尺度为300,尺度数为3)增强后的图像

           

                           原图                                      经过SSR(尺度为300)增强后的图像              经过MSR(最大尺度为300,尺度数为3)增强后的图像

    SSR和MSR在最大尺度相同的时候谁好谁坏我还真讲不清。

     在以上的两幅测试图像中,特别是第二幅,我们看到明显的偏色效果,这就是SSR和MSR普遍都存在的问题。给一段比较经典的论文中的原话供大家参考:

      The general effect of retinex processing on images with regional or global gray-world violations is a “graying out” of the image, either globally or in specific regions. This desaturation of color can, in some cases, be severe (see Fig. 4, middle). More rarely, the gray-world violations can simply produce an unexpected color distortion (see Fig. 4,top left).

     为此,研究者又开发出一种称之为带色彩恢复的多尺度视网膜增强算法(MSRCR,Multi-Scale Retinex with Color Restoration) ,具体讨论的过程详见 <A Multiscale Retinex for Bridging the Gap Between Color Images and the Human Observation of Scenes>这篇论文,这里要说的是,我认为论文里的方法不起任何作用,并且论文里为了这个又引入了太多的可调参数,增加了算法的复杂性,不利于自动化实现。

    从我目前的了解来看,GIMP的contrast-retinex.c文件里使用的算法很好,效果也很好。他直接从量化的方式上入手,引入了均值和均方差的概念,再加上一个控制图像动态的参数来实现无色偏的调节过程,简要描述如下。

    (1)分别计算出 Log[R(x,y)]中R/G/B各通道数据的均值Mean和均方差Var(注意是均方差)。

    (2)利用类似下述公式计算各通道的Min和Max值。

            Min = Mean - Dynamic * Var;  

            Max = Mean + Dynamic * Var;
    (3)  对Log[R(x,y)]的每一个值Value,进行线性映射: 

           R(x,y) = ( Value - Min ) / (Max - Min) * (255-0) ,同时要注意增加一个溢出判断,即:

           if (R(x,y) > 255)  R(x,y) =255; else if (R(x,y) < 0) R(x,y)=0;

     就是经过这么简单的处理,实践证明可以取得非常好的效果,下面贴出一些处理后的效果。

       

     MSR(最大尺度为300,尺度数为3)增强图像           MSRCR(最大尺度为300,尺度数为3,Dynamic=2)增强图像   MSRCR(最大尺度为300,尺度数为6,Dynamic=2)增强图像

        

      MSR(最大尺度为300,尺度数为3)增强图像          MSRCR(最大尺度为300,尺度数为3,Dynamic=2)增强图像   MSRCR(最大尺度为300,尺度数为6,Dynamic=2)增强图像

         由以上三幅图的效果得出的结论:

        (1)MSRCR效果要比MSR好很多,基本消除了色偏。

        (2)对于MSRCR,尺度数对结果的影像不是特别大,但是随着尺度数的增加,算法耗时会线性增加,因此,一般尺度数取3就较为合适了。

         继续贴图做比较:

        

                MSRCR(Dynamic=1)增强图像                            MSRCR(Dynamic=2)增强图像                              MSRCR(Dynamic=5)增强图像

             

                 MSRCR(Dynamic=1)增强图像                            MSRCR(Dynamic=2)增强图像                          MSRCR(Dynamic=5)增强图像

      由以上三幅图的效果得出的结论:

    (3)Dynamic取值越小,图像的对比度越强。

    (4)一般来说Dynamic取值2-3之间能取得较为明显的增强效果,即能取得很自然过渡效果,又能保持图像的清晰度适度增强。

     关于最大尺度,个人建议取值以大于100为佳。

     retinex算法的效果对于一些正常的图像处理后的效果并不佳,我们可以认为他就是为那些在外界环境不理想的状态下拍摄的图像增强而设计的,特别的,对于航拍的雾天图片,医学上的成像图片等成像条件恶劣的图有很明显的效果,再列出一些照片处理效果。

          

          

          

         

          

          

                    原始图像                                             MSRCR增强的效果                                        NASA的Retinex增强结果

    上述照片均使用最大尺度为300,尺度数为3,Dynamic=2时的效果。

    由以上几组照片,可以看到,Retinex在图像去雾、宇航图、医学图像、老照片等图像的处理上效果很是明显。

    NASA的处理效果要比我这里的MSRCR好一些,这当然无可厚非,人家是什么单位啊。

    关于NASA对Retinex技术的应用,可以参考:http://dragon.larc.nasa.gov/retinex/

    关于去雾效果,我们在来和美图秀秀、可牛影像、光影魔术手等现有的软件做个简单的比较:

        

                      原图                                             MSRCR                                                    美图秀秀 

     

                 可牛影像                                                  光影魔术手

       

                       原图                                                 MSRCR                                                 美图秀秀 

      

                 可牛影像                                                 光影魔术手

    关于谁是谁非,为避免不必要的口舌之争,这里还是交给给位看管去分辨吧。

    同样,提供个编译好的文件给有兴趣研究该算法的朋友看看效果:

    http://files.cnblogs.com/Imageshop/Retinex.zip

 

    

    关于Rentinex,在共享两篇比较经典的英文论文:

    Multi-Scale Retinex for Color Image Enhancement

    A Multiscale Retinex for Bridging the Gap Between Color Images and the Human Observation of Scenes

    关于实现代码,提供GIMP的contrast-retinex.c的下载链接(要像完全看懂其中的所有代码的意思很困难,但是要提取其中的算法部分就不那么复杂了)。

    http://files.cnblogs.com/Imageshop/contrast-retinex.rar

 

 

 ***************************作者: laviewpbt   时间: 2013.4.17    联系QQ:  33184777  转载请保留本行信息*************************

本文转载自:http://www.cnblogs.com/Imageshop/archive/2013/04/17/3026881.html

共有 人打赏支持
abcijkxyz
粉丝 60
博文 6196
码字总数 1876
作品 0
深圳
项目经理
《碟中谍5》背后的生物识别技术大比拼

《碟中谍》这部电影里面总是充满极具未来色彩的黑科技,尤其是各种炫酷的生物识别技术,总使人脑洞大开,比如用虹膜解锁拯救世界的紧急任务。 《碟中谍》这部电影里面总是充满极具未来色彩的...

行者武松
03/06
0
0
SIFT算法原理(不带公式)

尺度不变特征转换(Scale-invariant feature transform或SIFT)是David Lowe于1999年提出的局部特征描述子,并于2004年进行了更深入的发展和完善。Sift特征匹配算法可以处理两幅图像之间发生平...

yushupan
2017/12/19
0
0
[转]SIFT特征原理详解及实现

0 写在前面 学习了一下大神的博客,这篇文章真的写的很棒,把整个SIFT的原理讲的通俗易懂,转载学习一下。 原文作者:Brook@CV 原文链接:SIFT特征详解 另外在文章结尾加上了用opencv-python...

与阳光共进早餐
07/30
0
0
CVPR 2018 | 腾讯优图提出SRN-DeblurNet:高效高质量去除复杂图像模糊

  选自arXiv   作者:Xin Tao、Hongyun Gao、Xiaoyong Shen、Jue Wang、Jiaya Jia   机器之心编译   参与:Panda      因为手抖或焦点选择等问题,相机拍摄的图像中常常存在模糊...

机器之心
05/30
0
0
苹果博客解读iPhone上的人脸识别深度神经网络

苹果首次将深度学习应用于人脸识别是在 iOS 10 上。通过 Vision 框架,开发者现在可以在 App 中将该技术与其他很多计算机视觉算法进行整合。为了保护用户隐私,保证有效运行,苹果在开发这个...

uwr44uouqcnsuqb60zk2
2017/11/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

谷歌 Fuchsia 上手体验,将取代Android/win10

在手机市场领域,Google表现很抢眼,毫无疑问,Android 至今在移动操作系统的市场份额占据绝对领先地位,但是 Android 仍然存在不少问题,碎片化问题严重,在平板以及大屏幕设备上表现糟糕,...

linux-tao
27分钟前
1
0
List、Array与ArrayList

数组在内存中是连续存储的,所以它的索引速度很快,而且赋值和修改元素也非常快,比如: string[] s=new string[3];//赋值 s[0]="a"; s[1]="b"; s[2]="c";//修改 s[1]="b1"; 但是数组...

shimmerkaiye
29分钟前
0
0
Linux 的Lnmp环境下为mysql添加环境变量

一.问题 在Linux 安装完Lnmp 环境后 , 连接Mysql 告诉没有这条命令 mysql -uroot -p 命令失效 因为是源码安装的,所以会出现这样的的原因 。集成环境是不会出现的。 其实很简单,只需要给m...

15834278076
31分钟前
3
0
apolloxlua include函数

include函数不是单独使用的函数, 他并不是标准库的一部分, 你可以使用include函数将某个后缀为 .aop的文档包含到你的文档流中。 因为include是单独处理流, 所以不会在主处理流程中有所表示...

钟元OSS
35分钟前
0
0
【转载分享】做一名较真的工程师

近些年与我共事过的同事,一定知道我至今仍有一个较真的性格。我会:指出同事所写代码的不当命名问题(并帮助改进);指出同事所写文档中的逻辑混乱问题(并辅以修订);指出同事所写PPT中乱...

HellerZhang
37分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部