retinex图像增强算法的研究
图像增强方面我共研究了Retinex、暗通道去雾、ACE等算法。其实,它们都是共通的。甚至可以说,Retinex和暗通道去雾就是同一个算法的两个不同视角,而ACE算法又是将Retinex和灰度世界等白平衡理论相结合的产物。下面将依次讨论,每个算法写一个心得,欢迎拍砖。
今天先写Retinex。Retinex理论认为,人眼观测到的图像S是光照图像L和物体反射图像R的乘积。而R才是真实的恒常性的图像,但是怎么从观测图像S中计算R呢?这是个病态问题,根本不可解。研究者就通过加以一定的约束条件,比如光照L具有缓变平滑性、L与S有一定的弱相关性等等,然后估计出光照图像L,进而得到R。
从S中如何估计L,就衍生出了各种各样的实现方式,影响较大的有:中心环绕、随机路径、变分、金字塔迭代等等方法。其中,中心环绕算法无疑是影响最大的retinex实现方式,使用高斯尺度算子来估计光照图像,计算速度快。当然,它也有一些缺点:
1) 在强光阴影过渡区容易出现光晕现象;
主要是由于高斯算子不能在过渡区很好的估计光照所致。
2) 对比较亮的图像处理欠佳,比如雾霾图像。
主要原因有二:retinex不是专门的去雾算法;对数化处理压缩了亮区域的显示范围,导致其细节弱化。
由于L和R是乘积的关系,为了便于处理,一般对观测图像S先进行对数处理,这样就转换成了加性关系。使用对数处理可以极大的提升暗区域的像素值,以增加对比度,但代价是压缩了亮区图像的显示范围,导致其细节模糊甚至丢失。所以个人认为,retinex适用于处理那些光照不足黑不拉几的图像,对于比较亮的图像,不妨先进行反色处理再retinex。
3) 色彩保持能力较弱。
因为对rgb三个颜色通道各自归一化处理的缘故,有论文提到了一些改善方法,但我发现还是不容乐观。
此外,三通道各自归一化处理后,其颜色均值是接近于128的,如果后面再跟一个指数化操作(对数处理的反操作),将导致图像颜色明显偏暗,所以这是一般retinex算法只有对数处理没有指数处理的缘故。
所以,我对中心环绕算法做了一点点改进:
主要如下:
1)使用引导滤波来快速估计光照图像,减少光晕的出现,实验表明,该步骤对色彩保持能力也有一定的提升;
2)在使用多个尺度算子进行合成的时候,不是简单的做均值处理;
3)在完成retinex处理之后,再做一次简单的gamma校正,使其均值接近于128。
下面给实验结果图, 可见色彩保持的还不错哦,对雾霾图像也有较好的效果。
软件EXE下载地址:https://pan.baidu.com/s/1dFGBAP7
程序采用python实现,未经性能优化,exe中打包了python及numpy wxpython opencv等重量级模块,故体积较大,如杀毒软件误报为病毒,请信任运行。








