论文阅读--Efficient Hybrid Zoom using Camera Fusion on Mobile Phones

news2024/11/20 7:22:30

这是谷歌影像团队 2023 年发表在 Siggraph Asia 上的一篇文章,主要介绍的是利用多摄融合的思路进行变焦。

单反相机因为卓越的硬件性能,可以非常方便的实现光学变焦。不过目前的智能手机,受制于物理空间的限制,还不能做到像单反一样的光学变焦。目前主流的智能手机,都是采用多摄的设计,一般来说一个主摄搭配一个长焦,为了实现主摄与长焦之间的变焦,目前都是采用数字变焦的方式,数字变焦相比于光学变焦,细节会损失很多。这篇文章提出一种混合变焦的方法,就是拍摄的时候,同时获取主摄和长焦的图像,然后利用机器学习模型将两张图像对齐,并且将长焦的细节迁移到主摄上。同时,这篇文章也设计了一种自适应的融合方法,去处理两个镜头的景深差异,遮挡,匹配误差等问题,为了尽量减少两个镜头之间的域差异,文章作者还设计了一个双目的采集系统,获取真实图像的输入和GT,用于有监督的训练。最终,这篇文章的方法,可以在手机上实现对 12M 像素的图像处理耗时在 500ms 左右,相比其它 SOTA 方法,在真实场景下的效果更好。

HYBRID ZOOM SUPER-RESOLUTION

文章将主摄的图像称为 W \mathbf{W} W,长焦的图像称为 T \mathbf{T} T

这篇文章的目标是设计一个高效的算法系统,能够运行在手机设备上。由于手机设备的限制,耗时耗内存的大模型无法使用,所以需要对整个算法流程进行精细的设计。整个算法流程如图 3 所示。当用户按下拍照按钮的时候,算法系统会同时拍摄两张图像。首先利用一个粗粒度的匹配算法,将主摄图像 W \mathbf{W} W 和长焦图像 T \mathbf{T} T 对齐,然后后面再接一个局部稠密的匹配算法,比如光流。接下来,文章作者采用 UNet 模型将从 W \mathbf{W} W 中 crop 出来的图像和长焦图像 T \mathbf{T} T 中的亮度通道进行融合。最后,利用一个自适应的融合算法,将景深差异,遮挡,匹配误差等考虑进去,将融合后的图像重新贴回主摄图像 W \mathbf{W} W。整个算法系统的算法模块都尽量轻量化,以保证整个系统的效果和效率。

在这里插入图片描述

Image Alignment

Coarse alignment:文章首先将 W \mathbf{W} W 进行裁剪,让其与 T \mathbf{T} T 的 FOV 基本一致,然后将裁剪后的图像利用 bicubic 的方法上采样,让两张图像的尺寸保持一致,然后作者估计了一个 2D 的转换矩阵,将裁剪后的上采样图像与 T \mathbf{T} T 进行对齐,这个变换后的图像称为 I s r c I_{src} Isrc,同时,文章也将 T \mathbf{T} T 的颜色,利用一个颜色对齐的方式,与 I s r c I_{src} Isrc 对齐,颜色对齐后的 T \mathbf{T} T 图像称为 I r e f I_{ref} Iref

Dense alignment:做完粗对齐之后,文章接下来要做一个精对齐,需要用到稠密的光流,文章作者利用 PWC-Net 去估计 I s r c I_{src} Isrc I r e f I_{ref} Iref 之间的稠密光流,先对 I s r c I_{src} Isrc I r e f I_{ref} Iref 做一个下采样到 384 × 512 384 \times 512 384×512,然后利用 PWC-Net 估计其光流,然后将估计得到光流图上采样回原始图像尺寸。为了加速,文章中将 PWC-Net 进行了剪枝,将一些运算复杂度高的模块去除了。

Image Fusion

