论文解读:Burst photography for high dynamic range ...&An Analysis and Implementation of the HDR+

复现论文链接:https://doi.org/10.5201/ipol.2021.336

复现论文代码:https://github.com/amonod/hdrplus-python

Burst photography for high dynamic range and low-light imaging on mobile cameras(谷歌原论文)和An Analysis and Implementation of the HDR+ Burst Denoising Method(改进复现论文)是两篇针对于在移动或者手机端这样进光量有限的相机上,其中谷歌原论文通过设计出一种pipeline通过对捕获的burst进行对齐,融合,减少其噪声并提高其动态范围。这里主要就pipeline中的对齐和融合进行分析讲解。

 整个pipeline如图所示,本文主要讲解其中的align&merge操作,在经过align&merge操作后的pipeline可以在第二篇复现论文(An Analysis and Implementation of the HDR+ Burst Denoising Method)中查到具体的流程。

Aligning Frames

1.参考帧的选择

Google原论文中:基于raw图像绿色通道梯度的简单测量方法,从前三帧中选择。

复现论文中:默认选择第一帧作为reference image。

2.处理raw图像

将raw图像中每一个RGGB的Bayer采样做平均,使得原raw图像下采样4倍得到灰度图像。

3.生成金字塔

策略:multi-scale coarse-to-fine alignment strategy(多尺度由粗到细对齐)

1.生成四层高斯金字塔: 从灰度图像到金字塔最粗级的连续降采样因子分别为2、4和4

2.分块:默认分辨率最低层分为8*8块,其他层分成16*16块。

3.计算距离:计算ref image(参考图)每一个块和搜索范围内其他帧的块之间 的距离。公式:    

        

 

搜索范围:默认前三层4pixels为半径,最后一层(分辨率最高层    半径为1pixel)

关于搜索范围和距离公式 首先,对齐的质量很大程度取决于搜索距离,大的搜索距离可以允许金字塔层之间有大的下采样因子,这样就降低了搜索陷入局部最小值的可能性。但是一般情况下,大范围的搜索距离是不切合实际的。但是复现论文介绍了快速L2亚像素(Subpixel Alignment)距离可以使用±4像素的相对较大的搜索区域。然而,尽管快速L2范数搜索在算法上是高效的,但它仍然比较小区域的简单搜索要慢。因此,我们对底部(高分辨率)金字塔层使用±1像素的L1搜索。

对于公式L1的解释:

T :ref image块(n*n);I:alt image(其他帧的块);

(u,v):is the possible location of the alternate image tile within the larger search area;

(u0,v0):is the initial guess which indicates the location of the search area;初始猜测随运动向量变化。

p:系数默认取1or2

 

我们可以看到系数p取值为1或2,当p为2的时候带入L1公式,展开我们可以得到下面的L2距离公式,而我们对L2公式中的每一项分别来看:

1.第一项只取决于T而不取决于u和v,因此它可以计算一次并在计算(u,v)所有值时重新使用。 2.第二项可以通过盒式滤波I(x,y)计算(u,v)的所有值,这可以使用滑动窗口图像滤波技术, 或使用积分图像(效率稍低)。

3.第三项也可以通过互相关I和T来计算(u,v)的所有值。互相关计算成本可能很昂贵, 但可以使用快速傅立叶变换大大加快。

其中:

第一项:第一项是T(ref image)的平方元素之和,

第二项:是图像I(alt image)的平方元素,用大小为n×n的盒式过滤器过滤

第三项:第三项是I和T的互相关,用FFT(快速傅里叶)加速。

说的直白点,当p取2的时候展开L1公式,我们可以减少很多计算量,这就是为什么前三层可以使用4像素为半径的搜索范围。

具体的搜索过程:

 

