目前网络上大量的运行openmvg的重建管道文章因为OpenMVG的升级有些已经不能用了,自己也还在踩坑当中,简单记录下自己遇见的一些问题。
一、安装
OpenMVG的安装是否简单,按照官网给出来的安装操作,即可在linux上安装好软件。
Compiling on Linux
Install the required external libraries.
$ sudo apt-get install libpng-dev libjpeg-dev libtiff-dev libxxf86vm1 libxxf86vm-dev libxi-dev libxrandr-dev
If you want see the view graph svg logs, install Graphviz.
$ sudo apt-get install graphviz
Checkout OpenMVG.
$ git clone --recursive https://github.com/openMVG/openMVG.git
$ mkdir openMVG_Build && cd openMVG_Build
Configure and build
$ cmake -DCMAKE_BUILD_TYPE=RELEASE ../openMVG/src/
$ cmake --build . --target install
二、运行测试数据实现运动结构恢复
注意:
也就是说网上大量的
openMVG_main_SfMInit_ImageListing -i <images-dir> -f focal_length -o <output-dir>
openMVG_main_ComputeFeatures -i <output-dir>/sfm_data.json -o <output-dir>
openMVG_main_ComputeMatches -i <output-dir>/sfm_data.json -o <output-dir>
openMVG_main_IncrementalSfM -i <output-dir>/sfm_data.json -m <output-dir> -o <output-dir>/reconstruction
openMVG_main_ComputeSfM_DataColor -i <output-dir>/reconstruction/sfm_data.bin -o <output-dir>/colored.ply
openMVG_main_ComputeStructureFromKnownPoses -i <output-dir>/reconstruction/sfm_data.bin -m . -o <output-dir>/reconstruction/robust.bin -f <output-dir>/matches.f.bin
代码已经不能用了
并且unbuntu里边的 /usr/local/bin 确实只能找到openMVG_mian_SFm ,
查看tutorial操作,这里说得不够明显
OpenMVG on your image dataset · openMVG/openMVG Wiki · GitHub
看这个网站,SfM: Structure from Motion — openMVG library
因此我采用的是使用python脚本来进行demo的运行。这里也遇见了问题。
使用global方式是运行成功的
但是使用sequential方式是失败的了。
在该目录下找不到这个文件
估计是上一步骤没有生成。
三、源码Example编译
使用make编译源码后,神奇的是运行成功也没有在当前目录生成执行文件。
比如我到example下编译
完成
生成后路径下并没有找到可执行问题,黑人问号?
四、重建原理补充(多视口几何)
Multiple View Geometry 简称 MVG,包含三个关键矩阵:一个是单应矩阵 𝑥′𝑖=𝐻𝑥𝑖xi′=Hxi,参见博文 OpenCV 之 平面单应性
另两个是基础矩阵 𝑥′𝑇𝑖𝐹𝑥𝑖=0xi′TFxi=0,本质矩阵 𝐸=𝑅[𝑡]𝑥=𝐾′𝑇𝐹𝐾E=R[t]x=K′TFK
例如,已知四组对应特征点坐标,用 DLT 算法求解单应矩阵 H,代码如下:
// Setup left, right corresponding points and solve for H
openMVG::Mat xLeft(2, 4), xRight(2, 4);
// Instantiation of homography solver
using H_Solver = openMVG::homography::kernel::FourPointSolver;
// Perform model solving
std::vector<openMVG::Mat3> Hs;
H_Solver::Solve(xLeft, xRight, &Hs);
补充另外求解思路(使用本质矩阵进行求解):
通过对极约束方程利用八点法求解本质矩阵(--->svd分解相机R t,获得相机运动姿态)
五、未解决的问题
问题一:如果通过代码一步步来进行重建管道?
问题二:SfM_SequentialPipeline.py 脚本运行失败
问题三:如何运行openmvg提供给的demo