图像亮度自适应调整
2016-04-06 19:27
323 查看
简介
本篇主要是对论文:Automatic Exposure Correction of Consumer Photographs 的实现总结。 作用是为了让图像曝光、细节更好。 论文地址:点击打开链接
实现原理
根据对输入图像的亮度信息进行分析处理,进而获得该图片对应的S型Gamma曲线。利用这条曲线对输入图像进行处理,得到更好曝光和细节效果的图像。
算法实现
图像分割
将输入图像缩放后,利用:graph-based segmentation方法进行图像分割,直接网上搜索该关键字,有对应的论文和直接的代码下载,代码做点小修改之后 可以直接opencv编译通过。 得到的结果如下: 缩放后图像 区域分割后图像
区域合并
首先将图像归一化,接着根据亮度0.0、0.1....1.0将图像分为11层。然后将之前分割出来的区域块,根据亮度层进行合并。 得到的结果如下: 区域合并后图像
细节提取
将图像根据前面的分层和亮度中间值V为分界线,将图像分为暗区和两区两部分;,对图像分别用Gamma(2.2, 0.445)进行处理,得到欠曝和过曝图像。 接着对着三张图像进行canny 细节提取。针对之前得到的前面分层,根据每层亮度是否大于V,计算出该层的细节占总细节的比例:Vb或者Vh。
区域尺寸比例
计算出每层区域的像素占整个图像像素的比例,对应为:Ci;
相邻层直方图距离
得到每层对应的直方图,计算两两相邻层之间,直方图重合区域最大时候移动的距离,记录为Dij。
区域层亮度重映射
根据论文上公式:
根据公式算法,枚举所有可能的的区域层亮度组合,算出每种组合的Z值,取Z值最小时候的组合,就是我们求得的新区域层亮度。 如本文图片范例所示:最开始的区域层亮度为:0 1 2 3 4 7 8;算法调整后为:2, 2, 2, 3, 5, 7, 8。亮处的区域层亮度没有变化,暗处区域层 亮度增加了不少。
S曲线调整
前面得到的区域层亮度,就是用来求S曲线的Qs, Qh。如下图所示:
Qs由如下公式求得:
ei可以理解为区域层亮度调整前的区域亮度与区域size的比值;e'i为区域层亮度调整后的区域亮度与区域size的比值。 Qh也是类似方式求得,本文范例图像上,亮处区域调整为0,所以Qh计算出来为0,Qs为正数。
接着便可以利用公式: 对原图像进行S曲线调整。 处理后的结果对比如下: S曲线调整后结果对比
可以明显的看到,暗处的亮度和细节已经起来了。
细节优化
前面的调整,提高暗处亮度,本质上会压缩了中间区域的动态范围,将会导致图像看起来有些朦胧模糊;因此在这基础上,还需要 做些细节增强的处理。对原图像I做guided filter,到新图像F,用I - F得到用来增强细节的图像。 接着使用如下公式进行处理:
处理后的结果对比如下:
可以看到右边图像细节部分,得到了增强。
色彩调整
前面可以看到,新图像亮度增加之后,饱和度会降低。所以,这里根据原图像亮度和色彩的比值,以及新图像的亮度, 来从新调整新图像的色彩。 处理后的结果对比如下:
可以看到新图像的色彩饱和度已经起来了。 另外需要注意,该算法的大缺点:会放大噪声。
以上,图像调整完毕。
结果显示
最后,看几组该算法的处理结果:
可以看到:该算法对弱光下拍摄的图像,暗处细节得到了明显的加强,同时对正常曝光的图像,也不会造成变坏的影响。
相关文章推荐
- 团队项目成员和题目
- zoj3872——Beauty of Array(数学)
- 利用libvirt给虚拟机添加virtio磁盘驱动
- 两个路由器下电脑如何实现访问
- RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)
- C语言入门基础篇,内存与变量关系
- 面向对象设计中SOLID原则
- 安卓之父安迪·鲁宾:让乔布斯羡慕嫉妒恨的人
- 无顺序约束的字符串匹配问题
- leetcode——28—— Implement strStr()
- 我有过一段婚史,你介意吗
- RabbitMQ消息队列(三):任务分发机制
- 4个费劲心思却走向编程地狱的陷阱
- UVA10878 - Decode the tape
- maven 笔记
- 苹果双系统安装教程,苹果笔记本如何装Win7(经典)
- mysql Field xxx doesn't have a default value STRICT_TRANS_TABLES(存储引擎启用严格模式,非法数据值被拒绝)
- 团队开发
- BZOJ2959: 长跑
- 数据结构学习(一)