为了保持 W \mathbf{W} W 的颜色,文章在亮度空间进行融合,文章作者构建了一个 5 层的 UNet,将两路图像的亮度通道输入网络,此外还有前面光流估计输出的遮挡图也输入网络,最终输出得到一个灰度图像。然后这个输出的灰度图像 Y 与 UV 通道一起,做一个颜色转换,得到最终的 RGB 图像。

Adaptive Blending

前面基于 AI 的配准对齐和融合模型对大部分场景都能取得不错的效果,但是依然会有一些场景可能会在输出结果上看到明显的 artifacts。由于景深差异,遮挡,以及误匹配。因此,文章作者设计了一个策略来自适应地对 Y s r c Y_{src} Ysrc 以及 Y f u s i o n Y_{fusion} Yfusion 进行融合,这个策略就是将 defocus map,occlusion map,flow uncertainty map 以及 alignment rejection map 最终统一成一个 alpha mask,然后基于这个 alpha mask 做融合。具体框架如图 4 所示:

在这里插入图片描述

Narrow DoF on T \mathbf{T} T 一般来说,长焦的景深比主摄要小,因为一般来说景深和焦距成反比,焦距越长,景深会越浅,从论文中的图 2 可以看到,长焦的离焦区域比主摄要模糊,如果将离焦区域直接融合,会使最终的图像反而变得模糊,所以文章设计了一种方法,将 defocus map 计算出来,作为融合的引导信息。

  • Defocus map:为了估计出 defocus map,首先需要知道对焦的中心区域,同时需要知道图像中的像素相对对焦中心区域的距离,也就是深度信息,因为主摄和长焦镜头基本是平行的,根据双目视觉的测距原理,两路图像中的光流大小与视差及空间深度是成正比的。基于这个假设,文章作者提出了一种估计 defocus map 的算法,如图 5 所示。首先,根据相机的自动对焦模块,获得图像中的对焦区域 ROI,一般是一个矩形区域。然后,基于双目匹配的原理,可以认为光流反映了深度信息,进而可以假设对于静态场景来说,像素在同样的深度面上,有近似的光流。为了找到这个对焦中心,文章作者用 K-means 聚类算法对光流信息进行聚类,然后选择这个聚焦中心 x f x_f xf 作为最大聚类的中心。再利用如下的表达式,计算不同像素的光流与这个聚类中心的相对深度:

M d e f o c u s ( x ) = sigmoid ( ∥ F f w d ( x ) − F f w d ( x f ) ∥ 2 2 − γ σ f ) (1) \mathbf{M}_{defocus}(\mathbf{x}) = \text{sigmoid}(\frac{ \left \| F_{fwd}(\mathbf{x}) - F_{fwd}(\mathbf{x}_f) \right \|_{2}^{2} - \gamma}{\sigma_f}) \tag{1} Mdefocus(x)=sigmoid(σfFfwd(x)Ffwd(xf)22γ)(1)

F f w d F_{fwd} Ffwd 是前面计算的光流信息, γ \gamma γ 控制光流位移的阈值,让对焦区域容许一定的位移变化, σ f \sigma_{f} σf 控制 defocus map 的平滑程度。

  • Occlusion map:对于某些场景, W \mathbf{W} W T \mathbf{T} T 之间可能因为遮挡,存在有些区域不能在两路图像中都存在的情况,如果将这些区域进行融合,可能会产生 artifacts,所以文章作者计算了一个 Occulusion map 作为引导:

M o c c ( x ) = min ⁡ ( s ∥ W ( W ( x ; F f w d ) ; F b w d ) − x ∥ 2 , 1 ) (2) \mathbf{M}_{occ}(\mathbf{x}) = \min (s \left \| \mathbb{W}(\mathbb{W}(\mathbf{x}; F_{fwd});F_{bwd}) - \mathbf{x} \right \|_{2}, 1) \tag{2} Mocc(x)=min(sW(W(x;Ffwd);Fbwd)x2,1)(2)