我们假设上图ref image(参考图)和alt image(其他帧的图)都为8*8块的层,我们取其中四块放大,alt image要在第一块的基础上以4像素为半径画园,ref image中的第一块作为基准块会和alt image整个搜索范围块进行比较,然后找到最小距离,比如当alt image在第四幅图中位置块的距离是最小的,那么我们接下来:

我们会得到一个位移向量,如上图的话该向量为u,v=(4,0),我们会更新距离公式中的u0和v0,更新为(u0+4,v0+0)。 

 

 更新过后我们会进行上采样,每一层金字塔分别搜索,直到分辨率最高的层以1像素为半径搜索完,这样我们就找到所有像素的位移向量了。

我们可以看一下对齐这部分的输入和输出,Google的文章给出了对齐后的可视化图片,但是在复现论文的代码中,没有直接可视化对齐结果的这一步骤,这也是要解决的问题,解决过后会更新。

上图为代码中最基本的tuning,简单叙述一些每一个因子的概念。

以上就是对齐过程,下面为融合过程。

Merging Frames

 part1.Pairwise Wiener Temporal Denoising  (时域去噪)

噪声水平的估计:由于噪声轮廓被认为对突发的所有图像都是相同的,所以我们对ref image(参考图)进行了估计。

噪声方差:σ2 = λs*ρ + λr

文章使用每个块中采样值的RMS作为ρ的近似值。

关于λs和λr(具体取值方法论文中有详细说明):

1.可以拍摄一个具有多个均匀(通常是灰色)区域的场景的一张或几张照片,并对强度进行均值和方差测量。λs和λr可以通过简单的线性回归计算出来。            

2.在一些原始的DNG文件中,λs和λr可以直接在噪声配置文件DNG标签中找到。  

3.通过iso计算λs和λr

关于时域融合去噪直接用伪代码来看:

 

 解释一下流程,首先我们的输入有两个一个是我们在对齐后得到的输出,也就是每一个对齐后的tiles,这里在代码中给出的应该是一系列对齐向量,而不是可视化的文件,所以对齐后进行可视化如果实现会继续更新。第二个输入是几个参数,上面也都提到了,其中因子c这里要说一下。

关于因子C

我们将设置c=kτ,其中k是比例因子,τ是有效控制时间去噪强度的调谐因子。 k is fixed to n2 × 1/42 × 2, where n is the tile length (虽然本文对原文的k值表示怀疑,因为原文把单个方差值拓展到两个图像,但是我们仍然保持k的值不变,因为它的影响可以通过简单地改变τ的值来取代。) τ对融合的影响最大,τ可以控制我们的burst以什么样的方式融合,具体如图:

我们要清楚一件事,整个时域融合去噪的过程中,我们的目的是求出T~0,T~0的公式在上图中,其中T0(w)和Tz(w)分别是参考图和其他帧图的噪声方差后的结果进行傅里叶变化得到的频域的结果,整个过程都是在频域上进行的,包括接下来的空域去噪也是在频域上进行的,这样下面的空域去噪可以很容易的融合到现在进行的时域融合去噪中。公式中的变量我们都可以求出来,然后比例因子c的影响如上图,可以很清楚的看出是如何影响的所以这里就不多叙述了。

最后我们把得到的傅里叶频域结果通过逆傅里叶变化换成我们熟悉的坐标。

时域去噪之后便是空域去噪。

 

空域去噪也是收到一个比例因子的影响,其他的值都是上面提到过的,公式很熟悉,而且这样都在频域进行操作可以很容易和上面的时域去噪进行融合。

还有一个问题:

 

 

 这个问题便是正常出现的结果会出现块边缘不融合现象,作者在这里给出了出现问题的原因和解决方案,主要还是通过公式变换来解决边缘不融合问题,这里细节就不多说了。

整个对齐和融合是HDR+pipeline的核心,其中对齐和融合应该每一步都有一个可视化的结果,然而源代码并没有给出在对齐后的可视化结果,只给出了位移向量,这个问题解决后会继续更新这篇博客。

 

 

 

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SetMaker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值