PatchMatchStereo可能会需要的Rectification
在稠密三维重建中,rectification可以简化patch match的过程。在双目特征匹配等场景中其实也用得到,看了一下一篇论文叫< A Compact Algorithm for Rectification of Stereo Pairs>,笔记如下。
A Compact Algorithm for Rectification of Stereo Pairs - Paper Reading
Abstract
- 一个线性rectification algorithm
- 用了两个perspective projection matrices
- 对于三维重建可忽略的精度影响
Introduction and motivations
优点: 把stereo correspondences变得简单。因为只需要在平行的轴上搜索就行了。
相机模型和对极几何
给一个世界坐标系下的3D点\(\mathbf{w}=[x y z]^{\top}\)和一个图片上的像素坐标\(\mathbf{m}=\left[ \begin{array}{ll}{u} & {v}\end{array}\right]^{\top}\)。这个从3D到2D的投影叫做perspective projection,是由一个homogeneous coordinates下的线性变换表示的。
Let \(\tilde{\mathbf{m}}=[u v 1]^{\top}\) and \(\tilde{\mathbf{w}}=[x y z 1]^{\top}\), 那么这个变换是: \(\lambda \tilde{\mathbf{m}}=\tilde{\mathbf{P}} \tilde{\mathbf{w}}\)。
这里的矩阵P是可以被分解的,如果用QR分解的话得到:
\[
\tilde{\mathbf{P}}=\mathbf{A}[\mathbf{R} | \mathbf{t}]
\]
这里的 矩阵\(A\)是跟相机内参有关:
\[
\mathbf{A}=\left[ \begin{array}{ccc}{\alpha_{u}} & {\gamma} & {u_{0}} \\ {0} & {\alpha_{v}} & {v_{0}} \\ {0} & {0} & {1}\end{array}\right]
\]
把PPM写成如下形式:
\[
\tilde{\mathbf{P}}=\left[ \begin{array}{c}{\mathbf{q}_{1}^{\top} | q_{14}} \\ {\mathbf{q}_2^{\top}|q_{24}} \\ {\mathbf{q}_{3}^{\top} | q_{34}}\end{array}\right]=[\mathbf{Q} | \tilde{\mathbf{q}}]
\]
在迪尔卡坐标系中,这个投影过程如下:
\[
\left\{\begin{array}{l}{u=\frac{\mathbf{q}_{1}^{\top} \mathbf{w}+q_{14}}{\mathbf{q}_{3}^{\top} \mathbf{w}+q_{34}}} \\ {v=\frac{\mathbf{q}_{2}^{\top} \mathbf{w}+q_{24}}{\mathbf{q}_{3}^{\top} \mathbf{w}+q_{34}}}\end{array}\right.
\]
焦平面(\(focal \ plane\))和视网膜平面(retinal plane)平行,并且包含光心(C)。光心的坐标是:\(\mathbf{c}=-\mathbf{Q}^{-1} \tilde{\mathbf{q}}\)
这样的话\(\tilde{\mathbf{P}}\)可以被重写为:\(\tilde{\mathbf{P}}=[\mathbf{Q} |-\mathbf{Q} \mathbf{c}]\)。
Rectification of Camera matrices
假设一个stereo rig已经被标定了(大概就是两个相机的内外参都知道的意思),那么两个PPM(perspective projection matrices)都已经知道。、
rectification的idea: Define two new PPMs by rotating the old ones around their optical centers until focal planes becomes coplanar, thereby containing the baseline.这种方式可以保证核点在无穷远,所以对极线是平行的。为了得到平行的对极线,基线必须是和两个相机的新的x轴平行。
- [ ] 另外,为了得到一个合理的rectification, conjugate points必须要有一样的垂直坐标系。这个要求新相机要有一样的内参。
总结来说:
- 新的PPM的光心和旧的一样,但是旋转不一样了。
- 两个相机的内参一样
- 所以结果的PPMs只会有光心上的不同,可以被认为一个相机沿着x轴移动了。
两个新的PPMs如下:
\[
\tilde{\mathbf{P}}_{n 1}=\mathbf{A}\left[\mathbf{R} |-\mathbf{R} \mathbf{c}_{1}\right], \quad \tilde{\mathbf{P}}_{n 2}=\mathbf{A}\left[\mathbf{R} |-\mathbf{R} \mathbf{c}_{2}\right]
\]
内参\(A\)是不变的,两个光心\(c_1\)和\(c_2\)和旧的光心一致。
把旋转矩阵由行向量表示:
\[
\mathbf{R}=\left[ \begin{array}{c}{\mathbf{r}_{1}^{\top}} \\ {\mathbf{r}_{2}^{\top}} \\ {\mathbf{r}_{3}^{\top}}\end{array}\right]
\]
分别表示的是\(X, Y and Z\)坐标轴。
- 新的X轴和基线平行: \(r1 = (c1-c2)/||c1-c2||\)
- 新的Y轴和X轴垂直: \(\mathbf{r}_{2}=\mathbf{k} \wedge \mathbf{r}_{1}\) : 这儿的\(k\)是一个随机的向量,我们使它。。。
- 新的Z轴和XY垂直: \(\mathbf{r_3}=\mathbf{r}_{1} \wedge \mathbf{r}_{2}\)
The Rectifying Transformation
- sought: 被寻求的,seek的过去式和过去分词
Conclusion
我们的测试显示不会引入可见的误差。
PatchMatchStereo可能会需要的Rectification的更多相关文章
- 论文阅读(XiangBai——【PAMI2018】ASTER_An Attentional Scene Text Recognizer with Flexible Rectification )
目录 XiangBai--[PAMI2018]ASTER_An Attentional Scene Text Recognizer with Flexible Rectification 作者和论文 ...
- ASTER:An Attentional Scene Text Recognizer with Flexible Rectification
代码链接:https://github.com/bgshih/aster 方法概述 本文方法主要解决不规则排列文字的文字识别问题,论文为之前一篇CVPR206的paper(Robust Scene T ...
- python logging模块可能会令人困惑的地方
python logging模块主要是python提供的通用日志系统,使用的方法其实挺简单的,这块就不多介绍.下面主要会讲到在使用python logging模块的时候,涉及到多个python文件的调 ...
- Cordova webapp实战开发:(3)后面可能会学到的东西
在<Cordova webapp实战开发:(2)认识一下Cordova>中我们了解了Cordova和Phonegap的关系,并简要介绍了一下它的架构,以及多平台性,并给大家留了一些作业.我 ...
- mysql查询优化器为什么可能会选择错误的执行计划
有可能导致mysql优化器选择错误的执行计划的原因如下: A:统计信息不准确,mysql依赖存储引擎为其提供的统计信息来评估成本,然而有的存储引擎提供的信息是准确的,有的引擎提供的可能就偏差很大,如: ...
- iOS5可能会删除本地文件储存 - Caches 也不安全
转自:http://blog.163.com/ray_jun/blog/static/1670536422011101225132544/ 出处:http://superman474.blog.163 ...
- C#开发中可能会用到的一些小贴士(转)
转至http://www.cnblogs.com/Ebony-Ivory/p/4380106.html C#篇: 1.目标平台的选择 64位操作系统在编译VS里的程序时,根据需要设置项目属性的“目标平 ...
- Google可能会用苹果的Swift 为什么?
Google可能会用苹果的Swift 为什么? 2014 年夏天,苹果在 WWDC 大会上宣布了全新的程序语言 Swift,主要用来开发 iOS 与 OSX 应用. 去年年底,苹果将 Swift 开源 ...
- freemarker 直接使用List来遍历set集合,可能会报错
转摘:http://www.javaweb1024.com/java/JavaWebzhongji/2015/04/08/528.html freemarker 直接使用List来遍历set集合,可 ...
随机推荐
- Python: 截屏
最近项目中想实现截屏功能,使用的笔记本是高清屏,实际屏幕设置成了150%,所以在截屏的时候遇到个各种问题. 最开始使用PIL ImageGrab来截取屏幕,如果本来是100%的设置没有问题,能截取到全 ...
- 25个特殊操作符(special operator)
1. CLHS (Common-Lisp-Hyper-Spec) http://www.lispworks.com/documentation/HyperSpec/Body/03_ababa.htm ...
- EntityFrameworkCore Db First 生成Model时出错 PowerShell 版本过低
一般Windows7默认安装的是PowerShell 2.0 使用Vs2017开发.Net Core时.使用 EntityFrameworkCore Db First自动生成实体时需要用到下面命令: ...
- 设计模式之(十三)外观模式(Facade)
外观模式思想 历史上牛人中成功逆袭,实现人生辉煌的人很多,这群人最耀眼的无疑是明太祖朱元璋,从一个放牛讨饭的最低层小屌丝逆袭到人类权力顶峰开国皇帝,确实是我等膜拜的对象.在发不断的发展过程中,其实就在 ...
- vulnhub AI: Web: 1
vulnhub AI: Web: 1 提取flag攻略 导入虚拟机,开机. 扫描NAT的C段,确定虚拟机IP和开放端口. 尝试访问该网站 发现什么都没有,抽根烟冷静一下...... 来波目录扫描吧 使 ...
- 3 CVE-2017-11882漏洞分析
CVE-2017-11882漏洞分析 操作系统:Windows7 32/64位 专业版.Linux 软件:office 2003 sp3 工具:OD.IDA.Python模块.msfconsole 1 ...
- 在知识爆炸的年代如何学习,避免成为PPT架构师
计算机的发展大体遵循摩尔定律,IT要学的东西越来越多,感觉无从下手 然后发现许多人,专门喜欢说这些名词概念装高大上,脱离一线开发,技术跟风盲目崇拜新的骚东西,比如docker,k8s,微服务,open ...
- es更新说明(dsl)
一.旧版elasticsearch-dsl 很多同学在python搜索引擎视频中关于看到的第十章elasticsearch使用中使用python创建mapping老师使用的以下代码,这些代码对于ela ...
- Linux文件服务管理之nfs
NFS(Network File System)即网络文件系统, 是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源. 在NFS的应用中,本地NFS的客户端应 ...
- python平台下实现xgboost算法及输出的解释
python平台下实现xgboost算法及输出的解释 1. 问题描述 近来, 在python环境下使用xgboost算法作若干的机器学习任务, 在这个过程中也使用了其内置的函数来可视化树的结果, ...