matlab从r2019a版本开始在Computer Vision Toolbox中提供了一套完整的sfm程序,输入标定好的图像序列,可以计算出相机位姿进行稀疏重建和稠密重建
matlab sfm基本步骤:
- 输入图像,检测图像SURF特征点
- 5点法RANSAC计算双视图本质矩阵E
- 由E分解出四组R,t,三角化重建三维点,利用正负景深筛选出正确的R,t
- 双视图下做BA优化,得到BA修正后的R,t,X
- 最后一对视图BA得到的X作为最后稀疏重建结果展示的X
- 稠密重建
输入图片序列
稀疏重建结果
其实程序写的很简单明了,很容易就能看懂,需要注意的是这个程序中投影方程的形式是
x = K ( R X − t ) x=K(RX-t) x=K(RX−t)
R R R和 t t t就是最后程序输出的orientation和location
在RANSAC中用Sampson distance计算误差,判断是否为内点