使用开源软件 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. [翻译] CotEditor

    CotEditor https://github.com/coteditor/CotEditor CotEditor is a lightweight plain-text editor for OS ...

  2. Build path entry is missing: config 引起的 The project: configwhich is referenced by the classpath, does not exist.

    运行Junit的时候报错, The project: XXXX which is referenced by the classpath, does not exist. 在Java Build Pa ...

  3. struts2.5动态方法绑定问题

    <global-allowed-methods>regex:.*</global-allowed-methods> <?xml version="1.0&quo ...

  4. 低级终端IO

    低级终端IO 程序会需要对输入输出进行比简单的文件操作更为精确的控制.POSX提供了一套接口允许程序控制终端驱动程序的行为,这套接口称为通用终端接口(GIT). 需要改变终端设置的例子 标准输入输出, ...

  5. python面向对象-封装and多态

    python 接口类和抽象类 为什么讲封装之前要将这个东西? 我才不会说为什么 首先: python没有接口类这个概念!!!!!!!! 哈哈哈......神经病 python抽象类和接口类更接近于一种 ...

  6. laravel 资料

    1.http://maxoffsky.com/maxoffsky-blog/building-a-shop-with-laravel-tutorial-series-announcement/  一篇 ...

  7. SPL 笔记

    PHP  SPL是指 standard  php library,php标准库. SPL提供了一系列的类和接口,使用这些类和接口,我们可以更加高效.优雅的使用php进行程序设计.   从php5.0开 ...

  8. BZOJ1076:[SCOI2008]奖励关(状压DP,期望)

    Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物, 每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的 ...

  9. numpy的操作

    import numpy as np ######################## # 索引 n1 = np.random.randint(0, 100, 10) # print(n1) ''' ...

  10. 10分钟安装OpenStack

    1 OpenStack初学者的苦恼 2 OpenStack最低配置要求 3 配置UOS环境 3.1 设置网络 3.1.1 创建路由器 3.1.2 创建网络 3.1.3 创建两个子网 3.2 创建UOS ...