其中, W \mathbb{W} W 表示双线性 warp 操作, x \mathbf{x} x 表示原始图像的二维坐标,尺度因子 s 控制 occlusion map 的强度。上面这个式子的原理,就是如果一个点在两张图像中都有,那么经过两次 warp 之后,这个点的坐标应该是保持不变的。

  • Flow uncertainty map:因为稠密的光流匹配是一个非常病态的问题,文章中将 PWC-Net 的输出做了扩展,输出了一个光流的置信度 map,这个置信度输出的是每个像素的光流向量的拉普拉斯分布,如下所示:

S ( x ) = exp ⁡ ( log ⁡ ( V a r x ( x ) ) ) + exp ⁡ ( log ⁡ ( V a r y ( x ) ) ) (3) \mathbf{S}(\mathbf{x}) = \sqrt{\exp(\log(Var_x(\mathbf{x}))) + \exp(\log(Var_y(\mathbf{x})))} \tag{3} S(x)=exp(log(Varx(x)))+exp(log(Vary(x))) (3)

M f l o w ( x ) = min ⁡ ( S ( x ) , s m a x ) / s m a x (4) \mathbf{M}_{flow}(\mathbf{x}) = \min(\mathbf{S(\mathbf{x}), s_{max}}) / s_{max} \tag{4} Mflow(x)=min(S(x),smax)/smax(4)

  • Alignment rejection map:对于配准异常区域的引导信息,文章作者也构建了一个 map,简单来说,就是将配准后的两张图的分成若干个 local patch,对每个 local patch,分别计算均值,然后对每个 local patch 里的像素,减去对应 patch 的均值之后,比较两个像素之间的差异: P δ = ( P s r c − μ s r c ) − ( P ~ r e f − μ r e f ) P_{\delta} = (P_{src} - \mu_{src}) - (\tilde{P}_{ref} - \mu_{ref}) Pδ=(Psrcμsrc)(P~refμref)

M r e j e c t ( x ) = 1 − exp ⁡ ( − ∥ P δ ( x ) ∥ 2 2 / ( σ s r c 2 ( x ) + ϵ 0 ) ) (5) \mathbf{M}_{reject}(\mathbf{x}) = 1 - \exp \left( -\left \| P_{\delta }(\mathbf{x}) \right \|_{2}^{2} / (\sigma_{src}^{2}(\mathbf{x}) + \epsilon_{0}) \right) \tag{5} Mreject(x)=1exp(Pδ(x)22/(σsrc2(x)+ϵ0))(5)

其中, σ s r c 2 ( x ) \sigma_{src}^{2}(\mathbf{x}) σsrc2(x) 表示 P s r c P_{src} Psrc 的方差, ϵ 0 \epsilon_{0} ϵ0 用来控制容许的误差。

最后的融合 map 由如下的式子求得:

M b l e n d = max ⁡ ( 1 − M o c c − M d e f o c u s − M f l o w − M r e j e c t , 0 ) (6) \mathbf{M}_{blend} = \max(1 - \mathbf{M}_{occ} - \mathbf{M}_{defocus} - \mathbf{M}_{flow} - \mathbf{M}_{reject}, 0) \tag{6} Mblend=max(1MoccMdefocusMflowMreject,0)(6)

I f i n a l = u n c r o p ( M b l e n d ⊙ I f u s i o n + ( 1 − M b l e n d ) ⊙ I f u s i o n ) (7) I_{final} = uncrop(\mathbf{M}_{blend} \odot I_{fusion} + (1 - \mathbf{M}_{blend}) \odot I_{fusion}) \tag{7} Ifinal=uncrop(MblendIfusion+(1Mblend)Ifusion)(7)

LEARNING FROM DUAL CAMERA RIG CAPTURES

最后,介绍一下文章的训练数据是怎么构建的,对于 low-lelve 的 CV 任务来说,训练数据的构建一直是个问题,如果用仿真退化的方式构造数据,可能存在域差异的问题。所以文章作者设计了一个采集数据的方式,用实际采集的数据作为训练数据。具体装置如下图所示:

在这里插入图片描述

