1. 代码调试问题
- fmt问题
确保安装了fmt
git clone https://github.com/fmtlib/fmt.git
cd fmt
mkdir build
cd build
cmake ..
make
sudo make install
在ch7的
CMakeLists.txt
文件里面添加如下代码
set(CMAKE_CXX_STANDARD 14)
find_package(FMT REQUIRED)
...
target_link_libraries(pose_estimation_3d2d fmt::fmt)
...
target_link_libraries(pose_estimation_3d3d fmt::fmt)
- 命令行运行
在build文件夹下使用./orb_cv ../1.png ../2.png
2. 学习笔记
计算相机运动
1)当相机为单目时候,只知道2D坐标,故是根据两组2D点估计相机运动,方法是对极几何
2)相机为双目、RGBD相机,或者通过某种方式得到了距离信息,故是根据两组3D点估计相机运动,方法是ICP
3)相机一组为3D,一组为2D,也就是得到了一些3D点和它们在相机的投影位置,故是一组3D和一组2D,方法是PnP
-
对极约束
关键公式p 2 T K − T t Λ R K − 1 p 1 = 0 F = K − T t Λ R K − 1 E = t Λ R \begin{aligned} p{_2}{^T}K^{-T}t^{\Lambda}RK^{-1}p_1=0\\ F=K^{-T}t^{\Lambda}RK^{-1}\\ E=t^{\Lambda}R\\ \end{aligned} p2TK−TtΛRK−1p1=0F=K−TtΛRK−1E=tΛR
注: F F F称为基础矩阵, E E E称为本质矩阵,还有一个单应矩阵(用来描述处于共同平面上的一些点在两张图像之间的变换关系)
-
PnP(Perspective-n-Point)
有多种方法:用3对点估计位姿的P3P、直接线性变换(DLT)、EPnP(Efficient PnP)、还有万金油光束平差法(Bundle Adjustment,BA)
参考:
Ransac原理