浅谈Retinex
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的更多相关文章
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- 浅谈 LayoutInflater
浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...
- 浅谈Java的throw与throws
转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...
- 浅谈SQL注入风险 - 一个Login拿下Server
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
- 浅谈WebService的版本兼容性设计
在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...
- 浅谈angular2+ionic2
浅谈angular2+ionic2 前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别. 1. 项目所用:angular2+ionic2 ...
- iOS开发之浅谈MVVM的架构设计与团队协作
今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...
- Linux特殊符号浅谈
Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...
- 浅谈Angular的 $q, defer, promise
浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00 博客园-原创精华区 原文 http://www.cnblogs.com/big-snow/ ...
随机推荐
- android系统中对ffmpeg封装最好的免费SDK
android系统中对ffmpeg封装最好的免费SDK; 无论个人还是公司,都免费商用, 欢迎下载. https://github.com/LanSoSdk/LanSoEditor_common 可能 ...
- vimrc配置文件
目录 vimrc配置文件 参考 主要功能 使用方法 配置文件 文件下载 vimrc配置文件
- Windows Error的错误代码
时不时会用到,记录下 0操作成功完成. 1功能错误. 2系统找不到指定的文件. 3系统找不到指定的路径. 4系统无法打开文件. 5拒绝访问. 6句柄无效. 7存储控制块被损坏. 8存储空间不足,无法处 ...
- DrawerLayout(抽屉效果)
DrawerLayout是V4包下提供的一种左滑右滑抽屉布局效果. 实现效果如下: 因为是官方提供的,所以使用起来也相对的比较简单. DrawerLayout 提供 1.当界面弹出的时候,主要内容区会 ...
- 扛住阿里双十一高并发流量,Sentinel是怎么做到的?
Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景 本文介绍阿里开源限流熔断方案Sentinel功能.原理.架构.快速入门以及相关框架比较 基本介绍 1 名词解释 服务限流 :当系 ...
- 02-20 kd树(鸢尾花分类)
[TOC] 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/ ...
- 超详细!! sql server 同步数据库 发布 订阅 跨网段 无公网ip 常见问题
问题描述 主机1:发布端 阿里云服务器--有公网ip 主机2:订阅端 笔记本--无公网ip 数据量很小,主要是熟悉发布订阅的操作流程. 主机2仅仅作为主机1的本地备份,要求修改云服务器上数据后,能通过 ...
- Cheapest Palindrome POJ - 3280
Keeping track of all the cows can be a tricky task so Farmer John has installed a system to automate ...
- idea配置maven以及手动添加webapp目录
idea配置maven 点击右下角Configure 点击settings 3 . 设置路径 设置自动导包 4 . 点击创建新工程 5 . 选择maven点击下一步 6 . 7 . 8 . 此时,创建 ...
- Cocos Creator 通用框架设计 —— 资源管理
如果你想使用Cocos Creator制作一些规模稍大的游戏,那么资源管理是必须解决的问题,随着游戏的进行,你可能会发现游戏的内存占用只升不降,哪怕你当前只用到了极少的资源,并且有使用cc.loade ...