retinex图像增强算法的研究的更多相关文章
- Retinex图像增强算法
前一段时间研究了一下图像增强算法,发现Retinex理论在彩色图像增强.图像去雾.彩色图像恢复方面拥有很好的效果,下面介绍一下我对该算法的理解. Retinex理论 Retinex理论始于Land和M ...
- 关于Retinex图像增强算法的一些新学习。
最近再次看了一下IPOL网站,有一篇最近发表的文章,名字就是Multiscale Retinex,感觉自己对这个已经基本了解了,但还是进去看了看,也有一些收获,于是抽空把他们稍微整理了下,原始文章及其 ...
- Retinex图像增强算法代码
http://www.cnblogs.com/sleepwalker/p/3676600.html?utm_source=tuicool http://blog.csdn.net/carson2005 ...
- 图像增强算法(直方图均衡化、拉普拉斯、Log、伽马变换)
一.图像增强算法原理 图像增强算法常见于对图像的亮度.对比度.饱和度.色调等进行调节,增加其清晰度,减少噪点等.图像增强往往经过多个算法的组合,完成上述功能,比如图像去燥等同于低通滤波器,增加清晰度则 ...
- KMP算法(研究总结,字符串)
KMP算法(研究总结,字符串) 前段时间学习KMP算法,感觉有些复杂,不过好歹是弄懂啦,简单地记录一下,方便以后自己回忆. 引入 首先我们来看一个例子,现在有两个字符串A和B,问你在A中是否有B,有几 ...
- Dinic算法(研究总结,网络流)
Dinic算法(研究总结,网络流) 网络流是信息学竞赛中的常见类型,笔者刚学习了最大流Dinic算法,简单记录一下 网络流基本概念 什么是网络流 在一个有向图上选择一个源点,一个汇点,每一条边上都有一 ...
- 基于MATLAB的人脸识别算法的研究
基于MATLAB的人脸识别算法的研究 作者:lee神 现如今机器视觉越来越盛行,从智能交通系统的车辆识别,车牌识别到交通标牌的识别:从智能手机的人脸识别的性别识别:如今无人驾驶汽车更是应用了大量的机器 ...
- R-Tree空间索引算法的研究历程和最新进展分析
转自原文 R-Tree空间索引算法的研究历程和最新进展分析,2008 摘要:本文介绍了空间索引的概念.R-Tree数据结构和R-Tree空间索引的算法描述,并从R-Tree索引技术的优缺点对R-Tre ...
- Java实现 蓝桥杯VIP 算法提高 研究兔子的土豪
试题 算法提高 研究兔子的土豪 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 某天,HWD老师开始研究兔子,因为他是个土豪 ,所以他居然一下子买了一个可以容纳10^18代兔子的巨大 ...
随机推荐
- Django基础篇--Models
在Django中创建与数据库的链接并调用数据库的数据是很关键的步骤,那么怎么实现这个过程呢? 下面这篇文章简单梳理了一下创建Model层的过程和应用 模型-Models 首先需要理解什么是模型? 模型 ...
- GridView的簡單使用
項目GitHub地址:https://github.com/leonInShanghai/IMbobo GridView XML佈局: <?xml version="1.0" ...
- 关于MySQL checkpoint
Ⅰ.Checkpoint 1.1 checkpoint的作用 缩短数据库的恢复时间 缓冲池不够用时,将脏页刷到磁盘 重做日志不可用时,刷新脏页 1.2 展开分析 page被缓存在bp中,page在bp ...
- GPU与CPU的区别
作者:虫子君 链接:https://www.zhihu.com/question/19903344/answer/96081382 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- git撤销本地提交但未push的记录
### git撤销本地提交但未push的记录 前言:有时候本地执行commit命令或者cherry-pick命令后发现提交了不需要提交的东西,就需要把已提交的commit记录撤销下来,简单做下记录 撤 ...
- 3.4Python数据处理篇之Numpy系列(四)---ndarray 数组的运算
目录 目录 (一)数组与标量的运算 1.说明: 2.实例: (二)元素级的运算(一元函数) 1.说明: 2.实例: (三)数组级的运算(二元函数) 1.说明: 2.实例: 目录 1.数组与标量的运算 ...
- nginx 了解一下
先决条件 想要流畅的配置 nginx 需要了解一下内容: 1.nginx 调用方式: 启动 (双击 exe.cmd start nginx .cmd nginx) 使用 (powershell 调用需 ...
- February 4th, 2018 Week 6th Sunday
Hope clouds observation. 心怀希望会蒙蔽双眼,影响判断. Almost every of us thinks we would be the master of our liv ...
- 截取字符串substr和subString的却别
substr 方法 返回一个从指定位置开始的指定长度的子字符串. stringvar.substr(start [, length ]) 参数 stringvar 必选项.要提取子字符串的字符串文字或 ...
- linux命令总结之tr命令
什么是tr命令?tr,translate的简写,translate的翻译: [trænsˈleit] vi. 翻译, 能被译出 vt. 翻译, 解释, 转化, 转变为, 调动 在这里用到的意思是转化, ...