论文阅读:Face Deblurring using Dual Camera Fusion on Mobile Phones

今天介绍一篇发表在 ACM SIGGRAPH 上的文章,是用手机的双摄系统来做人脸去模糊的工作。这也是谷歌计算摄影研究组的工作。

快速运动物体的运动模糊在摄影中是一个一直以来的难题,在手机摄影中也是非常常见的问题,尤其在光照不足,需要延长曝光时间的场景。最近几年,我们也看到了图像去模糊领域的巨大进步,不过大多数的图像去模糊方法的算法开销很高,需要依赖很高的算力,同时在处理高分辨率图像时还存在局限于不足。为了实现更轻量,效果更好的图像去模糊算法,文章作者提出了一种新的人脸去模糊方法,这个算法基于手机的双摄系统。当检测到场景中有运动物体的时候,会触发其中一路的参考摄像头,比如超广角,拍摄一张短曝光的图像,同时主摄拍摄一张正常曝光的图像,这样的话,超广角拍摄的图像是清晰的,但是噪声较多(曝光时间端,信噪比低),同时主摄拍摄的图像噪声少,但是会有模糊(曝光时间长,信噪比高)。文章作者用机器学习的模型取对齐两路图像,同时进行融合,最终输出的图像清晰,没有运动模糊。文章开发的算法在谷歌 Pixel 6 上的运行时间开销在 463ms,算法效率很高。文章中的实验,也展示了该算法的优势与鲁棒性。文章作者声称,他们的工作是第一个可以在手机上稳定可靠地在不同运动及光照环境下运行的人脸运动去模糊算法。

文章提出的解决方案建立在下面两个基础之上:

  • 需要有双摄的手机系统,目前主流的手机都有双摄,文章中用到的双摄系统是主摄 W \mathbf{W} W 和超广角 U W \mathbf{UW} UW
  • 能够同步曝光,同步自动白平衡,为了便于两路图像后续的对齐与融合

实际使用的时候,系统会同时拍摄一张正常曝光的主摄图像以及短曝光的超广角图像。这两组图像反映了不同的拍摄视角,不同的噪声水平以及颜色。文章训练一个 CNN 网络,对齐,融合这两路图像的 RAW 图中的人脸区域,得到一张干净清晰的 RAW 格式的人脸区域,融合后的 RAW 图会送入一个标准的图像 ISP 系统做后续的处理。文章作者声称比起同一路的长短曝融合的方法,双摄系统的方法可以做到时间上的对齐,进而可以得到更好的融合效果。

这篇文章使用的主摄 W \mathbf{W} W FOV 是 8 0 ∘ 80^{\circ} 80,超广角 U W \mathbf{UW} UW FOV 是 10 7 ∘ 107^{\circ} 107。主摄和超广角基本是平行并排放置,超广角基本覆盖了主摄的视野。两路图像的分辨率都是 12M,一般来说,超广角 U W \mathbf{UW} UW sensor 的噪声水平会比主摄 W \mathbf{W} W sensor 的噪声水平要高。文章的融合算法,将两路图像作为输入,主摄 W \mathbf{W} W 作为源图像,超广角 U W \mathbf{UW} UW 作为需要融合的图像。当场景中物体运动被检测到,会启动双摄拍摄两路 RAW 图,主摄 W \mathbf{W} W 一路的曝光时间由手机的自动曝光算法确定,超广角一路的曝光时间被设置为主摄一路的 1 / N 1/N 1/N,文章中 N = 2 , 4 N=2, 4 N=2,4

下图展示了文章整个的算法流程:

在这里插入图片描述
首先,将每一路的多帧 RAW 图分别做融合。然后对每一路融合后的 RAW 图结果做人脸检测和物体分割,进而确定人脸区域和需要去模糊的 ROI 区域,将这个区域 crop 出来,对 crop 出来的图像区域做融合,最后将融合后的 crop 区域与原来的 RAW 图进行 blend,再做一些后处理操作,包括锐化,全局以及局部的 tone-mapping 等。

在这里插入图片描述

Pre-processing
  • Fusion ROI and face mask

文章的工作聚焦在人脸区域,文章基于人脸检测,将最大的人脸框进行了一定的扩展,使得最终的 ROI 区域包括了人脸,头发,耳朵等。基于这个扩展的人脸框,文章用一个基于 UNet 的物体分割模型生成一个人脸 mask,并且对区域边缘进行一定的模糊。

  • Color matching

