【三维重建】对极几何

2023-12-12 08:20
文章标签 几何 三维重建 对极

本文主要是介绍【三维重建】对极几何,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

极几何描述了同一场景或者物体的两个视点图像间的几何关系

可以发现P在左右相机的投影点一定在各自的极线上,如果求出极线就能缩小求解对应点的范围。

本质矩阵对规范化摄像机拍摄的两个视点图像间的极几何关系进行代数描述

规范化相机指的是相机的内参矩阵为一个单位矩阵

P'=\begin{bmatrix} x\\y \\ z \end{bmatrix}=\begin{bmatrix} 1 &0 & 0 & 0\\ 0&1 &0 &0 \\ 0& 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} x\\y \\ z \\ 1 \end{bmatrix} \ \ P'=MP     

p'^*p'O_1坐标系下的坐标,则:

p'=Rp'^*+T \rightarrow p'^*=R^Tp'-R^TT(R^{-1} = R^T)

因此,p'O_1坐标系下的坐标为 R^Tp'-R^TT

同理:O_2O_1坐标系下的坐标为 -R^TT

得到两个向量 O_1p' \ , O_1O_2

O_1p' \times O_1O_2 = R^TT \times (R^Tp'-R^TT)=R^TT \times R^Tp' (垂直于极平面)

[R^TT \times R^Tp']^T \cdot p = 0

a \times b 可以写成一个矩阵乘积的形式,比如:

a = (x_1,y_1,z_1),b=(x_2,y_2,z_2)

a \times b = (y_1z_2-z_1y_2,z_1x_2-x_1z_2,x_1y_2-y_1x_2)\\ = \begin{bmatrix} 0& -z_1 &y_1 \\ z_1&0 &-x_1 \\ -y_1&x_1 &0 \end{bmatrix}\begin{bmatrix} x_2\\y_2 \\ z_2 \end{bmatrix}

因此,

[R^TT \times R^Tp']^T \cdot p = [T \times p']^TRp=[T_xp']^TRp \\ \\ =p'^TT_x^TRp=p'^TT_xRp=p'^T[T \times R]p = 0

( T_x 是一个秩为2的对称矩阵)

E = T \times R = T_{\times}R

E就是本质矩阵,描述了规范化摄像机下两个视点的关系。

p^T \cdot l = 0 ,\ p'^TEp =0\rightarrow l =E^Tp' \\ p'^T \cdot l' = 0 ,\ p'^TEp =0\rightarrow l' =Ep

e也是极线l上的点,所以

l^Te = p'^TEe=0\rightarrow Ee =0

基础矩阵对一般的透视摄像机的两个视点的图像间的极几何关系进行代数描述

核心思想是将一般相机下的p,p',变成规范化相机下的p,p'

p=K[I\ O]P\rightarrow K^{-1}p=K^{-1}K[I \ O]P\rightarrow \begin{bmatrix} 1 &0 &0 &0 \\ 0& 1& 0&0 \\ 0 & 0&1 & 0 \end{bmatrix}P

let \ \begin{bmatrix} 1 &0 &0 &0 \\ 0 & 1 & 0 &0 \\ 0 & 0 & 1 & 0 \end{bmatrix}P = p_c\rightarrow p_c = K^{-1}p \ , p_c '= K'^{-1}p'

p_c',p_c符合规范换相机要求,因此:

p_c'Ep_c=p_c'^T[T_{\times}]Rp_c=(K'^{-1}p' )^T [T_{\times}]RK^{-1}p \\ \\ =p'^TK'^{-T}[T_{\times}]RK^{-1}p = 0

let F=K'^{-T}[T_{\times}]RK^{-1},\ p'^TFp=0

F就是基础矩阵,反映了一般相机下,两视点间的关系。

求解基础矩阵

用对应点求解F

求出的\hat{F}往往是满秩的,而我们所要求的基础矩阵秩为2

单应性矩阵

 

如果采集到的对应点在同一平面,两个视点间的对应关系用单应性矩阵表示

M = K(I \ O),\ M' = K'(I\ O),\ P= (\tilde{P^T},1)^T \\ \\ p = M\begin{pmatrix} \tilde{P}\\1 \end{pmatrix} =K \tilde{P} \\ \\ p' = M'\begin{pmatrix} \tilde{P}\\1 \end{pmatrix}=K'(R \ t)\begin{pmatrix} \tilde{P} \\1 \end{pmatrix}=K'(R \tilde{P} + t)

n^T \tilde{P} = d \rightarrow n^T \tilde{P} / d = 1 \\ \\ let \ n / d = n_d , n_d^T \tilde{P} = 1

 p'=K'(R\tilde{P} + t \cdot n_d^T \tilde{P}) = K'(R + t \cdot n_d^T)\tilde{P} =K'(R + t \cdot n_d^T)K^{-1}p

本质矩阵 H = K'(R + t \cdot n_d^T)K^{-1}

参考内容:计算机视觉之三维重建(深入浅出SfM与SLAM核心算法)—— 4. 三维重建基础与极几何_哔哩哔哩_bilibili

这篇关于【三维重建】对极几何的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/483900

相关文章

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

poj 3304 几何

题目大意:给出n条线段两个端点的坐标,问所有线段投影到一条直线上,如果这些所有投影至少相交于一点就输出Yes!,否则输出No!。 解题思路:如果存在这样的直线,过投影相交点(或投影相交区域中的点)作直线的垂线,该垂线(也是直线)必定与每条线段相交,问题转化为问是否存在一条直线和所有线段相交。 若存在一条直线与所有线段相交,此时该直线必定经过这些线段的某两个端点,所以枚举任意两个端点即可。

POJ 2318 几何 POJ 2398

给出0 , 1 , 2 ... n 个盒子, 和m个点, 统计每个盒子里面的点的个数。 const double eps = 1e-10 ;double add(double x , double y){if(fabs(x+y) < eps*(fabs(x) + fabs(y))) return 0 ;return x + y ;}struct Point{double x , y

poj 2653 几何

按顺序给一系列的线段,问最终哪些线段处在顶端(俯视图是完整的)。 const double eps = 1e-10 ;double add(double x , double y){if(fabs(x+y) < eps*(fabs(x) + fabs(y))) return 0 ;return x + y ;}struct Point{double x , y ;Point(){}Po

三维布尔运算对不规范几何数据的兼容处理

1.前言 上一篇文章谈过八叉树布尔运算,对于规范几何数据的情况是没有问题的。 在实际情况中,由于几何数据来源不一,处理和生成方式不一,我们无法保证进行布尔运算的几何数据都是规范的,对于不规范情况有时候也有需求,这就需要兼容不规范数据情况,当然这种兼容不是一味的让步,而是对于存在有限的不规范数据的兼容处理。 2.原始数据示例 下图是一个大坝模型和之上要对其进行布尔运算的立方体。 大坝模型由

CF#284 (Div. 2) C.(几何规律)

题目链接:http://codeforces.com/contest/499/problem/C 解题思路: 把两个点的坐标分别带入方程组,如果最后两个值相乘为负,即异号,计数器++。其中有一个有趣的现象,从A到B的最短步数,可以变化为求A和B之间夹了多少条直线,那么最后只要求出直线数,即可求出最小步数。 如果一条直线夹在A和B中间,那么把A和B的坐标带入后,所得值相乘一定为负。数据很

百度之星初赛1006(计算几何:能包含凸包的最小矩形面积)

矩形面积    Accepts: 717    Submissions: 1619  Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description 小度熊有一个桌面,小度熊剪了很多矩形放在桌面上,小度熊想知道能把这些