合成并显示高动态图像
目的
使用曝光融合合成并显示高动态图像。
原理
曝光融合是一种将使用不同曝光设置拍摄的图像合成为一张看起来像色调映射的高动态范围(HDR)图像的图像的方法。当我们使用相机拍摄照片时,每个颜色通道只有8位来表示场景的亮度。然而,我们周围世界的亮度理论上可以从0(黑色)到几乎无限(直视太阳)。因此,傻瓜相机或移动相机根据场景决定曝光设置,以便使用相机的动态范围(0-255值)来表示图像中最有趣的部分。
HDR成像要求我们知道精确的曝光时间,其本身看起来很暗,看起来不太漂亮。DR图像中的最小强度为0,但理论上没有最大值。所以我们需要将其值映射到0到255之间,以便我们可以显示它。将HDR图像映射到常规的每通道8位彩色图像的过程称为色调映射。而组装HDR图像和色调映射有点麻烦,我们不能不使用HDR就使用多个图像创建色调映射图像。
代码
import cv2
import numpy as np
# Loading exposure images into a list
img_fn = ["1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg", "6.jpg", "7.jpg"]
img_list = [cv2.imread(fn) for fn in img_fn]
exposure_times = np.array([0.0333, 0.25, 1, 2.5, 4, 8, 16], dtype=np.float32)
# Merge exposures to HDR image
merge_debvec = cv2.createMergeDebevec()
hdr_debvec = merge_debvec.process(img_list, times=exposure_times.copy())
merge_robertson = cv2.createMergeRobertson()
hdr_robertson = merge_robertson.