使用开源软件 enfuse 做照片的曝光合成

所谓曝光合成就是对同一场景用不同的曝光量拍摄多张照片,然后将这些照片再合成为一张照片。之所以我们要这么做是因为现在的相机感光的动态范围相比人眼实在是太小了,经常在一幅照片中暗处太暗,亮处过曝。曝光合成就是针对这种情况提出的算法。

在曝光合成算法出现之前,还有另外一种解决这个问题的手段,就是所谓的 高动态图像 (HDR) 技术。我们通常的图片是用 8 bit 来表示每个颜色分量的,所谓 HDR 就是用更多的位数来存放每个像素的亮度信息,甚至有些 HDR 的图像格式直接用浮点数来存储每个像素。如何得到 HDR 图像呢,有些相机直接可以输出,更多的还是通过不同曝光量的几张照片合成。可是我们通常的显示设备,比如液晶显示器,实际上是显示不了那么大的亮度变化的。所以在显示图像时,还要将 HDR 图像转化为通常的 LDR 图像。这个过程叫做 tone mapping。 tone mapping 的质量直接决定了最后显示出的图像的质量。关于 tone mapping 相关的论文很多,各种方法各有优缺点吧。

在 2007 年,Tom Mertens、Jan Kautz、Frank Van Reeth 提出了一种 Exposure Fusion 技术,这种技术不用先合成 HDR 图像,直接融合几张照片的信息,生成一副保留了各幅图像细节的合成图片。这个技术也就是今天要讲的曝光合成技术。

关于曝光合成的具体算法建议大家直接去看那篇经典的论文,这里不多介绍了。今天只介绍一个非常优秀的开源的图像融合软件 enfuse。软件的主页在这里:

http://enblend.sourceforge.net/

下面是一个小例子。我们有三张同一场景不同曝光量的照片。



IMG_9477.JPG



IMG_9476.JPG



IMG_9478.JPG

这三张照片是用佳能450D 单反相机的曝光包围功能拍摄的,三张曝光量依次增加 2EV。

enfuse 是个命令行软件,下面的命令需要 enfuse.exe 所在的路径在 PATH 环境变量中。否则会找不到这个命令。

enfuse.exe -o out.jpg --compression=100 --contrast-weight=0.0 --exposure-weight=1.0 --saturation-weight=0.0 IMG_9476.JPG IMG_9477.JPG IMG_9478.JPG

下面来解释一下上面的命令。

“-o” 用来指定输出文件的文件名。如果不指定,默认是 a.tiff。

“–compression” 是输出文件的压缩率,1-100 之间,100 就是不压缩。

“–contrast-weight” enfuse 做图像融合时可以利用图像局部的三种信息分别是对比度、曝光量和饱和度。这里是对比度的权重,最小为 0 最大为 1。

“–exposure-weight” enfuse 做图像融合时可以利用图像局部的三种信息分别是对比度、曝光量和饱和度。这里是曝光量的权重,最小为 0 最大为 1。

“–saturation-weight” enfuse 做图像融合时可以利用图像局部的三种信息分别是对比度、曝光量和饱和度。这里是饱和度的权重,最小为 0 最大为 1。

因此上面的命令行表明只用曝光量信息做融合,输入图像是IMG_9477.JPG IMG_9478.JPG 这三幅,融合后的文件名为 out.jpg。

下面是融合后的效果。



out.jpg

可以看到,融合后的效果很好。