由于两路镜头对应的 sensor 的性质不同,各自融合的图像会有一定的颜色差异,所以文章对两路图像做了一个颜色对齐,首先利用线性空间的颜色转换矩阵,计算一个归一化下的图:

I r e f n = C C M s r c − 1 ⋅ C C M r e f ⋅ I r e f (1) I_{ref}^{n} = CCM_{src}^{-1} \cdot CCM_{ref} \cdot I_{ref} \tag{1} Irefn=CCMsrc1CCMrefIref(1)

C C M CCM CCM 是一个 3 × 3 3 \times 3 3×3 的颜色转换矩阵。

然后再将两路图像的均值进行对齐:

I ^ r e f = I r e f n μ r e f ⋅ μ s r c (2) \hat{I}_{ref} = \frac{I_{ref}^{n}}{\mu_{ref}} \cdot \mu_{src} \tag{2} I^ref=μrefIrefnμsrc(2)

Image Alignment

接下来是图像对齐,文章还是用到了经典的 PWC-Net 训练了一个配准网络,为了适应手机图像的高分辨率,文章对 PWC-Net 做了一定程度改进,主要是通过下采样来提升网络可以 cover 的偏移程度。

F f w d = PWCNet ( ( I s r c ) ↓ , ( I ^ r e f ) ↓ ) ↑ (3) F_{fwd} = \text{PWCNet}((I_{src})_{\downarrow}, (\hat{I}_{ref})_{\downarrow})_{\uparrow} \tag{3} Ffwd=PWCNet((Isrc),(I^ref))(3)

获得位移向量场之后,再通过 warp 就可以得到配准后的图像:

I r e f ′ = W ( I ^ r e f ; F f w d ) (4) I_{ref}' = \mathbb{W}(\hat{I}_{ref}; F_{fwd}) \tag{4} Iref=W(I^ref;Ffwd)(4)

文章中也介绍了对于 PWCNet 的一些轻量化的改进,包括剪枝,量化等操作。

对于遮挡区域的处理,文章也是沿用了一般的配准方法,利用 PWCNet 生成了前向的位移场 F f w d F_{fwd} Ffwd 以及反向的位移场 F b w d F_{bwd} Fbwd。然后通过前向 warp 与反向 warp 之间的误差来确定遮挡区域:

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

Image Fusion

接下来是图像融合,文章中也是构建了一个网络模型来实现融合:

I f u s e d = FusionNet ( I s r c , I r e f ′ , M f a c e , M o c c ) + I s r c I_{fused} = \text{FusionNet}(I_{src}, I_{ref}', M_{face}, M_{occ}) + I_{src} Ifused=FusionNet(Isrc,Iref,Mface,Mocc)+Isrc

网络输入的是源图像,配准后的参考图像,分割出来的人脸区域,以及遮挡区域,输出的是融合后的图像。

  • Training data

这种去模糊的图像处理问题,比较困难的一个环节就是训练数据的构建,对于真实场景来说,输入的有模糊图像和参考图像很好获取,但是最终无模糊的 GT 图像很难获得,所以文章中也是用了模拟仿真的方式来构建训练数据集。首先针对静态场景,用主摄和超广角分别拍摄一张清晰图像,作为 GT,然后利用模拟的运动模糊核对 GT 做卷积,得到一张人脸区域是模糊的,背景区域是相对清楚的仿真退化图像。

I s r c = M b l u r ⋅ ( I G T ⊗ k ) + ( 1 − M b l u r ) ⋅ I G T + n (7) I_{src} = M_{blur} \cdot (I_{GT} \otimes k) + (1 - M_{blur}) \cdot I_{GT} + n \tag{7} Isrc=Mblur(IGTk)+(1Mblur)IGT+n(7)

  • Training loss

图像融合网络的训练损失函数是常用的 L1 loss 和 VGG loss

L c o n t e n t = ∥ I f u s e d − I G T ∥ 1 (8) \mathcal{L}_{content} = \left \| I_{fused} - I_{GT} \right \|_{1} \tag{8} Lcontent=IfusedIGT1(8)

L v g g = ∑ j w j ∥ V G G j ( I f u s e d ) − V G G j ( I G T ) ∥ 1 (9) \mathcal{L}_{vgg} = \sum_{j} w_j \left \| VGG_j(I_{fused}) - VGG_j(I_{GT}) \right \|_{1} \tag{9} Lvgg=jwjVGGj(Ifused)VGGj(IGT)1(9)

文章中还增加了一个颜色一致性的损失函数

L c o l o r = ∥ G σ ( I f u s e d ) − G σ ( I G T ) ∥ 1 (10) \mathcal{L}_{color} = \left \| \mathcal{G}_{\sigma}(I_{fused}) - \mathcal{G}_{\sigma}(I_{GT}) \right \|_{1} \tag{10} Lcolor=Gσ(Ifused)Gσ(IGT)1(10)

G σ \mathcal{G}_{\sigma} Gσ 就是一个高斯函数核。

最终的 loss 就是上面几种 loss 的加权和

w content L c o n t e n t + w vgg L v g g + w color L c o l o r (11) w_{\text{content}} \mathcal{L}_{content} + w_{\text{vgg}} \mathcal{L}_{vgg} + w_{\text{color}} \mathcal{L}_{color} \tag{11} wcontentLcontent+wvggLvgg+wcolorLcolor(11)

Image Blending

得到 ROI 区域的融合图像之后,接下来就是将去模糊后的图像与源图像的背景区域融合到一起:

I f i n a l = M b l e n d ⋅ I f u s e d + ( 1 − M b l e n d ) ⋅ I s r c (12) I_{final} = M_{blend} \cdot I_{fused} + (1 - M_{blend}) \cdot I_{src} \tag{12} Ifinal=MblendIfused+(1Mblend)Isrc(12)

M b l e n d M_{blend} Mblend 就是最开始人脸区域,去掉遮挡区域,以及置信度低的配准区域

M b l e n d = min ⁡ ( M f a c e − α M o c c − β M r e p r o j , 0 ) (13) M_{blend} = \min(M_{face} - \alpha M_{occ} - \beta M_{reproj}, 0) \tag{13} Mblend=min(MfaceαMoccβMreproj,0)(13)

M r e p r o j = max ⁡ R , G , B ( ∣ I s r c − I r e f ′ ∣ ) (14) M_{reproj} = \max_{R, G, B} (\left | I_src - I_{ref}' \right | ) \tag{14} Mreproj=R,G,Bmax( IsrcIref )(14)

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

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

相关文章

第十三届蓝桥杯省赛真题 Java C 组【原卷】

文章目录 发现宝藏【考生须知】试题 A: 排列字母试题 B: 特殊时间试题 C: 纸张尺寸试题 D: 求和试题 E : \mathbf{E}: E: 矩形拼接试题 F: 选数异或试题 G: GCD试题 H: 青蛙过河试题 I: 因数平方和试题 J \mathrm{J} J : 最长不下降子序列 发现宝藏 前些天发现了一个巨牛的人…

关于防火墙

文章目录 一、安全技术和防火墙1、安全技术2、防火墙的分类2.1 按保护范围划分2.2 按实现方式划分2.3 按网络协议划分2.3.1 包过滤防火墙2.3.2 应用层防火墙 二、Linux 防火墙的基本认识1、Netfilter2、防火墙工具介绍2.1 Iptables2.2 Firewalld2.2.1 软件包2.2.2 管理工具 2.3…

【超图】白模数据如何与抽屉效果结合,展示白膜内部结构

作者:taco 最近在支持的过程中,客户在看别的项目中,发现白模是可以抽插的。而非单独一个白色模型建筑。那么如何使用SuperMap产品来实现抽插的效果呢?本篇文章结合SuperMap iDesktopX产品以及SuperMap iClient for Cesium产品进行…

大数据开发--01.初步认识了解

一.环境准备 1.使用虚拟机构建至少三台linux服务器 2.使用公有云来部署服务器 二.大数据相关概念 大数据是指处理和分析大规模数据集的一系列技术、工具和方法。这些数据集通常涉及海量的数据,包括结构化数据(如关系型数据库中的表格)以及…

mysql部署(1)单节点安装卸载

以8.0.36版本为例 一、下载安装 1、准备工作 (1)查看系统版本 cat /etc/redhat-release(2)查看是否安装了 MySQL rpm -qa | grep mysql查看是否有安装 mariadb,该软件与 MySQL 数据库有冲突,需要手动卸…

【C++庖丁解牛】继承的概念及定义 | 继承中的作用域 | 继承与友元继承与静态成员 | 复杂的菱形继承及菱形虚拟继承

🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1.继承的概念及定义1.1继…

(2024,EBGAN,扩散,变分近似)通过扩散过程改进基于能量的对抗模型

Improving Adversarial Energy-Based Model via Diffusion Process 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 2. 相关工作 3. 去噪扩散对抗 EBM 3.1. 具有去噪扩散过程…

JavaScript中a++和++a的区别是什么?

在JS中,a 和 a 都是对变量 a进行自增操作,但是他们在执行的行为和结果上有些不同: a (前缀自增): 首先是将a的值增加1,然后返回 a 增加后的值。这意味着,表达式的其余部分使用 a的时候, a 的值…

人大金仓携手中国大地保险上线核心超A系统

2023年底 中国大地保险 卡园三路59号办公室里 一群技术精英们正忙碌着 他们的眼中闪烁着对即将到来的胜利的期待 这是大地保险超A系统 项目上线的关键时刻 也是通过科技创新 引领行业服务新趋势的一场征程 项目现场 一次颠覆:改变传统保险服务模式 超A平…

微信小程序项目实战遇到的问题

我们以学生成绩平台来作为例子。这是我们想得到的效果。 以下是完整代码: index.js // index.js Page({//页面的初始数据data: {hello: 欢迎进入微信小程序的编程世界,score: 80,userArray: [{name: 张三,score: [66, 77, 86, 70, 90]},{name: 李四,score: [88, 7…

中国传统游戏-幻方-c/c++实现

幻方(Magic Square)是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。 幻方也是一种中国传统游戏。旧时在官府、学堂多见。它是将从一到若干个数的自然数排成纵横各为若干个数的正方形,使在同一行、同…

由浅到深认识Java语言(2):Java语言概述

该文章Github地址:https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.c…

CSS案例-4.padding导航栏练习

效果 相关数据: 上边框:3px,颜色#ff8500 下边框:1px,颜色#edeef0 背景颜色:#fcfcfc 高度:41px 内边距20px 字体颜色#4c4c4c 知识点 盒子边框border 属性 作用 border-width 定义边框粗细,单位px border-style 边框的样式 border-color 边框颜色 边框样式

拿捏指针(三)

✨✨欢迎👍👍点赞☕️☕️收藏✍✍评论 个人主页:秋邱博客 所属栏目:C语言 (感谢您的光临,您的光临蓬荜生辉) 前言 在这之前我们学习了《拿捏指针(一)》,《拿…

Ansible基本介绍与模块使用

目录 引言 一、Ansible简介 (一)基本概述 (二)主要特点 二、Ansible安装及基本组件 (一)yum安装 (二)编译安装 (三)基本配置信息 1.主配置文件 2.主…

【Linux】自动化构建工具-make/Makefile

个人主页 : zxctscl 如有转载请先通知 文章目录 1. 前言2. 认识make/Makefile3. 了解make/Makefile原理3.1 依赖关系和依赖方法3.2 make检测的顺序3.3 PHONY:XXX 4. makefile内置符号 1. 前言 在上一篇中已经了解了【Linux】编译器-gcc/g使用,这次来一起…

01|模型IO:输入提示、调用模型、解析输出

Model I/O 可以把对模型的使用过程拆解成三块,分别是输入提示(对应图中的Format)、调用模型(对应图中的Predict)和输出解析(对应图中的Parse)。这三块形成了一个整体,因此在LangCha…

idea将非UTF-8的properties修改为UTF-8编码的文件

需求背景 由于项目初始化时,properties文件的编码格式为ASCII编码格式,此时用idea打开该文件会默认展示UTF-8的编码内容,其中汉字可以正常展示,但是使用notepad打开却依旧时ASCII编码格式 idea配置 打开idea-setting-editor-f…

TCP - 传输控制协议

TCP - 传输控制协议 是一种面向连接的可靠传输协议。 特点: TCP是面向连接(虚连接)的传输层协议。 每一条TCP连接有且只能有两个端点。 可靠、有序、无丢弃和不重复。 TCP协议提供全双工通讯。 发送缓存 存放发送方TCP准备发送的数据。T…

Springboot笔记-01

简化spring应用开发,约定大于配置 简化Spring应用开发的一个框架; 整个Spring技术栈的一个大整合; J2EE开发的一站式解决方案; 优点: 快速创建独立运行的spring项目以及于主流框架集成 使用嵌入式的Servlet容器&#x…
最新文章