论文阅读:Computational Long Exposure Mobile Photography (二)

这篇文章是谷歌发表在 2023 ACM transaction on Graphic 上的一篇文章,介绍如何在手机摄影中实现长曝光的一些拍摄效果。

Abstract

长曝光摄影能拍出令人惊叹的影像,用运动模糊来呈现场景中的移动元素。它通常有两种模式,分别产生前景模糊或背景模糊效果。前景模糊图像通常是用安装在三脚架上的相机拍摄的,描绘的是移动的前景元素(如丝般的流水或光轨)呈现出模糊效果,而背景景观则非常清晰。背景模糊图像(也称为平移摄影)是在相机追踪移动主体时拍摄的,从而得到主体清晰而背景因相对运动而模糊的图像。这两种技术都极具挑战性,并且需要额外的设备和高超的技巧。
本文介绍了一种计算式连拍摄影系统,它运行在手拿式智能手机的相机应用程序中,只需按下快门按钮就能全自动地实现这些效果。我们的方法首先检测并分割出显著主体。我们对多帧画面中的场景运动进行追踪并对齐图像,以保持所需的清晰度并产生具有美感的运动拖影。我们拍摄一组曝光不足的连拍照片,并选择输入帧的子集,无论场景或相机的运动速度如何,这些子集都能产生长度可控的模糊拖影。我们预测帧间运动并合成运动模糊来填补输入帧之间的时间间隙。最后,我们将模糊图像与正常曝光的清晰图像合成,以保证面部或场景中几乎没有移动的区域的清晰度,并生成最终的高分辨率和高动态范围(HDR)照片。我们的系统使原本只有专业人士才能掌握的能力得以普及,让大多数普通摄影爱好者也能使用这种创意风格。

文章太长,分成两部分,第一部分:
Computational Long Exposure Mobile Photography (一)

Frame Selection

我们的系统使用一种帧选择机制,该机制计算运动模糊轨迹长度的估计值,以决定增量帧处理外循环何时应该停止。首先,我们利用对齐求解器计算出的变换将运动特征轨迹转换到基准帧的参考空间,在该空间中它们在空间上与输出图像中相应被跟踪特征的运动模糊轨迹对齐。然后可以计算出每条对齐轨迹的长度,并且我们使用轨迹长度分布的高百分位数作为整体模糊轨迹长度的估计值。最后将这个估计值与一个恒定的目标设置进行比较,以决定是否满足帧选择标准。
我们以图像对角线的百分比来测量轨迹长度,这种度量在很大程度上对图像分辨率或宽高比不敏感。在前景模糊的情况下,我们的标准是第 98 百分位数达到 30% 的目标,为移动最快的物体产生相对较长且平滑的模糊轨迹。在背景模糊的情况下,我们采用第 80 百分位数和 2.8% 的目标,为背景的较大区域产生短模糊轨迹,目的是保持主体清晰度并避免丢失周围场景的背景信息。这些设置是通过对大量输入连拍进行反复试验得出的经验值。

Motion Prediction

一旦输入的低分辨率图像完成对齐,我们就将它们输入到一个运动模糊核预测神经网络中,每次输入一帧对,每次迭代预测一对线条和权重核图。低分辨率核图用于以半分辨率合成运动模糊片段,跨越相应的输入帧。

运动预测模型负责预测沿线段的两个空间积分的参数,这两个空间积分近似于定义在相应时间间隔内通过每个运动模糊输出像素看到的颜色平均的时间积分。我们使用基于 [Brooks 和 Barron 2019] 的模型,并进行了进一步修改,改善了性能和图像质量之间的权衡,使我们能够在移动设备上适应合理的内存和计算预算。

