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排序 基数排序
算法思想 基数排序通过按位比较(一般从最低位开始)将元素按照最低位的数放到10个桶中,当所有的元素都这样被处理一次后,在按从0到9的顺序将每个桶的元素再取出来(不关注其他位的,只关注当前位的)这样就完 ...
- python 库 PrettyTabble 使用与错误
参考链接:http://zetcode.com/python/prettytable/ PrettyTable能在python中生成ASCII 表,可以使用他控制表的很多方面,包括文本对齐.表的边框. ...
- VMware 12 下载+专业版永久序列号
VMware 12 下载 VMware 12 下载(百度网盘) 链接:https://pan.baidu.com/s/1VvRmjf1yZ2zprQUzuVKRkA 密码:dvpr VMwar ...
- QT场景视图父子关系图元打印研究
在之前的一篇文章中,实现了QT场景视图的打印功能,主要通过render函数来实现,非常简单和方便. 在实际的项目需求中,除了打印整个场景外,还需要对单个图形进行打印操作,基于item的图形可以在pai ...
- elasticsearch查询所有数据restful api以及java代码实现
原文:http://blog.java1234.com/blog/articles/366.html restful api实现如下: get http://192.168.1.111:9200/fi ...
- django2.2(一)
限制请求method 什么是method 1.通常客户端请求服务器获取资源为GET方式 2.客户端提交数据给服务器端数据为POST方式 method限制请求 如果要限制请求,比如客户端只允许用GET方 ...
- discuz支持的mysql的配置(docker版本)
作个笔录. conf/discuz.conf [client] port=3306 default-character-set=utf8 [mysqld] port=3306 default-stor ...
- github1:workq
https://github.com/taf2/workq https://github.com/erez-strauss/lockfree_mpmc_queue 多生产者 多消费者 队列 < ...
- win10 任务栏上的工具栏,重启消失的解决方法
首先谈下 <任务栏的工具栏> 对于很多人来言,还是有可取性的 任务栏的工具栏对编程者的作用 一般来说,我们会经常查看某些API文档,虽然现在是联网也很方便,但如果都下载下来,整理到一个文件 ...
- Latex 调整断字,连接符,取消断词/断字
latex使用了处理断字的算法去自动的找断字的地方,而且latex会调整单词间距,使得文章看起来不会显得疏密不一致.大多数情况下,这些算法都工作得很好.但是因为断字的算法是根据某种规则来处理单词的断字 ...