PnP 问题方程怎么列?
PnP 问题即 Perspective-n-Point 。
有 P3P 方法,使用三个点对就能求解。但是先按照熟悉的方法,写一写。最后写 P3P 方法,P3P 方法还是比较晦涩的,不是无脑方法。
1. 八点法(使用正交补推导出线性系统)
我希望把 SLAM 问题中基础理论都归纳到统一的框架下,但我总是纠结 PnP 问题中三维点坐标是齐次的还是非齐次的,这样搞得很头疼。
在我的框架下已经有 Homography 矩阵和 Fundamental 矩阵,我是按照 MVG 这书的 DLT 方法计算 Homography 矩阵的,而 Fundamental 矩阵在 MVG 书上的推导比较晦涩,难懂。我是按照多年前看 Daniel Cremers 教授课程的方法推导的,具体的方法写在了以前的博客 【多视图几何】TUM 课程 第5章 双视图重建:线性方法 中。
现在我想把 PnP 问题归类到这两类方法中。
PnP 问题是求解相机 \(\mathbf{R}\) 和 \(\mathbf{t}\) 的过程。它的输入是世界坐标系下的 3D 点 \(\mathbf{X}\)(非齐次坐标 3 x 1) 与影像上的像素坐标 2D 点 \(\mathbf{x}\) (齐次坐标 3 x 1)。
按照刚体运动方程与投影方程,我们可以列出:
\[\begin{align} \mathbf{x} = \mathbf{K}(\mathbf{R}\mathbf{X} + \mathbf{t}) \end{align}\]
现在想办法列出 \(\mathbf{X}\) 与 \(\mathbf{x}\) 之间的线性方程:
\[\begin{align} \lambda \mathbf{K}^{-1}\mathbf{x} = \mathbf{R}\mathbf{X} + \mathbf{t} \label{eq:basic_trans} \end{align}\]
\(\lambda\) 是空间点在相机空间直角坐标系下的深度。
(接下来的步骤与 Fundamental Matrix 的推导过程类似。)
消除 \(\mathbf{t}\),只留下两项:
\[\begin{align} \lambda\hat{\mathbf{t}} \mathbf{K}^{-1} \mathbf{x} = \hat{\mathbf{t}} \mathbf{R} \mathbf{X} \end{align}\]
等式两侧同时左乘以 \({(\mathbf{K}^{-1} \mathbf{x})}^T\):
\[\begin{align} \lambda{(\mathbf{K}^{-1} \mathbf{x})}^T \hat{\mathbf{t}} \mathbf{K}^{-1} \mathbf{x} = {(\mathbf{K}^{-1} \mathbf{x})}^T \hat{\mathbf{t}} \mathbf{R} \mathbf{X} \end{align}\]
令 \(\mathbf{x}^{\prime} = \mathbf{K}^{-1} \mathbf{x}\) (即归一化相机坐标系坐标):
\[\begin{align} \lambda{\mathbf{x}^{\prime}}^T \hat{\mathbf{t}} \mathbf{x}^{\prime} = {\mathbf{x}^{\prime}}^T \hat{\mathbf{t}} \mathbf{R} \mathbf{X} \end{align}\]
等式左侧等于 0,因为 \(\hat{\mathbf{t}} \mathbf{x}^{\prime}=\mathbf{t} \times \mathbf{x}^{\prime}\) 与 \(\mathbf{x}^{\prime}\) 垂直,两者之间的内积为 0:
\[\begin{align} 0 = {\mathbf{x}^{\prime}}^T \hat{\mathbf{t}} \mathbf{R} \mathbf{X} \end{align}\]
接下来的求解步骤,可以参考 【多视图几何】TUM 课程 第5章 双视图重建:线性方法 。
\(\hat{\mathbf{t}} \mathbf{R}\) 是 3 x 3 的矩阵。这种方法需要 8 个点获得 8 个方程进行求解,\(\hat{\mathbf{t}} \mathbf{R}\) 方程是认为除了尺度减少了 1 个自由度,有 8 个自由度。
2. 六点法(DLT 方法)
从公式 (\ref{eq:basic_trans}) 出发。
先将 \(\mathbf{X}\) 非齐次坐标转换成齐次坐标,此时有
\[\begin{align} \lambda \mathbf{x}^{\prime} = \begin{bmatrix} \mathbf{R} & \mathbf{t} \end{bmatrix} \mathbf{X} \label{eq:dlt_start} \end{align}\]
其中 \(\mathbf{x}^{\prime} = \begin{bmatrix} u^{\prime} \\ v^{\prime} \\ 1 \end{bmatrix} = \mathbf{K}^{-1}\mathbf{x}\)。
令 \(\mathbf{P} = \begin{bmatrix} \mathbf{R} & \mathbf{t} \end{bmatrix}\)。\(\mathbf{P}\) 可以写作 \(\begin{bmatrix} {\mathbf{p}^1}^T \\ {\mathbf{p}^2}^T \\ {\mathbf{p}^3}^T \end{bmatrix}\),是一个 3 x 4 的矩阵。
(\ref{eq:dlt_start}) 两侧同时左乘以 \(\hat{\mathbf{x}^{\prime}}\) 于是有:
\[\begin{align} \mathbf{0} = \begin{bmatrix} 0 & -1 & v^{\prime} \\ 1 & 0 & -u^{\prime} \\ -v^{\prime} & u^{\prime} & 0 \end{bmatrix} \begin{bmatrix} {\mathbf{p}^1}^T\mathbf{X} \\ {\mathbf{p}^2}^T\mathbf{X} \\ {\mathbf{p}^3}^T\mathbf{X} \end{bmatrix} \end{align}\]
\[\begin{align} \mathbf{0} = \begin{bmatrix} v^{\prime}{\mathbf{p}^3}^T\mathbf{X} - {\mathbf{p}^2}^T\mathbf{X} \\ {\mathbf{p}^1}^T\mathbf{X} - u^{\prime}{\mathbf{p}^3}^T\mathbf{X} \\ u^{\prime}{\mathbf{p}^2}^T\mathbf{X} - v^{\prime}{\mathbf{p}^1}^T\mathbf{X} \end{bmatrix} \end{align}\]
\[\begin{align} \mathbf{0} = \begin{bmatrix} v^{\prime}\mathbf{X}^T{\mathbf{p}^3} - \mathbf{X}^T{\mathbf{p}^2} \\ \mathbf{X}^T{\mathbf{p}^1} - u^{\prime}\mathbf{X}^T{\mathbf{p}^3} \\ u^{\prime}\mathbf{X}^T{\mathbf{p}^2} - v^{\prime}\mathbf{X}^T{\mathbf{p}^1} \end{bmatrix} \end{align}\]
\[\begin{align} \mathbf{0} = \begin{bmatrix} \mathbf{0}^T & -\mathbf{X}^T & v^{\prime}\mathbf{X}^T \\ \mathbf{X}^T & \mathbf{0}^T & - u^{\prime}\mathbf{X}^T \\ - v^{\prime}\mathbf{X}^T & u^{\prime}\mathbf{X}^T & \mathbf{0}^T \end{bmatrix} \begin{bmatrix} \mathbf{p}^1 \\ \mathbf{p}^2 \\ \mathbf{p}^3 \end{bmatrix}\end{align}\]
每一个匹配点对可以列出 2 个方程,一共需要列出 3*4 = 12 个方程,6 个点可以求解。
PnP 问题方程怎么列?的更多相关文章
- How to do Mathematics
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:匿名用户链接:http://www.zhihu.com/question/30087053/answer/47815698来源 ...
- POJ 1830.开关问题(高斯消元)
题目链接 Solutin: 将每个开关使用的情况当成未知数,如果开关i能影响到开关j,那么系数矩阵A[j][i]的系数为1. 每个开关增广矩阵的值是开关k的初状态异或开关k的目标状态,这个应该很容易想 ...
- THUSC 2018 酱油记
THUSC 2018 酱油记 游记分类:游记 Day \((-inf,-2]\) 自CTSC和APIO挂烂以后,仍然在停课集训,不过好像这两波考试让我的RP涨了一大波,因此模拟赛大多都考的不错,虽然经 ...
- SDOI2017硬币游戏
题面链接 洛咕 sol 神题,幸好我不是SD的QAQ. 假设你们都会\(O(n^3m^3)\)的高斯消元,具体来说就是建出\(Trie\)图然后套游走的板子. 然后我们发现可以把不能匹配任何串的概率压 ...
- bzoj3143游走
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3143 学到了无向图中点被经过的期望次数和边被经过的期望次数. 一个点被经过的期望次数 就是 ...
- 挑战程序竞赛例题 4.1 Random Walk(高斯消元求期望值)
给你一幅N*M的地图,地图中有不能到达的障碍物'#'与可以走的点'.',从(1,1)开始走到(N,M),其中每一次走动均等概率地向周围的可达的格子走去,求到达(N,M)的期望步数.(N,M<=1 ...
- Codeforces 1138B(列方程枚举)
构造模拟要分情况讨论感觉不是够本质,然后官解是因为只有四个量所以可以根据限制条件列两个方程,再枚举一下解就可以了. const int maxn = 5000 + 5; int n, c[maxn], ...
- PNP的学习-P3P
PNP方法是为了解决在当前两帧图像中,已知前一帧图像上的3dLandmark点和当前帧的2d特征点,求取当前帧的pose. PNP主要有P3P.EPNP.UPNP.DLT.MRE(LS Iterati ...
- 相机标定:PNP基于单应面解决多点透视问题
利用二维视野内的图像,求出三维图像在场景中的位姿,这是一个三维透视投影的反向求解问题.常用方法是PNP方法,需要已知三维点集的原始模型. 本文做了大量修改,如有不适,请移步原文: ...
随机推荐
- AI GMM
GMM(Gaussian Mixture Model,高斯混合模型)通常用于聚类(也用于密度估计),数据是由k个高斯分布生成,每个分布表示一个类. 期望最大(Expectation Maximizat ...
- Linux下时钟框架实践---一款芯片的时钟树配置
关键词:时钟.PLL.Mux.Divider.Gate.clk_summary等. 时钟和电源是各种设备的基础设施,整个时钟框架可以抽象为几种基本的元器件:负责提供晶振 Linux内核提供了良好的CC ...
- SpringBoot整合RabbitMQ-服务安装
本系列是学习SpringBoot整合RabbitMQ的练手,包含服务安装,RabbitMQ整合SpringBoot2.x,消息可靠性投递实现等三篇博客. 学习路径:https://www.imooc. ...
- 广师大学习笔记之文本统计(jieba库好玩的词云)
1.jieba库,介绍如下: (1) jieba 库的分词原理是利用一个中文词库,将待分词的内容与分词词库进行比对,通过图结构和动态规划方法找到最大概率的词组:除此之外,jieba 库还提供了增加自定 ...
- hMailServer 邮件服务器搭建
HMailServer是一个运行于微软Windows系统.基于GPL授权.免费的电子邮件系统:支持常见的电子邮件协议SMTP.POP3.IMAP:可以很容易地与许多现有的网络邮件系统集成和二次开发:具 ...
- Oracle SQLULDR2 以及 SQLLDR 进行导入导出的功能说明
Study From http://blog.itpub.net/28291944/viewspace-2142187/ 自己尝试了下 可以实现. 下载完sqluldr2,文件夹内容如下:sqluld ...
- Uint 7.文本和字体属性,background,精灵图和3种定位
一. 文本属性 CSS 文本属性可定义文本的外观. 通过文本属性,您可以改变文本的颜色.字符间距,对齐文本,装饰文本,对文本进行缩进,等等. <!DOCTYPE html> <htm ...
- Flutter之Simulation
Simulation 可以理解成动画进行的函数. Flutter中自带了有下面几种. BouncingScrollSimulationBounce弹性的滚动模拟 ClampedSimulation C ...
- python之序列化模块、双下方法(dict call new del len eq hash)和单例模式
摘要:__new__ __del__ __call__ __len__ __eq__ __hash__ import json 序列化模块 import pickle 序列化模块 补充: 现在我们都应 ...
- CentOS 7安装MongoDB
1 下载安装包 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.2.4.tgz 2 解压 .tgz 3 将解压包 ...