Lnton羚通视频分析算法平台OpenCV-Python教程:高动态范围 HDR
  bhI5HKfMRQFj 2023年11月02日 22 0

OpenCV Python HDR

高动态范围成像(HDRI或HDR)是一种用于成像和摄影的技术,用于再现比标准数字成像或摄影技术更大的动态范围的光度。虽然人眼可以适应广泛的光照条件,但大多数成像设备每个通道使用8位,因此我们只能使用256级。当我们拍摄真实世界的场景时,明亮的区域可能曝光过度,而黑暗的区域可能曝光不足,所以我们不能用一次曝光来捕捉所有的细节。HDR成像适用于每个通道使用8位以上的图像(通常是32位浮点值),允许更宽的动态范围。

获取HDR图像有不同的方法,但最常见的是使用不同曝光值拍摄的场景照片。要组合这些曝光,了解相机的响应函数是很有用的,有算法可以估计它。HDR图像合并后,必须将其转换回8位才能在通常的显示器上查看。这个过程被称为音调映射。当场景或相机的物体在镜头之间移动时,会出现额外的复杂性,因为不同曝光的图像应该被注册和对齐。

Lnton羚通视频分析算法平台OpenCV-Python教程:高动态范围 HDR_真实世界

在本教程中,我们展示了2种算法(Debevec, Robertson)从曝光序列生成和显示HDR图像,并演示了一种称为曝光融合的替代方法(Mertens),该方法产生低动态范围图像,不需要曝光时间数据。此外,我们还估计了摄像机响应函数(CRF),这对许多计算机视觉算法都有很大的价值。HDR管道的每一步都可以使用不同的算法和参数来实现。

import numpy as np 
import cv2 

# 1. Loading exposure images into a list
img_fn = ["assets/img0.jpg", "assets/img1.jpg", "assets/img2.jpg", "assets/img3.jpg"]
img_list = [cv2.imread(fn) for fn in img_fn]

# 曝光时间
exposure_times = np.array([15.0, 2.5, 0.25, 0.0333], dtype=np.float32)


# 2. Merge exposures into HDR image
merge_debevec = cv2.createMergeDebevec()
hdr_debevec = merge_debevec.process(img_list, times=exposure_times.copy())
merge_robertson = cv2.createMergeRobertson()
hdr_robertson = merge_robertson.process(img_list, times=exposure_times.copy())

# 3. Tonemap HDR image
tonemap1 = cv2.createTonemap(gamma=2.2)
res_debevec = tonemap1.process(hdr_debevec.copy())
res_robertson = tonemap1.process(hdr_robertson.copy())

# 4. Merge exposures using Mertens fusion
merge_mertens = cv2.createMergeMertens()
res_mertens = merge_mertens.process(img_list)

# 5. Convert to 8-bit and save
res_debevec_8bit = np.clip(res_debevec*255, 0, 255).astype('uint8')
res_robertson_8bit = np.clip(res_robertson*255, 0, 255).astype('uint8')
res_mertens_8bit = np.clip(res_mertens*255, 0, 255).astype('uint8')

cv2.imshow("ldr_debevec.jpg", res_debevec_8bit)
cv2.imshow("ldr_robertson.jpg", res_robertson_8bit)
cv2.imshow("fusion_mertens.jpg", res_mertens_8bit)

cv2.waitKey(0)
cv2.destroyAllWindows()

【接口】

cv2.MergeDebevec.process(	src, times, response[, dst]	) ->	dst
cv2.MergeDebevec.process(	src, times[, dst]	) ->	dst
cv2.MergeRobertson.process(	src, times, response[, dst]	) ->	dst
cv2.MergeRobertson.process(	src, times[, dst]	) ->	dst
cv2.MergeMertens.process(	src, times, response[, dst]	) ->	dst
cv2.MergeMertens.process(	src[, dst]	) ->	dst

HDR 技术的应用涵盖了多个领域,包括摄影、电影制作、游戏和虚拟现实等。它可以呈现真实世界中广泛的亮度差异,使图像更加逼真,并提供更丰富的细节和色彩表现力。

Lnton 羚通专注于音视频算法、算力、云平台的高科技人工智能,基于视频分析技术、视频智能传输技术、远程监测技术以及智能语音融合技术等, 拥有多款可支持 ONVIF、RTSP、GB/T28181 等多协议、多路数的音视频智能分析服务器。

Lnton羚通视频分析算法平台OpenCV-Python教程:高动态范围 HDR_真实世界_02

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读