他们的数学公式可预测给定图像对 k 中每个输入帧 i 的权重图 W i W_i Wi W i W_i Wi 有 N = 17 个通道,这些通道用于对沿预测线段的每个相应纹理样本进行加权。我们通过仅预测单个通道来简化该模型,该通道用于对来自每个输入帧的积分结果进行加权。图 2 展示了一个灰度图示例,显示出网络预测在输入图像的各处权重大致相等,除了在遮挡区域,在这些区域权重偏向于两个输入之一的结果。这种简化显著降低了系统复杂性和内存使用量,并使网络能够将更多的能力用于预测线段。

  • 图 6
    在这里插入图片描述
    运动预测模型斜坡函数消融。(a)从单个输入图像对合成的运动模糊移动火车的渲染图。火车前部的运动模糊特写以及相应的输入图像对,上面覆盖了表示预测线段的向量场可视化,分别在(b)和(c)中使用模型 “我们的消融(Ours-abl.)” 和 “我们的(Ours)”,即分别在没有和有斜坡函数的情况下。在图像(b)- 左图中,蓝色箭头表示运动模糊轨迹的整个跨度,红色箭头展示了在模糊轨迹中间最明显的间隙不连续性。

此外,我们消除了由于预测线段端点误差 [Zhang 等人,2016] 所导致的伪影,这些伪影会使线段在跨越的时间间隔末端无法完美衔接,从而在模糊轨迹中间产生非常明显的伪影,如图 6 所示。为避免这一问题,我们通过一个归一化的递减线性斜坡函数 wn 进一步对输入图像纹理样本进行缩放,该函数更倾向于靠近输出像素的样本,并沿着每条预测线段逐渐降低较远样本的权重。对于输入帧对 k,输出像素 (x,y) 的强度为

I k ( x , y ) = ∑ i ∈ k , k + 1 W i ( x , y ) ∑ n = 0 N − 1 w n ∑ n = 0 N − 1 w n I i ( x i n , y i n ) (6) I_{k}(x, y) = \sum_{i\in{k,k+1}} \frac{W_i(x,y)}{\sum_{n=0}^{N-1} w_n} \sum_{n=0}^{N-1} w_n I_{i}(x_{in}, y_{in}) \tag{6} Ik(x,y)=ik,k+1n=0N1wnWi(x,y)n=0N1wnIi(xin,yin)(6)

其中, w n = 1 − n / N w_n = 1 - n/N wn=1n/N, 采样位置定义如下:

x i n = x + ( n N − 1 ) Δ i x ( x , y ) , y i n = y + ( n N − 1 ) Δ i y ( x , y ) x_{in} = x + (\frac{n}{N-1}) \Delta_{i}^{x}(x, y), \quad y_{in} = y + (\frac{n}{N-1}) \Delta_{i}^{y}(x, y) xin=x+(N1n)Δix(x,y),yin=y+(N1n)Δiy(x,y)

我们还对网络架构进行了如下修改。首先,我们将各处的带泄漏修正线性单元(Leaky ReLU)卷积激活函数全部替换为参数化的修正线性单元(ReLU)[He 等人,2015],其中斜率系数是可学习的。接下来,为了避免常见的棋盘格伪影 [Odena 等人,2016],我们将 2 倍重采样层替换为使用平均池化进行下采样,以及双线性上采样后接一个 2×2 卷积。这就得到了在后面分析的标记为 “Ours - large” 的模型。此外,为了改善浮点运算次数、参数数量和感受野之间的平衡,我们进一步将 U - Net 模型拓扑结构减少到仅 3 层,其中每层都使用 1×1 卷积,接着是一个包含 4 个 3×3 卷积层的残差网络(ResNet)块 [He 等人,2016]。这样就得到了一个标记为 “Ours” 的模型,其可学习参数显著减少。
如图 6 所示,斜坡函数 w n w_n wn 对我们所学习的单权重模型有显著益处,因为它使得预测线段在每个输入图像中跨越空间,等同于对整个时间间隔进行积分。当我们的模型在去掉这个项的情况下进行训练,得到 “Ours - abl.” 模型时,网络预测的线段在每一侧大约跨越时间间隔的一半,导致在模糊轨迹中间出现明显的不连续性。更多示例可在后面章节提供的模型比较分析中找到。

Rendering

