MVG(second)学习笔记- 三角形法
三角化,是已经知道相机矩阵和匹配点x-x',求出空间点。
线性三角形法
推导:
线性三角形法,通常,被估计的点不能准确地满足儿何关系,因而不是一个最优估计.
线性三角形法是直接模仿介绍的 DLT 方法.在每一幅图像上分别有x = PX , x '= P ' X ,且这些方程可以组合成 AX = 0 的形式,它是关于 X 的线性方程.
首先通过叉乘消去齐次纯盘因子,使每一个图像点给出 三个方程,其中两个是线性独立的 , 例如,对第一幅图像有 x X (PX) = 0 并把它展开得
其中 piT 是 P 的行 ,这些方程关于 X 的分量是线性 的.
可以组成形如 AX = 0 的方程,其中
这里从每一像点取两个方程,总共绘出 4 个齐次朱知量的 4 个方程.这是一个冗余方程组,因为解在相差一个尺度因子的意义下被确定. 讨论过的求解形如AX = 0的方程组的两种方法.
(1)齐次方法
(2)非齐次方法
几何法(见)(大佬博客)
(1)非线性优化法
(2)最优解法
例子:
Triangulate in ORB-SLAM2
Initializer::Triangulate() 使用2d-2d点对 和 变换矩阵 R,t 三角变换恢复2d点对应的3d点
rianularization: 已知匹配特征点对{p1 p2} 和
各自相机投影矩阵{P1 P2}, P1 = K*[I 0], P2 = K*[R t], 尺寸为[3,4]
估计三维点 X3Dp1 = P1 * X3Dp2 = P2 * X3D
采用直接线性变换DLT的方法(将式子变换成A*X=0的形式后使用SVD奇异值分解求解线性方程组):
对于 p1 = P1 * X3D: 方程两边 左边叉乘 p1,可使得式子为0
p1叉乘P1*X3D = 0
其叉乘矩阵为:
叉乘矩阵 = |0 -1 y||1 0 -x| |-y x 0|
上述等式可写: |0 -1 y| |P1.row(0)| |1 0 -x| *|P1.row(1)|* X3D = 0|-y x 0| |P1.row(2)| 对于第一行 |0 -1 y| 会与P的三行分别相乘 得到四个值 与齐次3d点坐标相乘得到 0
有 (y * P1.row(2) - P1.row(1) ) * X3D = 0
对于第二行 |1 0 -x|有:
有 (x * P1.row(2) - P1.row(0) ) * X3D = 0
得到两个约束,另外一个点 p2 = P2 * X3D,也可以得到两个式子:
(y‘ * P2.row(2) - P2.row(1) ) * X3D = 0
(x’ * P2.row(2) - P2.row(0) ) * X3D = 0
写成 A*X = 0的形式有:
A =(维度4*4)
|y * P1.row(2) - P1.row(1) |
|x * P1.row(2) - P1.row(0) |
|y‘ * P2.row(2) - P2.row(1)|
|x’ * P2.row(2) - P2.row(0)|
对A进行奇异值分解求解X
cv::SVD::compute(A,w,u,vt,cv::SVD::MODIFY_A| cv::SVD::FULL_UV);
x3D = vt.row(3).t();// vt的最后一列,为X的解
x3D = x3D.rowRange(0,3)/x3D.at<float>(3);// 转换成非齐次坐标 归一化
源代码:
void Initializer::Triangulate(const cv::KeyPoint &kp1, const cv::KeyPoint &kp2, const cv::Mat &P1, const cv::Mat &P2, cv::Mat &x3D)
{cv::Mat A(4,4,CV_32F);A.row(0) = kp1.pt.x*P1.row(2)-P1.row(0);A.row(1) = kp1.pt.y*P1.row(2)-P1.row(1);A.row(2) = kp2.pt.x*P2.row(2)-P2.row(0);A.row(3) = kp2.pt.y*P2.row(2)-P2.row(1);cv::Mat u,w,vt;cv::SVD::compute(A,w,u,vt,cv::SVD::MODIFY_A| cv::SVD::FULL_UV);x3D = vt.row(3).t();x3D = x3D.rowRange(0,3)/x3D.at<float>(3);
}
谭平老师的ppt:
Mid‐point Algorithm
参考:
- https://blog.csdn.net/weixin_44580210/article/details/90679847
- https://blog.csdn.net/kokerf/article/details/72844455
- https://blog.csdn.net/u011178262/article/details/86729887
- Multiple View Geometry in Computer Vision,Second Edition, 12.2 P312 & A5.2.1 P591
- https://blog.csdn.net/xiaoxiaowenqiang/article/details/80871464
- 谭平老师ppt
MVG(second)学习笔记- 三角形法相关推荐
- 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 回溯法
<数据结构.算法与应用 -- C++语言描述>学习笔记 - 回溯法 一.算法思想 二.货箱装载 1.问题描述 2.回溯算法 3.实现 4.测试代码 一.算法思想 回溯法是搜索问题解的一种系 ...
- 探索初级算法学习笔记-快速排序法
快速排序法学习笔记 #include<stdio.h>void swap(int *a,int *b) {int t;t=*a;*a=*b;*b=t; }void quickSort(in ...
- 自然语言处理学习笔记-lecture06-词法分析与词性标注
英语的形态分析 单词识别 例如: I'll see prof. Zhang home after the concert.的识别结果:I/ will/ see/ prof./ Zhang/ home/ ...
- ASP.Net学习笔记010--加法计算器
/WebSiteTest中新建 AddCalc1.htm <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...
- 学习笔记-主成分分析法
定义 主成分分析是一种降维算法,它能将多个指标转换为少数几个主成分,这些主成分是原始变量的线性组合,且彼此之间互不相关,其能反映出原始数据的大部分信息.一般来说,当研究的问题涉及到多变量且变量之间存在 ...
- 影像组学视频学习笔记(5)-特征筛选之方差选择法、Li‘s have a solution and plan.
本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(5)主要介绍: 特征筛选之方差选择法 针对医疗人员在影像组学研究中碰到的编程问题,李博士建议: 如果有一门编程语言基础的话会比较轻松 先 ...
- 拉格朗日乘子法 学习笔记
本来是想写支持向量机的学习笔记的然后觉得内容太多了越写越不想写于是咕掉了. 把写好的拉格朗日乘子法发上来吧QwQ 拉格朗日乘子法 wiki链接 拉格朗日乘子法用来求解带多个等式约束的情况下的多元函数极 ...
- OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope
OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...
- 机器学习理论《统计学习方法》学习笔记:第四章 朴素贝叶斯法
机器学习理论<统计学习方法>学习笔记:第四章 朴素贝叶斯法 4 朴素贝叶斯法 4.1 朴素贝叶斯法的学习与分类 4.1.1 基本方法 4.1.2 后验概率最大化的含义 4.2 朴素贝叶斯法 ...
最新文章
- XX must be built with ARC
- ACS AAA Tacacs+
- 统一代码段与非一致代码段
- ITK:使用写访问权访问图像中的迭代区域
- 浅析在公众号中使用弛声sdk为什么上传解析慢
- Java实现Huffman哈夫曼树
- P4233-射命丸文的笔记【NTT,多项式求逆】
- [C/C++标准库]_[0基础]_[怎样实现std::string自己的Format(sprintf)函数]
- c 语言是一种以解释方式实现的高级语言,高级语言按照计算机执行方式不同可以分为哪两类?它们的执行方式有什么不同,请进行概要说明。...
- 调整Word中英文与汉字之间的空隙
- 在IDEA中Java项目如何创建测试类(Junit测试工具)
- 【金九银十】Java微服务面试题,看到你就是赚到
- python实现 stft_Python中的可逆STFT和ISTFT
- 手游无限多开器安卓版_无限多开版!使用叶子猪手游模拟器玩大话西游手游教程...
- 第10章 模糊查询和聚合函数
- Windows主机连接Windows虚拟机上Oracle数据库
- OllyDbg学习---深入理解消息驱动原理(2)
- linux逆向分析之ELF文件详解
- e1000e_probe 其实是e1000_probe
- 小学生用大数据研究苏轼?多亏有程序员爸爸;冒牌 Chrome 扩展现身官方商店,众多用户中招...
热门文章
- Python抓取淘女郎网页信息以及代码下载
- 《软件技术基础》之《操作系统习题解析》
- 2021年新版电影小程序商业版+前端无后门+搭建教程亲测可用
- 塔式和机架式它们到是什么?有什么区别?
- 黑客是如何攻破一个网站的?
- 【十问评估经营理念】
- Robust Visual Tracking with a Freely-moving Event Camera
- 工具分享:elasticsearch-7.3.1请自行下载(Linux、windows_64)(附下载链接)
- 强制浏览器以IE8版本运行
- Hystrix 1.5 滑动窗口实现原理总结