Retinex是上个世纪七十年代由Land提出的色彩理论。我认为其核心思想基于俩点

(1)在颜色感知时,人眼对局部相对光强敏感程度要优于绝对光强。

(2)反射分量R(x,y)储存有无光源物体的真实模样,一幅图像对其光照分量L(x,y)的估计越准确,求得的R(x,y)也就越准确。

先来说明第一点,人对颜色的认知并不是基于绝对光强,反应在图像上时可以理解成,人眼对一像素点(X0,Y0)的颜色的认知不是基于其RGB三通道绝对值大小,而是与俩个因素相关。

1、(X0,Y0)点三通道值的差异,它会致使色偏。

2、(X0,Y0)一个邻域内其余像素的RGB值,它会形成颜色的感觉,RGB三通道绝对值主导亮度感觉。

我目前无法定量定性分析他们的关系,因为它涉及感觉这种玄妙的东西,但是我们会用就行。

再说明第二点,在给定场景的时候,如果场景内无光源,那么R(x,y)应该是一常量。无论光照L(x,y)如何改变,R(x,y)该不变。也就是说,无论我光照是什么颜色什么强度,我都应该能将其矫正到标准光照情况下。这也是色彩恒常性的体现。

那么问题来了,基于上面推理该怎么办去矫正多光照图像。

关于Retinex的算法的发展,从最初的随机路径法,到McCann迭代法,到变分法再到中心环绕的。关于他们的说明在网上一找一大堆,这里我不在赘述。

让我们从single-scale-Retinex开始,在网上能找到的SSR算法,说实话基本效果很差,根本体现不出其色彩恒常算法的特点。其实如果你查阅过大量资料后,你会发现NASA的原文对SSR说明就不清不楚,网上代码对其的实现可以说是一种无参考复现,你甚至会发现他们对环绕函数地描述都不一致。SSR说到底就是认为光照局部不变,以一个邻域的加权值来估计光照。

一般SSR会选择高斯函数或者类高斯函数,你可以直接用matlab中的fspesical函数,也可以自己写一个,其实问题不大。一般刚遇到SSR最让人困惑的就是如何明晰何为尺度,当你多看几个SSR的实现,就会发现会有越来越多的疑惑。如何确定尺度,高斯函数的sigma值和尺度之间到底有和数量关系,最后在对数域是否需要返回到指数域,需不需要归一化,最后成像出现色偏问题该怎么解决。这些细节的处理会显著影响图片质量,特别是视觉效果。

在SSR的基础上发展起来的MSR和MSRCR,但说实话,因为他们的实现是基于SSR的,所以如果你SSR都没有写好,那么他们的实现一定也不会尽人意。

在MSR的基础上,为了实现真正的色彩恒常计算,我对MSR进行了改动。

步骤大致分为三步:

1、使用导向滤波代替高斯滤波,与传统MSR算法不同,这里不分通道处理而是三通道合一来估计光照。这是基于一个认知,自然界中的光是连续,而RGB三通道只是为了方便屏幕显示,用三通道处理与形成割裂。

2、对估计出来的光照进行自适应调整后,计算出对数域中的反射量r(x,y)

3、对r(x,y)进行调整,为了适应不同的环境,我使用了一个一个小技巧实现色彩保真,在算法中可选是否保真,保真的前提是原图质量足够好,图像中元素足够丰富,如果不满足这俩个前提推算真实颜色的时候就会出严重错误。至于为何这般,这与Retinex算法实质有关,因为对光照估计的越准确,矫正到标准光源后的质量也就越好。而Retinex对光照的估计是基于空间邻域的。

注意:2是在对数域实现的,而这与MSR相似

附上一些图来说明效果

原图由来着东南大学的一位朋友提供

未保真计算,可以看出其色彩恒常性的体现不好

进行保真,充分体现色彩恒常性

原图,同样由东南大学的朋友提供

未保真计算

保真计算

原图,来着网络

未保真,可见光照为红光

矫正后,深红光照被削弱,但图中可见的光源被放大,同时因为原图质量不高,致使保真计算后图像质量目视比不保真低

以上是我对Retinex的粗浅认识。

2019年11月7日于北京航空航天大学

自动化科学与电气工程学院 符云松

联系:734345993@qq.com

浅谈Retinex的更多相关文章

  1. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  2. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

  3. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  4. 浅谈SQL注入风险 - 一个Login拿下Server

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

  5. 浅谈WebService的版本兼容性设计

    在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...

  6. 浅谈angular2+ionic2

    浅谈angular2+ionic2   前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别.   1. 项目所用:angular2+ionic2 ...

  7. iOS开发之浅谈MVVM的架构设计与团队协作

    今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  8. Linux特殊符号浅谈

    Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...

  9. 浅谈Angular的 $q, defer, promise

    浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00  博客园-原创精华区 原文  http://www.cnblogs.com/big-snow/ ...

随机推荐

  1. android系统中对ffmpeg封装最好的免费SDK

    android系统中对ffmpeg封装最好的免费SDK; 无论个人还是公司,都免费商用, 欢迎下载. https://github.com/LanSoSdk/LanSoEditor_common 可能 ...

  2. vimrc配置文件

    目录 vimrc配置文件 参考 主要功能 使用方法 配置文件 文件下载 vimrc配置文件

  3. Windows Error的错误代码

    时不时会用到,记录下 0操作成功完成. 1功能错误. 2系统找不到指定的文件. 3系统找不到指定的路径. 4系统无法打开文件. 5拒绝访问. 6句柄无效. 7存储控制块被损坏. 8存储空间不足,无法处 ...

  4. DrawerLayout(抽屉效果)

    DrawerLayout是V4包下提供的一种左滑右滑抽屉布局效果. 实现效果如下: 因为是官方提供的,所以使用起来也相对的比较简单. DrawerLayout 提供 1.当界面弹出的时候,主要内容区会 ...

  5. 扛住阿里双十一高并发流量,Sentinel是怎么做到的?

    Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景 本文介绍阿里开源限流熔断方案Sentinel功能.原理.架构.快速入门以及相关框架比较 基本介绍 1 名词解释 服务限流 :当系 ...

  6. 02-20 kd树(鸢尾花分类)

    [TOC] 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/ ...

  7. 超详细!! sql server 同步数据库 发布 订阅 跨网段 无公网ip 常见问题

    问题描述 主机1:发布端 阿里云服务器--有公网ip 主机2:订阅端 笔记本--无公网ip 数据量很小,主要是熟悉发布订阅的操作流程. 主机2仅仅作为主机1的本地备份,要求修改云服务器上数据后,能通过 ...

  8. Cheapest Palindrome POJ - 3280

    Keeping track of all the cows can be a tricky task so Farmer John has installed a system to automate ...

  9. idea配置maven以及手动添加webapp目录

    idea配置maven 点击右下角Configure 点击settings 3 . 设置路径 设置自动导包 4 . 点击创建新工程 5 . 选择maven点击下一步 6 . 7 . 8 . 此时,创建 ...

  10. Cocos Creator 通用框架设计 —— 资源管理

    如果你想使用Cocos Creator制作一些规模稍大的游戏,那么资源管理是必须解决的问题,随着游戏的进行,你可能会发现游戏的内存占用只升不降,哪怕你当前只用到了极少的资源,并且有使用cc.loade ...