ECCV 2018论文解读 | 基于三维重建的全新相机姿态估计方法

本文主要是介绍ECCV 2018论文解读 | 基于三维重建的全新相机姿态估计方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

区别于先前的方法都在关注点特征和相机自运动模型,本文作者提出了一个关于 RS 相片形变的比喻:

刚体的 3D template 在 RS 相机中的形变,可以被看作一个非刚体可形变的 3D template 被 GS 相机所捕捉。从而将 2D 照片中的形变等效到了 3D 空间中,进而使用 Shape-from-Template 技术实时重建这个一直处于形变中的虚拟 3D template,最后使用已知的 template 和每一帧重建的形变 template 做 3d-3d 注册,从而求解出了 RS 相机的姿态和瞬时自运动参数。

本文提出的这个等效比喻第一次将 RS 姿态估计问题(RS pose estimation problem)和 非刚体三维重建(Non-rigid scene reconstructution)联系起来。

■ 论文 | Rolling Shutter Pose and Ego-motion Estimation using Shape-from-Template

■ 链接 | https://www.paperweekly.site/papers/2281

■ 源码 | Yizhen Lao / Omar Ait-Aider / Adrien Bartoli

一些关于RS的题外话

Rolling Shutter(卷帘快门, 下文简称 RS)是目前 CMOS 相机的标配快门方式。顾名思义,其快门的模式是一个卷帘式的连续过程。这和在传统 CCD 上的 Global Shutter(GS)快门模式有很大的不同。GS 快门拍出的相片的所有像素都是在同一个时刻曝光的,而 RS 通常则是逐行扫描的。

2f902901e6c18f06af0e00ad5f3bae75b04ac8d1

如果在拍摄瞬间,被拍摄的物体和你的相机都是静止的,RS 拍出来的照片和 GS 当然是一样的。但是我们可以想象一下,如果你在拍摄时移动你的 RS 相机(或者相机静止,被拍物体在运动),那么你拍出来的 RS 照片的每一行其实都处于不同的姿态。一个最直接的弊端就是影像中的形变(distortions, 我们也称之为 RS effect)。

30f6295f4bd35c8fb43e301beef722331c18b37f

上面这幅图(Cenek ALbl, CVPR’16)描述了拍摄瞬间不同的自运动(ego-motion)模式所带来的不同的形变类型。

形变首先影响了你所拍摄照片的美观,但更要命的是,这种形变会严重影响使用了 RS 相片的几何算法的精度。熟悉传统 3D vision 的朋友一定读过 Multiple View Geometry,在 MVG 中所有的相片都有一个前提假设,同一张相片上的每个像素都具有相同的 pose。所以我们可以用经典的 P3P 解相机的绝对姿态,可以用五点或者八点法解相对位置。

现在你应该发现问题了,运动的 RS 相机不符合这个前提假设。一旦这个 RS effect 很强的话,你算什么位置都会出问题的。如果这些基础问题的解都不可靠的话,那你基于 RS 玩的 AR/VR,Structure from Motion (SfM),Visual Odometry (VO) 和 SLAM 都得受到影响。

那又有朋友要问了:”我不用 RS 只用 GS 不就完了嘛,我从来都没听说过这种相机,实际应用中肯定很少用到啊”。实际上呢,大家离 RS 相机都不远,大概就是你到你手机的距离,因为目前市售的智能手机摄像头都装备的是 RS 相机。

为什么大家都要用 RS 相机呢?这就要说到 RS 的几大优势了:便宜、体积小、功耗低、更高帧率。甚至很多不缺钱的平台也都在用 RS 拍东西,比如 Google 街景车(Klingner Bryan, ICCV’13)。

总结一下,RS 的优势让它非常适合在移动平台上应用,比如手机,机器人,无人机,无人车。但是,它的逐行扫描模式又让它非常不适合在移动平台上做应用。