运动预测网络输出的线条和权重核图由渲染器使用,以合成运动模糊图像。渲染器在 OpenCL 内核中实现,它在移动设备的 GPU 上运行效率非常高,在自适应地对半分辨率输入图像进行纹理采样时利用了硬件纹理单元(纹理样本数量 N 与预测线向量的长度成比例调整)。运动预测和渲染迭代可以每次针对一对输入帧进行,从而产生分段线性运动模糊轨迹。通过使用双线性纹理查找,核图从低分辨率上采样到半分辨率。

样条插值。分段线性运动插值可能会在运动轨迹中引入锯齿状的视觉伪影。为了更平滑地对运动进行插值,我们使用三次埃尔米特样条对帧间推断出的瞬时流 Δ𝑖 进行插值。

通过构建一个与(Δ𝑖⁺ + Δ𝑖⁻)平行的向量𝐻(Δ𝑖⁺, Δ𝑖⁻) 来推断每个像素处的瞬时流量𝛿𝑖,其大小等于 |Δ𝑖⁺| 和 |Δ𝑖⁻| 的调和平均数。上标 “⁺” 和 “⁻” 分别表示时间方向。如果 Δ𝑖⁺和 Δ𝑖⁻与直线路径偏离一个角度𝜃,对于较小的角度偏差(<90°),该向量会进一步按(𝜃/sin𝜃)的比例进行缩放,对于较大的偏差(路径急剧折回的地方),这种调整会逐渐回归到零,以避免出现奇异点。这些校正因子减少了过冲,并使参数样条曲线在中等曲率区域的速度更加稳定。