文章中,将两部手机平行放置,这样可以同时采集到两部手机的主摄和长焦图像,这两部手机,一部可以称为主机,一部称为副机,训练的时候,主机的主摄和副机的长焦图像作为输入,而主机的长焦图像作为GT,这样既模拟了实际的两路图像,又有了实采的 GT 图像,而在实际推理的时候,可以直接将其中一部手机的主摄和长焦作为输入即可。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《洛基第二季》:多元宇宙的奇幻之旅

在浩瀚无垠的影视宇宙中,有一部剧如璀璨星辰般耀眼,那就是备受期待的《洛基第二季》。该剧由贾斯汀本森和艾伦穆尔黑德执导,汤姆希德勒斯顿、索菲娅迪马蒂诺、欧文威尔逊等主演,于2023年10月上线。 这部剧延续了第一季的故事情节&…

关于 pnpm monorepo 项目中 TS2742 Error 的 workaround

最近我在使用 pnpm 作为包管理器开发一个 monorepo 项目,从个人体验来说,在 monorepo 项目中,pnpm 确实要比 yarn classic 用得舒心,最让我欣喜的是 pnpm 对 workspace 协议的支持度很好;另外感受比较明显的一点就是&a…

《Windows API每日一练》5.4 键盘消息和字符集

本节我们将通过实例来说明不同国家的语言、字符集和字体之间的差异,以及Windows系统是如何处理的。 本节必须掌握的知识点: 第31练:显示键盘消息 非英语键盘问题 字符集和字体 第32练:显示默认字体信息 第33练:创建逻…

软考高级论文真题“论大数据lambda架构”

论文真题 大数据处理架构是专门用于处理和分析巨量复杂数据集的软件架构。它通常包括数据收集、存储、处理、分析和可视化等多个层面,旨在从海量、多样化的数据中提取有价值的信息。Lambda架构是大数据平台里最成熟、最稳定的架构,它是一种将批处理和流…

静态文件及模板

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 1 静态文件 动态Web应用也会需要静态文件,通常是CSS和JavaScript文件。Flask可以向已经配置好的Web服务器提供静态文件,只要…

AI大模型企业应用实战(18)-“消灭”LLM幻觉的利器 - RAG介绍

大模型在一定程度上去改变了我们生活生工作的思考的方式,然后也越来越多的个人还有企业在思考如何将大模型去应用到更加实际的呃生产生活中去,希望大语言模型能够呃有一些更多企业级别生产落地的实践,然后去帮助我们解决一些业务上的问题。目…

大模型续写评测

环境准备 通过remote-ssh连接云AI服务器,配置文件如下,供参考 # Read more about SSH config files: https://linux.die.net/man/5/ssh_config Host deepseekv1HostName rootconnect.bjc1.seetacloud.comUser rootPort 52984Password xxx # 密码从申请…

国产数据库 - 内核特性 - CloudberryDB中的Runtime Filter

国产数据库 - 内核特性 - CloudberryDB中的Runtime Filter 今年5月份GreenPlum官方将GitHub仓库代码全部删除,各个分支的issues和bugs讨论等信息全部清除,仅将master分支代码进行归档。对于国内应用GPDB的用户来说,这是一个挑战性事件&#x…

JWT介绍及其基本使用

JWT介绍及其基本使用 官网:https://jwt.io/ 什么是JWT 全称:JSON Web Token(JSON Web令牌) 一个开放标准(RFC 7519) ,它定义了一种紧凑和自包含的方式, 用于作为 JSON 对象在各方之间安全地传输信息。此信…

捷云等保一体机 产品服务一站式等保合规交付解决方案

等保2.0的变化 2019 年 5 月 13 日,网络安全等级保护制度 2.0 国家标准(简称“等保 2.0”)正式发布,将等保 2.0 基本要求、测评要求、安全设计技术要求框架统一为安全管理中心支持下的三重防护结构框架。定级对象在按照等保 2.0 …

任务5.1 初识Spark Streaming