正是基于这个矛盾点,针对 RS 相机在 CV 领域的研究越来越多。从 06 年 ECCV 上一篇关于 RS 的文章拿了 Honorable Mention Award 开始,到今年的 ECCV 为止,共有 33 篇关于 RS 的文章发表在 CVPR/ICCCV/ECCV 上,分别涉及 SfM、Pose Estimation 和 Rectification 等 7 大主题。

d69f4e945d0d543fa913fa038dcafd94bf6a14b5

从 15 年开始,关于 RS 的顶会文章稳定在了每年五篇。但是其实关于 RS 的 CV 应用的坑还有很多很多。像是 SLAM with RS 现在都还没有一个非常 work 的工作出现。目前还没有看到国内高校或者企业的同行们关注 RS 相关的工作,所以也欢迎大家能更关注甚至投身到 RS 的 CV 应用研发中去。

论文介绍

RS Pose and Ego-motion问题

言归正传到这篇论文上,我们在这篇文章中主要解决的是利用已知的 3D 点(又称 template)来估计相机姿态的问题。

在 GS 中,比较有名的有利用三个已知的 3D 点来求解相机 6 dof 的 p3p (Xiao-shan Gao, PAMI’2003)。当然对于 RS,不只有相机姿态的六个参数,还会有拍摄瞬间的 ego-motion(角速度/线速度)的参数。

这就牵扯出了关于 RS ego-motion 模型的假设。如果我们假设相片中的每一行都有一个独立的 pose,那么 n 行的照片就得求解 6n 个参数,这显然是不可能实现的。有一个很好的解决方法是,为快门时间内相机的 ego-motion 设计动力学模型,这就相当于给每一行的 pose 之间设计了时空上的联系,从而有效地降低了要求解得参数个数。

由于快门时间其实非常非常的短,最简单的模型就是匀速模型,假设 RS 相机在快门时间内只做匀速运动(加速度为 0)。 例如在 Omar Ait-Aider, ECCV’06 中:

4219fb5f716802e4f81ce455797a9ee5c92218a7

将一张相片第一行的 pose 设为 [R T],则第 vi 行的 pose 应为:

f2d1fbc84abe4e501d004e33824262696f952468

我们可以发现在这个模型中,对于一个影像来说 ego-motion 也有六个参数,分别是角速度三个和线速度三个。所以对于此模型的 RS pose and ego-motion 问题来说,求解的就是 12 dof 而不是传统 GS pn p问题中的 6 dof 了。

相关研究

关于 RS 的 pose 求解方法可分为两类:

1. 以 Omar Ait-Aider, ECCV’06Ludovic Magerand, ECCV’12 为代表的迭代优化求解方法。此类方法最大的缺点就是慢,也没办法用 ransac 去过滤outliers;

2. 以 R6P (Cenek ALbl, CVPR’15) 为代表的 minimal solution 方法。这个是当年的 CVPR oral,作者首先对上面的匀速模型做了进一步简化。在角速度上,假设了一张相片的 ego-motion 不超过 30 度,因此上文的罗德里德公式只取一级泰勒展开。这个近似让整个 ego-motion 模型的先行性大大提高,他们又进一步对旋转公式进行了线性化,这个 double-linearized model 是这样的:

819f091c9c180448284502c503814ea65e683719

感兴趣的朋友可以去读原论文。总而言之,R6P 是一个需要六对 3D-2D matches 的线性方法,需要用 p3p 初始化,但是运行速度还是非常快,可以结合在 RANSAC 中进行 outlier 剔除。

无形变的 Template 在 RS 相机中形变?还是一个会形变的 Template 被 GS 相机拍下来了?

这一节的标题很长,但也阐述了这篇论文的核心思想:我们认为 RS 相片中物体的 2D 形变,可以看成是这个物体在 3D 中形变了、并被一个 GS 相机给拍下。

没太理解这句话?没关系,我们一步一步来看:

67853dff4962ebada455fb3f1bdbc40f6617828d

一个已知的 3D surface 被我们称作 template,它被一个移动的 GS 相机拍到了。因为是 GS,毫无意外的,照片 I1 里没有任何形变。