δ i = H ( Δ i + , Δ i − ) ( θ / sin ⁡ ( θ ) ) × { 1 θ ≤ π / 2 1 − ( 2 θ / π − 1 ) 4 θ > π / 2 (7) \delta_i = H(\Delta_{i}^{+}, \Delta_i^{-})(\theta / \sin(\theta)) \times \left\{\begin{matrix} 1 & \theta \leq \pi/2 \\ 1 - (2\theta/\pi - 1)^{4} & \theta > \pi/2 \end{matrix}\right. \tag{7} δi=H(Δi+,Δi)(θ/sin(θ))×{11(2θ/π1)4θπ/2θ>π/2(7)

对于输出位置(x,y)处图像 I k I_k Ik 在区间 [k…k+1] 上的累积模糊,我们求解一个满足四个约束条件的参数化二维三次样条路径 ρ ( x , y , t ) \rho(x,y,t) ρ(x,y,t)

  • ρ ( x , y , 0 ) = ( x , y ) \rho(x, y, 0) = (x, y) ρ(x,y,0)=(x,y)
  • ρ ( x , y , 1 ) = ( x , y ) + Δ i + ( x , y ) \rho(x, y, 1) = (x, y) + \Delta_i^{+}(x, y) ρ(x,y,1)=(x,y)+Δi+(x,y)
  • ρ ′ ( x , y , 0 ) = δ i ( ρ ( x , y , 0 ) ) \rho'(x, y, 0) = \delta_i(\rho(x, y, 0)) ρ(x,y,0)=δi(ρ(x,y,0))
  • ρ ′ ( x , y , 1 ) = δ i + 1 ( ρ ( x , y , 1 ) ) \rho'(x, y, 1) = \delta_{i+1}(\rho(x, y, 1)) ρ(x,y,1)=δi+1(ρ(x,y,1))

然后,我们通过在参数空间中均匀采样来沿着这条路径累积模糊,并对每个样本的权重进行归一化,以补偿图像空间中的非均匀空间采样,从而确保沿着运动轨迹的空间亮度均匀。在突发序列的端点处,我们通过尝试保持流经这些端点的流的曲率来外推第一帧和最后一帧之外的流。如图 7 所示:如果 “C” 表示突发序列中的最后一帧,那么在 “下一” 帧 D 处的运动轨迹位置是通过将 A 点关于平分 BC 的直线进行反射(构造出 A’)来外推的,然后将 CA’ 的大小限制为 | BC | 以形成 CD。接着,从点 {B,C,D} 推断出 C 处的流。

帧累积, 在实际中,模糊是通过多次遍历进行累积的:每对帧进行两次遍历,其权重在一帧和下一帧之间呈线性下降。对于在帧 I i I_{i} Ii 中位置为 p 的输出像素,通过使用上述的流样条来确定在相对时间 t 下帧 I i I_{i} Ii 中的投影位置 p’,从而累积帧 I i I_{i} Ii I i + 1 I_{i+1} Ii+1 之间的模糊。对于突发序列中的 K 对帧,计算 2K 次这样的遍历(K 次向前,K 次向后)并求和以得到最终的模糊结果。对于每个时间方向:

I ( x , y ) = ∑ i = 0 K − 1 ∑ n = 0 N − 1 I i ( ρ i ( x , y , t n ) ) ∣ ρ i ′ ( x , y , t n ) w n ∣ (8) I(x, y) = \sum_{i=0}^{K-1}\sum_{n=0}^{N-1} I_{i}(\rho_i(x,y,t_n)) \left | \rho_i^{'}(x,y,t_n) w_n \right| \tag{8} I(x,y)=i=0K1n=0N1Ii(ρi(x,y,tn)) ρi(x,y,tn)wn (8)

软伽马色彩空间。非常明亮的高光(例如汽车前灯)往往会使相机传感器饱和,即使在线性色彩空间中进行处理,其模糊的运动轨迹也会变得不真实地暗淡。这种截断是由于输入传感器的有限范围造成的,并且当被截断的输入高光能量分布(即合成地进行运动模糊)在许多输出像素上时,亮度损失会变得明显。

为了解决这个限制,我们在一个有意的非线性色彩空间中处理模糊,在区间 [0…1] 上使用一个可逆的类似伽马的 “软伽马” 函数

这会朝着与线性到 sRGB 色彩转换相反的方向调整亮度曲线,强调高光而不压暗阴影,使得非线性帧能够以可用的保真度存储在 16 位缓冲区中。在创建时,使用 k = 3.0 k=3.0 k=3.0 的值将该函数应用于扭曲下采样的 2 倍缓冲区,并且在累积所有帧的模糊后(通过再次应用 k = 1.0 / 3.0 k=1.0/3.0 k=1.0/3.0)进行反转。

γ s ( v ) = v v + ( 1 − v ) k ≈ v k (9) \gamma_s(v) = \frac{v}{v + (1-v)k} \approx v^{k} \tag{9} γs(v)=v+(1v)kvvk(9)

Compositing

合成的模糊图像以半分辨率计算,以满足设备内存和延迟约束。因此,即使模糊图像中完全对齐的零运动区域,由于以半分辨率计算的结果进行上采样,也会丢失细节。为了保留细节,我们将模糊图像与最大锐度的常规曝光图像进行合成,在我们期望物体清晰的地方。有两类内容需要这种保护:1)静止的场景内容;2)语义上重要且几乎没有移动的主体。

对于第一类,我们生成一个在整个帧对集合中运动非常小的像素的掩码。

  • (1)计算所有帧对中每个像素的最大运动幅度 |𝐹|。
  • (2)计算一个参考运动幅度 |𝐹|_ref,它实际上是 |𝐹| 中所有像素的稳健最大值(即第 99 百分位数)。
  • (3)重新缩放并截断每个像素的运动幅度,使得任何低于𝛼|𝐹|ref 的值被映射为 0,任何高于𝛽|𝐹|ref 的值被映射为 1。我们分别使用 0.16 和 0.32 作为𝛼和𝛽的值。

M f l o w = ∣ F ∣ − α ∣ F ∣ r e f β ∣ F ∣ r e f − α ∣ F ∣ r e f M_{flow} = \frac{|F| - \alpha |F|_{ref}}{\beta |F|_{ref} - \alpha |F|_{ref}} Mflow=βFrefαFrefFαFref

  • (4) 使用清晰图像作为引导应用双边模糊,以确保在 M f l o w M_{flow} Mflow 中的任何边缘对应于真实边缘,并在流场不可靠的地方(例如,像天空这样的均匀或无纹理区域)最小化伪影

第二类更加复杂,它背离了光学运动模糊的物理行为而倾向于美学。例如,如果一个场景中有两个主体以不同的轨迹移动,那么就不可能同时在两者上都清晰对齐。即使是单个主体,由于主体内部的运动(例如,面部表情的变化等)也可能无法对齐。一个主体面部模糊的图像是(不好的)模糊图像。我们的解决方案是重用前面描述的语义面部信号,修改为只包括在对齐的参考帧中具有低平均特征运动的面部。

最终的效果图例:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/909751.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux云计算 |【第五阶段】PROJECT3-DAY1

主要内容&#xff1a; 跳板机&#xff08;堡垒机&#xff09;的概念、部署JumpeServer 一、跳板机&#xff08;堡垒机&#xff09;的概念 跳板机&#xff08;Jump Server 或 Bastion Host&#xff09;是一种网络安全设备或服务器&#xff0c;也称堡垒机&#xff0c;是一类可作…

一款根据图片内的文字,把图片分类的软件

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

文件操作:Xml转Excel

1 添加依赖 Spire.Xls.jar <dependency><groupId>e-iceblue</groupId><artifactId>spire.xls</artifactId><version>5.3.3</version></dependency>2 代码使用 package cctd.controller;import com.spire.xls.FileFormat; im…

从底层技术到实际应用:Claude与ChatGPT谁更适合学术写作?

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 使用大模型智能AI进行学术写作和科研已经成为学者、研究人员和高校学生的强大助手。Anthropic的Claude和OpenAI的ChatGPT作为该领域的两个主要参与者&#xff0c;正在不断发展和完善。随…

linux 磁盘配额 quota

增加一个facl的的知识点&#xff1a; linux中默认的文件系统支持facl&#xff0c;如果是新挂载的分区&#xff0c;则不支持facl应用。需要在挂载文件系统时使用-o acl选项来启用facl支持。如下图显示 在/etc/fstab添加defaults,acl 1.启用磁盘配额功能&#xff1a;修改/etc/f…

qt QMessageBox详解

1、概述 QMessageBox是Qt库中的一个类&#xff0c;它用于在图形用户界面&#xff08;GUI&#xff09;程序中显示消息框。消息框是一种用于向用户显示信息、警告、错误或询问用户确认的对话框。QMessageBox可以显示文本、图标和按钮&#xff0c;并允许自定义按钮的文本和功能。…

qt QResizeEvent详解

1、概述 QResizeEvent是Qt框架中用于处理窗口或控件大小变化事件的一个类。当用户调整窗口或控件的尺寸时&#xff0c;Qt会生成一个QResizeEvent事件&#xff0c;并将其发送到相应的窗口或控件。开发者可以通过重载窗口或控件的resizeEvent()方法来响应这个事件&#xff0c;并…

黑科技安利 | 超好用的背景去除软件

背景 如果一幅主图里存在其它颜色的背景色调&#xff0c;希望变成白色或者特定色彩/背景图片 推荐 1. Microsoft PowerPoint里自带的“清除背景”/设置透明色 这个功能超级好用&#xff0c;基本满足我日常涉及的90%的清除白色背景的需求 2. https://www.remove.bg/ 这个网…

PyCharm中pylint安装与使用

目录 1. 安装插件2. pycharm中使用该功能3. 命令行使用 1. 安装插件 然后重启 2. pycharm中使用该功能 3. 命令行使用 前提是先 pip install pylint pylint demo01.py下面红框内容的意思是&#xff0c;得到10分/ 满分10分&#xff0c;上次运行获得8.33分&#xff0c;经调整…

Git遇到“fatal: bad object refs/heads/master - 副本”问题的解决办法

Git遇到“fatal: bad object refs/heads/master - 副本”问题的解决办法 起源 让我们从一个常见的Git错误开始&#xff1a; fatal: bad object refs/heads/master - 副本这个错误提示通常意味着Git在引用&#xff08;ref&#xff09;中发现了不一致或损坏的数据。引用是Git用…

Android13 系统/用户证书安装相关分析总结(三) 增加安装系统证书的接口遇到的问题和坑

一、前言 接上回说到&#xff0c;修改了程序&#xff0c;增加了接口&#xff0c;却不知道有没有什么问题&#xff0c;于是心怀忐忑等了几天。果然过了几天&#xff0c;应用那边的小伙伴报过来了问题。用户证书安装没有问题&#xff0c;系统证书(新增的接口)还是出现了问题。调…

一文速学-知识图谱从零开始构建实战:知识图谱搭建构架实践-知识展示

前言 系列文章的上一篇我们已经进行了UIE抽取&#xff0c;非结构化知识抽取整理&#xff0c;转化。但是目前仅在于通过分词提取实体、属性、关系&#xff0c;还没有通过大模型来进一步高效率高精准度来提取这些关键字段&#xff0c;因此后续我们都整个流程优化空间都很大&…

自由学习记录(19)

unity核心也算是看完了吧&#xff0c;但觉得的确是少了点东西&#xff0c;之后再看mvc框架&#xff0c;和网络开发&#xff0c;&#xff0c;感觉有必要想想主次顺序了&#xff0c;毕竟在明年的3月之前尽量让自己更有贴合需求的能力 先了解一些相关概念&#xff0c;不用看懂&am…

「Mac畅玩鸿蒙与硬件22」鸿蒙UI组件篇12 - Canvas 组件的动态进阶应用

在鸿蒙应用中&#xff0c;Canvas 组件可以实现丰富的动态效果&#xff0c;适合用于动画和实时更新的场景。本篇将介绍如何在 Canvas 中实现动画循环、动态进度条、旋转和缩放动画&#xff0c;以及性能优化策略。 关键词 Canvas 组件动态绘制动画效果动态进度条旋转和缩放性能优…

大家知道输电线路微风振动在线监测有哪些先进技术?

特力康TLKS-PMG-WD输电线路微风振动在线监测装置&#xff08;输电线路北斗导线舞动在线监测装置&#xff09;集成了多项先进技术&#xff0c;堪称输电线路监测领域的佼佼者&#xff01;它利用高精度的舞动传感器实时监测导线数据&#xff0c;并通过无线网络发送到监控中心&…

WPF+MVVM案例实战(十七)- 自定义字体图标按钮的封装与实现(ABC类)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1、案例效果1、按钮分类2、ABC类按钮实现1、文件创建2、字体图标资源3、自定义依赖属性4、按钮特效样式实现 3、按钮案例演示1、页面实现与文件创建2、依赖注入3 运…

【算法】(Python)贪心算法

贪心算法&#xff1a; 又称贪婪算法&#xff0c;greedy algorithm。贪心地追求局部最优解&#xff0c;即每一步当前状态下最优选择。试图通过各局部最优解达到最终全局最优解。但不从整体最优上考虑&#xff0c;不一定全局最优解。步骤&#xff1a;从初始状态拆分成一步一步的…

01简介——基于全志V3S的Linux开发板教程笔记

声明&#xff1a;本笔记内容为个人在使用自制的基于全志V3S的Linux开发板的学习笔记文章&#xff0c;仅用于记录学习与开发过程中的问题处理过程、方法操作记录、参考的网络资源等内容。 一、前言 一次偶然的机会&#xff0c;发现了全志V3S这款芯片&#xff0c;基于Cortex-A7内…

【数据库】elasticsearch

1、架构 es会为每个索引创建一定数量的主分片和副本分片。 分片&#xff08;Shard&#xff09;&#xff1a; 将索引数据分割成多个部分&#xff0c;每个部分都是一个独立的索引。 主要目的是实现数据的分布式存储和并行处理&#xff0c;从而提高系统的扩展性和性能。 在创建索…

C6.【C++ Cont】cout的格式输出

目录 1.头文件 2.使用 1.控制宽度和填充 setw函数(全称set field width设置字段宽度) setfill函数(全称Set fill character设置填充字符) 2.控制数值格式 3.控制整数格式 4.控制对齐方式 1.头文件 用cout进行格式化输出前,先引用头文件iomanip(全称input&output m…