使用开源软件 enfuse 做照片的曝光合成
2016-12-10 19:44
357 查看
使用开源软件 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
可以看到,融合后的效果很好。
相关文章推荐
- 来淄博旅游
- Linux终端和vim快捷键介绍
- 互联网开发模式的经验之谈
- 20145219 《信息安全系统设计基础》第13周学习总结
- 一步一步学区块链(6)truffle开发框架
- 1064. 朋友数(20)
- Linux 环境变量介绍
- 编写strlen函数
- 安装odoo服务
- 第十六周 项目四 - 英文字母的基数排序
- css基础,这一篇就够了
- JavaScript:世界上最被误解的语言
- 什么是元数据
- unity 渲染流程
- 缓存系统在游戏业务中的特异性
- 第十六周 项目三 - 归并排序算法的改进
- gitserver服务器搭建以及代码自动更新
- 桶排序总结
- 随机动态规划,随机库存管理,matlab 代码, c 代码
- ls 命令