7670513d3a59ed2a41ac06f07c98dd4eb6fd3de7

如果同一个 3D surface (template) 被一个移动中的 RS 相机拍到。无意外的,这时候我们拍出来的照片 I2 就是一个形变的 surface 了。

这个时候,我们来做一个思想实验。能不能用一台 GS 相机拍出和 I2 相片一样的形变呢?答案是可以的,只要把那个 3D surface 掰扯变形,我们也可以用 GS 相机拍出一模一样的形变照片:

8972882dd679f4529308fed6125c11d304dea008

但其实这一切都停留在想象之中,这个掰扯的形变完全是虚拟的。因此我们先暂时称这个幻想的形变为 Virtual Deformation。这个等价性在论文中有详细的证明过程。

等等,你为什么要建立这个等价关系?有什么意义呢?

当然是有的,其中一个原因是在非刚体场景三维重建的技术中,有一个叫 shape-from-template(SfT)的成熟方法,它要解决的问题和这个关于 3D template 的形变幻想有很大的相似性,其他的原因会在后面章节提到。

Shape-from-Template

SfT 是一种针对非刚体场景(non-rigid),根据已知 t0 时刻的 3D template 和 tn时刻的 2D image,来恢复 tn 时刻的 3D 模型的技术(Adrien Bartoli, PAMI’2015)。

比如,医生可以在手术前用 CT 或者 NMRI 来获取患者心脏的 3D 模型,但在手术中,医生却无法借助各类大型仪器实时恢复心脏的 3D 形态。对于医生而言,如果仅借助 2D 内窥镜实施微创手术,那无疑对其操作技术存在较高要求。这时候 SfT 就能大显身手了,它通过术前重建 t0 时刻的 3D 模型和手术中内窥镜的 2D 影像,就能实时重建出跳动中的心脏三维模型。

SfT 目前已有高速的 real-time 版本(Toby Collins, ISMAR’15),并且有成熟的 outliers 剔除算法(Daniel Pizarro, IJCV’12)。

好,回到 RS 的问题上来,大家有没有发现 SfT 和上述思想实验的共同点:都有一个 3D template 当 reference,然后每一张照片都对应了一个 template 的形变。因此,我们可以用 3D template 和 RS image 去重建这个 Virtual Deformed Template。

3D-3D Registration

在用 SfT 重建好这个形变了的 template 之后,我们可以使用已知的未形变的 template 做一个递归的 3d-3d registration。这一步给整个 proposed 的方法带来了两个好处:

1. 将之前的 3D-2D 问题转换为了 3D-3D 问题,这对于 RS pose 问题来说可以规避掉大量的退化配置风险,例如 R6P 在 plane scene 上就有 degeneracy case;

2. 在 3d-3d registration 中,可以非常容易地结合各式各样的 ego-motion model,包括匀速的、加速的等等。

整体流程

edc4d6efd961aba0504dd965845375a94af65e20

整个方法非常简单,就分为两步:

1. 用 SfT 重建虚拟形变的 template;

2. 用形变的 template 和未形变的 template 做 3D-3Dregistration,解出 pose 和 ego-motion。


原文发布时间为:2018-09-12

本文作者:劳奕臻

本文来自云栖社区合作伙伴“PaperWeekly”,了解相关信息可以关注“PaperWeekly”。

这篇关于ECCV 2018论文解读 | 基于三维重建的全新相机姿态估计方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/273473

相关文章

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Java中的工具类命名方法

《Java中的工具类命名方法》:本文主要介绍Java中的工具类究竟如何命名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java中的工具类究竟如何命名?先来几个例子几种命名方式的比较到底如何命名 ?总结Java中的工具类究竟如何命名?先来几个例子JD

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

SpringBoot中配置文件的加载顺序解读

《SpringBoot中配置文件的加载顺序解读》:本文主要介绍SpringBoot中配置文件的加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot配置文件的加载顺序1、命令⾏参数2、Java系统属性3、操作系统环境变量5、项目【外部】的ap

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen