HDR+论文总结及代码实现

      HDR+算法是自己好几年前在某手机公司接触的项目,当时把HDR+的论文复现了下,降噪效果还是很不错的,但是我主要用的是jpg的图,没用过RAW原图,当时也只是摸清了原理,没有做过下位机移植。

      顺便说下自己的感受,感觉不管做什么行业,一定都要有自己的想法,也就是对整个行业的把握和理解。如果没有自己的想法,那就只能被人牵着鼻子走,自己彻底沦为打杂的。当时我刚毕业时就是没什么自己的想法,让做什么就做什么,其实这样很不好的,对自己职业发展肯定是不利的。

       工作几年后,对行业有一定认识后,就需要盯着几个方向持续追踪,深入研究,感觉对HDR+算法还是比较有兴趣的,后面还是希望能关注下多帧降噪这方面的技术,最新的论文之类的,先试着把HDR+算法做到下位机。

       参加工作这几年我主要从事的方向是图像&计算机视觉算法,做过常规图像算法,也做过深度学习算法,按照功能主要接触过的类别包括检测、识别、判断、图像去噪、分类、语义分割。

        像检测,识别,判断这类算法,就是输入一张图,输出检测,识别,判断的结果,这类算法的过程就是信息在不断丢失,典型的输入数据内容比输出多,这类算法很容易做到实时。

        但是像语义分割,图像去噪这类输入是一张图像,输出是等大的图像,输入数据内容和输出数据内容差不多大,甚至有些还要求图像内容更丰富细致。这类算法想做到实时就比较难的。可能语义分割也算是信息丢失的过程,但是目前语义分割在一些下位机中是很难做到实时(截止2021年3月29日),一般都是需要将图像进行缩小,网络分割完了再放大到等大。

        HDR+算法也是一种典型的像素到像素的处理算法,因此也很难做到实时,尤其是如果要处理的图像还很大的时候。

HDR+的算法流程包括选帧,反马赛克,对齐,融合,色调映射(Tone-Mapping)等等过程。其中每个过程都包含一些专门的算法,我主要对对齐和融合这些过程比较有兴趣,另外对于融合中的一些图块去马赛克效果有兴趣。

        不回去翻论文和贴图了,就凭回忆简单说下原理。

         传统HDR算法就是拍三张图,一张欠曝,一张正常曝,一张过曝,然后对齐后融合,很容易出现鬼影,主要因为过曝光那张图采集的时候曝光时间比较长,如果画面中有物体在移动,或者自己手抖了,导致三张图差别比较大,对的不够齐就会出现鬼影。HDR+算法运用一种幸运成像的方式,采集多张欠曝图,论文中是8张。因为是欠曝,曝光时间短,而且是快速采集多张图,因此帧之间的差别比较小,容易对齐。另外因为短时间曝光,不容易出现过曝死白死白的区域,整个画面就是很暗,可以存储更多动态范围,后续把亮度拉一下就可以把一些死黑的区域的细节显示出来(图像如果过曝,细节就完全丢失)。但是短时间曝光会出现很多噪点,所以需要多张图来进行对齐融合,均匀采样就能把噪点消除。

        以前相机的传感器拜耳阵列的数据存储范围是8位,动态范围是0到255,现在可能很多传感器的动态范围能到14位或者16位,可以记录更大的动态范围。HDR+论文里面的RAW图记得貌似是14位的。不过最终都会压缩成8位的,像jpg类型的图都是8位的。

        采集完8张图后,就会选一张图作为底图(这里就涉及到选帧算法,这也是一个算法方向,如果要研究也是很多需要研究的,暂时不管)。然后其它7张图跟这张底图分别做7对对齐,论文里面用到的对齐方式是4个尺度的分块模板匹配。

        先把图像缩放成1/32,然后两张图各自分成16x16的块在4x4的范围内模板匹配。记录下每块移动的大小。这步允许最大偏移32x4=128个像素。

        再把图像缩放成1/8,然后两张图各自分成16x16的块在4x4的范围内模板匹配。记录下每块移动的大小。这步允许最大偏移8x4=32个像素。

        再把图像缩放成1/4,然后两张图各自分成16x16的块在2x2的范围内模板匹配。记录下每块移动的大小。这步允许最大偏移4x2=8个像素。

        最后在原图上 ,两张图各自分成16x16的块在1x1的范围内模板匹配。记录下每块移动的大小。这步允许最大偏移1x1=1个像素。

        一共最大允许128+32+8+1 = 169个像素的偏移。对齐完后,就会对对应的块按照一定比例进行融合。

       比如以第一张图为底图,那其它7张图跟第一张图对应块会先做差,然后差的倒数作为对应块融合时的比例系数,而第一张图作为底图,其比例系数为1。也就是8张图对应块的比例系数为:

                      1:1/Ires1:1/Ires2:1/Ires3:1/Ires4:1/Ires5:1/Ires6:1/Ires7

        如果对应块跟原图相差的越多,比例系数就越低,因为这个时候可能就是对齐错误。如果跟原图差的越小,比例系数会越大,这个时候就相当于每张图对应块都会取一部分均匀融合,不同帧的欠曝光画面形成的噪点分布是随机均匀分布(其实不是很确定是否是均匀随机分布,也有可能是泊松分布,暂时没研究过,但是确认肯定不是固定分布的),这样多张图再均匀融合,很多噪点就相当于抵消了。

       下面两张gif图是我跑出来的结果截图,当然在这个场景下,8张图在采集的时候移动的幅度不大,因此出现对齐错误的比较少。

 

        8张图中的同一个物体如果偏移169个像素以上,会出现无法对其,或者就是对齐错误的现象。这时画面就会出现一些很明显的马赛克或者图块的现象。貌似论文中没有提到这个的解决方法,也可能是我当时没注意到这块而被我忽视了。前段时间思考了下,想到了一些解决办法,打算先按照自己的想法尝试下,后面再翻翻论文找找有没有这个的处理。后面更新本篇博文时再详细介绍下我的想法吧。

        论文中还有很多算法我没说到。比如色调映射,还有那个欠曝光的时间怎么确定。既使是欠曝光,不同场景欠曝的时间肯定也不一样。记得当时看论文好像是谷歌采集了很多不同的场景图,貌似是有5000多个不同的场景,然后每个场景调了些合适的曝光时间,计算了一些参数,然后后续实际拍照时会做匹配,匹配上类似的场景就借鉴这个已有场景的曝光时间。貌似他们色调映射也是这么做的,因为色调映射也是需要针对不同的场景去调的。

        总的来说这个HDR+算法涉及到的算法还是很多的,感觉每个模块如果感兴趣都有很多得去研究的。它是很多模块都做的很好,最后才实现了很好的效果,毕竟那个论文也不是一个人做出来的,貌似论文作者都挂了好几个人的名字的。

        先介绍这么点挖个坑把,后面再把实验的过程图和代码贴上来吧~

 

 

 

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值