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. Ubuntu下安装并使用sublime text 3(建议:先安装Package controls 后在看本教程,否则可能会安装不了)

    首先从Sublime Text官网下载合适的包 然后使用 tar -xvvf sublime_text_3_build_3207_x64.tar.bz2 解压: 再使用 mv sublime_text ...

  2. 正睿OI国庆day1

    正睿OI国庆day1 T1 \[ S_n=1*S_{n-1}+1*F_{n-1}+1*F_{n-2}+1*f_{n-1}+1*f_{n-2} \] \[ F_{n}=0*S_{n-1}+1*F_{n- ...

  3. 【Java】JDK安装及环境变量配置

    第一步:下载所需jdk(本次下载Win64位 java1.8...版本) 第二步:点击文件安装,直接下一步到底,成功安装,点击关闭. 第三步:安装完JDK后配置环境变量  计算机→属性→高级系统设置→ ...

  4. Vue学习系列(一)——初识Vue.js核心

    前言 vue.js是一套构建用户界面的渐进式框架,vue.js的目标是通过尽可能简单的API实现响应的数据绑定和组合的视图组件. vue通过DOM事件操作和指令来进行视图层和模型层的相互通讯,会为每一 ...

  5. React+后端实现导出Excle表格的功能

    最近在做一个基于React+antd前端框架的Excel导出功能,我主要在后端做了处理,根据以下步骤,可以很容易就实现导出Excel表格数据的功能. 在做这类导出文件的功能,其实,在后端进行处理,会更 ...

  6. 记录一次jvm内存泄露的问题

    前些天,运维告诉我刚上线的java服务占用CPU过高. 以下是发现解决问题的具体流程. 1:通过#top命令查看,我的java服务确实把CPU几乎占满了,如图 可看到18400这个进程CPU占用达到了 ...

  7. Display 1 No cameras rendering

    解决: 点击Main Camera ,

  8. PMBOK(第六版) PMP笔记-质量审计、风险审计、采购审计的区分

    质量审计.风险审计.采购审计的区分   三个概念的相同之处: 都是审计的概念 都是特定知识领域的审计 三个概念的区别: (1)三个概念虽然都是审计,但分布在不同的管理过程组. ·质量审计:执行过程组, ...

  9. 告别硬编码,mysql 如何实现按某字段的不同取值进行统计

    上周我突然意识到,我在grafana上写的 sql 语句存在多处硬编码.这篇笔记将记录如何实现没有硬编码的sql语句,以及自学编程过程中如何应对自己的笨拙代码和难题不断的状况. 1.有效但粗笨的硬编码 ...

  10. PHP代码审计基础-中级篇

    初级篇更多是对那些已有的版本漏洞分析,存在安全问题的函数进行讲解,中级篇更多是针对用户输入对漏洞进行利用 中级篇更多是考虑由用户输入导致的安全问题. 预备工具首先要有php本地环境可以调试代码 总结就 ...