HDR (High Dynamic Range) 高动态范围图像
手机一直开着自动HDR,但是其实不知道它究竟是用来干啥的,也没看出效果究竟在哪(好像只是图像变清晰了😅),上完这节课终于明白了
现在我们的数字彩色图像一般是用24位存储颜色矩阵的,也就是R,G,B各8-bit,但现实中的色域远远不止0-255,所以过亮/过暗的区域在图像中总是不能很好地显示.
HDR的工作原理是:
采集多张不同曝光的图像
->HDR
->8-bit图像
**
实现HDR有很多种方法,如Devebec’s,Robertson’s Method 等,还可以使用曝光融合(exposure fusion, mertens, …)
实践HDR
具体步骤
采集多张图像
最少3张: underexposed, properly image, overexposed
校准图像
计算图像响应函数
由于多张图像采用了不同的曝光时间,故得到图像的值也不同,但是这个值与曝光时间并不是线性关系的,所以我们需要估计Camera Response Function (CRF),才能融合图像
图像融合
得到HDR图像
将HDR存为8-bit图像
以上步骤参考了:
https://www.learnopencv.com/high-dynamic-range-hdr-imaging-using-opencv-cpp-python/
代码
1 | #! /usr/local/bin/python |
注意:
- 输入的7张原始图像需要是相同大小的,老师给的图像大小不一致,所以需要在photoshop中修改一下
- 曝光时间矩阵需要
float32
类型的,所以在整数后加.0
,否则不会存为浮点数
结果
原始图像:
HDR图像:
可以看到取得了较好的效果