HDR的本意是高动态范围图像压缩。 我们知道一般CMOS sensor拍摄到的照片动态范围较人眼小很多,所以通过不同曝光时间拍摄同一场景的多张照片,实现动态范围扩展。前文提过曝光时间和图像亮度成正比,在已知多张照片曝光时间的条件下,可以把多张照片合成一张高动态范围的图片。举例来说,原始照片中图像内容的亮度范围都是0~255,合成之后亮度范围可能变成了0~1023,这幅高动态照片确实可以呈现所有的图像细节,不过一般显示器的显示范围只有0~255,无法直接显示出来。采用等比例压缩成0~255的话,图像细节丢失比较严重,于是出现了各种压缩动态范围的算法,既能完整呈现图像,又不损失细节。借用百度的图片。
![]()
先谈一下HDR的实现方法。通常我们所说的HDR都是指照片而不是视频,也就是说拍摄好几张不同曝光的照片存在系统的DRAM中,然后由CPU来计算合成,这是由SW来实现的,通常所需时间是秒级。HDR算法种类很多,效果较好的算法也意味着较高的计算复杂度。现在视频拍摄也需要HDR,CPU就容易算不过来,我这里分析一下由数字IC设计来实现HDR的可行性。
要视频HDR,首先需要CMOS sensor支持长短曝光模式,以长/短两种曝光图像合成为例,据我所知有两种输出格式,如下图。
![]()
对于依次传输的模式,要做二合一融合,必须要把长曝光的整幅图像先存起来,用SRAM的话显然面积会非常庞大,成本太高,因此需要存到系统的DRAM中,等短曝光的图像收到的时候再从DRAM中取出来。这样会占用DRAM的1个Frame存储空间,以及1次读Frame和1次写Frame的带宽。对于混合传输模式,除了可以同样采取把长曝光数据存储到DRAM中的方法以外,也具有把数据放入SRAM的可能性,这要看混合传输时block 大小。以FHD为例,假设先传输100 line的长曝光图像数据,再传输100 line的短曝光图像数据,需要把1920*100=192K个pixel存储到SRAM中,为了减小size,通常会在Bayer pattern domain做HDR合成,以pixel为10-bit为例,Total size为192K*10/8=240K bytes,成本或许可以接受。
HDR算法种类较多,我这里大概介绍一下基本思想。有基于直方图统计特征,进行亮度重新映射的方法,类似于直方图均衡化。有局部处理法,结合整体图像亮度和局部区域对比度,保留细节又压缩范围。有转换到对数域(人眼对亮度的敏感度类似对数关系)进行压缩的方法。有对图像进行分层,分为基础层和细节层,保留细节层,对基础层进行范围压缩的方法。各种方法可以相互融合借鉴,对于IC设计来说,最关键的还是性价比。
|