使用开源软件 enfuse 做照片的曝光合成的更多相关文章

  1. 利用开源软件 Hugin 实现照片的景深合成,使用开源软件 enfuse 做照片的曝光合成

    http://blog.csdn.net/liyuanbhu/article/details/53573847 http://blog.csdn.net/liyuanbhu/article/detai ...

  2. 利用开源软件 Hugin 实现照片的景深合成

    利用开源软件 Hugin 实现照片的景深合成 本文主要参考了下面的文章:http://macrocam.blogspot.jp/2013/09/using-hugin-for-focus-stacki ...

  3. 从 SDWebImage 谈如何为开源软件做贡献

    来源:伯乐在线 - 酷酷的哀殿 链接:http://ios.jobbole.com/89483/ 点击 → 申请加入伯乐在线专栏作者 从 SDWebImage 谈如何为开源软件做贡献 相识 – 知我者 ...

  4. 为什么要做一款ERP软件——开源软件诞生7

    技术之外的探讨--第7篇 用日志记录“开源软件”的诞生 赤龙ERP开源地址: 点亮星标,感谢支持,与开发者交流 kzca2000 码云:https://gitee.com/redragon/redra ...

  5. 2016国产开源软件TOP100(Q1)

    随着互联网的发展.开放标准的普及和虚拟化技术的应用等诸多IT新领域的创新及拓展,开源技术凭借其开放性.低成本.稳定性.灵活性.安全性和技术创新性等特点迅速走向成熟,逐步发展成为一种主流模式,日益改变着 ...

  6. Github 的系统内部都在用什么开源软件?

    有时候处理规模问题最好的办法就是让事情变得简单并尽你可能去避免出现这种情况.这是 GitHub 所采用的方法,林纳斯·托瓦兹(Linus Torvalds)在十年前开发了Git源代码控制工具,GitH ...

  7. 2016国产开源软件Top100(Q1)

    2016国产开源软件Top100(Q1) 随着互联网的发展.开放标准的普及和虚拟化技术的应用等诸多IT新领域的创新及拓展,开源技术凭借其开放性.低成本.稳定性.灵活性.安全性和技术创新性等特点迅速走向 ...

  8. spring boot 实战:我们的第一款开源软件

    在信息爆炸时代,如何避免持续性信息过剩,使自己变得专注而不是被纷繁的信息所累?每天会看到各种各样的新闻,各种新潮的技术层出不穷,如何筛选出自己所关心的? 各位看官会想,我们是来看开源软件的,你给我扯什 ...

  9. 2014 年最热门的国人开发开源软件 TOP 100 - 开源中国社区

    不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多的开源软件,而且还有很多软件被国外的认可.中国是 ...

随机推荐

  1. [翻译] IDMPhotoBrowser

    IDMPhotoBrowser IDMPhotoBrowser is a new implementation based on MWPhotoBrowser. IDMPhotoBrowser实现了图 ...

  2. Linux基础优化和安全重点小结

    Linux基础优化和安全重点小结 1.不用root管理,以普通用户的名义通过sudo管理授权(/etc/sudoers)        2.更改默认的ssh服务端口,禁止root用户远程连接,甚至监听 ...

  3. AT89S52之串行异步通信笔记

    SRF 中断入口地址 中断源 外中断 外部中断0 INT0(P3.2) 外部中断1 INT1(P3.3) 电平方式触发 低电平 脉冲方式触发 脉冲后延的负跳 内中断 定时中断 串行中断 中断允许控制寄 ...

  4. September 28th 2017 Week 39th Thursday

    Every saint has a past and every sinner has a future. 圣人皆有过去,罪人皆有未来. If you were a sinner in the pas ...

  5. wrap装饰器包

    import wrapt # without argument in decorator @wrapt.decorator def logging(wrapped, instance, args, k ...

  6. 第二次作业 APP分析

    第一部分 调研, 评测 1.下载软件并使用. 今天我要分析的软件app是UC浏览器这个软件,UC浏览器的用户群体还是挺多的,作为一款主流之一的浏览器APP,整体的用户体验还是很好的.简洁的界面还有中间 ...

  7. 项目属性的target platform和target platform version到底是什么(vs2015开发windows驱动小记)

    根据官方对属性页的介绍(General Property Page (Project))可了解: target platform是build后的结果会跑在哪个平台,例如windows,android, ...

  8. debian 7上安装svn

    1.在终端中直接输入  sudo apt-get install subversion,选择安装即可 2.查看版本命令 svnserve --version(更多命令直接键入svnserve --he ...

  9. BZOJ 3171 循环格 最小费用流

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3171 题目大意: 一个循环格就是一个矩阵,其中所有元素为箭头,指向相邻四个格子.每个元 ...

  10. python multiprocessing 使用

    如何在Pool中使用Queue,Stack Overflow的回答,戳这里 其实吧官方文档看一遍应该就大部分都懂了. 需要注意的是:在使用多进程的时候,我们的进程函数的传入参数必须是pickle-ab ...