实战概述:使用Spark Streaming进行词频统计 1. 项目背景与目标 背景: Spark Streaming是Apache Spark的流处理框架,用于构建可伸缩、高吞吐量的实时数据处理应用。目标: 实现一个实时词频统计系统,能够处理流式数据并统计文本中的单词出现频…

DP:二维费用背包问题+似包非包

二维费用的背包问题&#xff1a;大多以01背包为基础&#xff0c;存在两个限制条件&#xff01; 一、一和零 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public: //需要满足两个条件的我们称之为二位费用的背包问题int findMaxForm(vector<string>&…

在 IntelliJ IDEA 中使用 Java 和 Selenium 模拟 Chrome 浏览器教程

在 IntelliJ IDEA 中使用 Java 和 Selenium 模拟 Chrome 浏览器教程 1. 前言2. 环境准备3. 关闭谷歌自动更新通过服务禁用更新服务通过任务计划程序禁用更新任务 4. 项目添加 Maven 依赖项5. 编写自动化脚本6. 项目运行效果7. 代码示例8.常用方法示例页面请求定位标签获取内容操…

Python低溫半导体电子束量子波算法计算

&#x1f3af;要点 &#x1f3af;任意维度求解器&#xff0c;绘制三维投影结果 | &#x1f3af;解二维静电场、静磁场 | &#x1f3af;狄利克雷、诺依曼条件几何矩阵算子 | &#x1f3af;算法模拟低溫半导体材料 | &#x1f3af;计算曲面达西流 | &#x1f3af;电子结构计算和…

学习VXLAN -- 报文结构、原理和配置

目录 VXLAN背景什么是VXLANVXLAN的优势VXLAN报文结构一些特定名词BDVBDIFVAPVSIVSI-InterfaceAC VXLAN的实现原理图VXLAN MAC地址表项MAC地址动态学习 VXLAN隧道VXLAN隧道工作模式L2 GatewayIP Gateway VXLAN隧道的建立与关联VXLAN隧道建立的方式VXLAN对到与VXLAN关联的方式 配…

系统思考与创新解决

圆满结束了为期两天的《系统思考》课程。在这次学习中&#xff0c;大家积极使用系统环路图来分析并呈现跨部门的业务协同问题&#xff0c;以及探讨了推动成长环路背后的限制因素。这不仅增强了团队之间的理解和合作&#xff0c;也帮助我们一起识别阻碍组织发展的关键挑战。期待…

obsidian中用check list 打造待办清单

背景 在快节奏的现代生活中&#xff0c;有效管理个人时间和任务成为提升生活与工作效率的关键。 Obsidian&#xff0c;作为一款强大的知识管理和笔记应用&#xff0c;通过其丰富的插件生态&#xff0c;为我们提供了高度自定义的任务管理解决方案。本文旨在详细介绍如何在Obsid…

AI应用带你玩系列之SadTalker

前段时间我刷微信视频&#xff0c;我无意间点开了一个&#xff0c;画面缓缓展开&#xff0c;是一幅精致的水墨画&#xff0c;画中人物皆是古代装束&#xff0c;衣袂飘飘&#xff0c;仿佛能闻到墨香。然而&#xff0c;这宁静的画面突然被打破了&#xff0c;画中的人物开始动了起…

自动驾驶仿真Carla -ACC功能测试

我将详细说明如何使用Carla进行ACC&#xff08;自适应巡航控制&#xff09;测试&#xff0c;确保每个步骤贴合实际的Carla自动驾驶仿真标准&#xff0c;并提供相应的代码示例。 使用Carla进行ACC测试的步骤&#xff1a; 1. 环境设置和启动Carla 首先&#xff0c;确保你已经安装…

在vue项目中集成cesium

首先创建一个新的vue项目 安装vite中cesium插件 https://github.com/nshen/vite-plugin-cesium 安装插件 npm i cesium vite-plugin-cesium vite -D配置插件 注释原有样式 修改代码 效果