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

相关文章

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域

mss32.dll文件丢失怎么办? 电脑提示mss32.dll丢失的多种修复方法

《mss32.dll文件丢失怎么办?电脑提示mss32.dll丢失的多种修复方法》最近,很多电脑用户可能遇到了mss32.dll文件丢失的问题,导致一些应用程序无法正常启动,那么,如何修复这个问题呢... 在电脑常年累月的使用过程中,偶尔会遇到一些问题令人头疼。像是某个程序尝试运行时,系统突然弹出一个错误提

电脑提示找不到openal32.dll文件怎么办? openal32.dll丢失完美修复方法

《电脑提示找不到openal32.dll文件怎么办?openal32.dll丢失完美修复方法》openal32.dll是一种重要的系统文件,当它丢失时,会给我们的电脑带来很大的困扰,很多人都曾经遇到... 在使用电脑过程中,我们常常会遇到一些.dll文件丢失的问题,而openal32.dll的丢失是其中比较

python中字符串拼接的几种方法及优缺点对比详解

《python中字符串拼接的几种方法及优缺点对比详解》在Python中,字符串拼接是常见的操作,Python提供了多种方法来拼接字符串,每种方法有其优缺点和适用场景,以下是几种常见的字符串拼接方法,需... 目录1. 使用 + 运算符示例:优缺点:2. 使用&nbsjsp;join() 方法示例:优缺点:3