Skip to content

一个基于OpenCV的SFM简单实现,学习用途。欢迎光临我的主页查看更多其他项目详情。

Notifications You must be signed in to change notification settings

chengzhag/sfm_learn

Repository files navigation

sfm_learn

一个基于opencv的SFM简单实现,学习用途。欢迎光临我的主页查看更多其他项目详情。

问题简化

  • 假设图像有序
  • 直接用前两帧做初始化,解2D-2D,三角化建立初始全局地图
  • 之后每帧与全局地图中上一帧范围内的点匹配,解3D-2D,三角化后向全局地图添加新点
  • 最后对全局地图进行BA

完成进度

以下示例采用数据fountain-P11。其11张照片位于datasets/fountain_dense_images目录下。

  1. 前两帧做2D-2D初始化: 2D2D
  2. 之后每帧与全局地图中上一帧范围内的点匹配,解3D-2D,三角化后向全局地图添加新点: 3D2D
  3. 进行Bundle Adjustment前: 3D2D
  4. 进行Bundle Adjustment后: 3D2D

计划:

  • 如有需要,继续改进SFM的效果
  • 从SFM的实现转向SLAM

实现

本实现的类设计参考了《视觉SLAM十四讲:从理论到实践》第9讲中对一个深度相机视觉里程计的实现。

类设计

  • Camera:相机-世界-像素坐标转换,相机参数
  • Frame:判断点是否在视野内,图像、位姿、相机
  • MapPoint:路标点,描述子、所在帧
  • Map:地图,存储路标、帧
  • SFM:顺序读取输入的路径,完成简化小节描述的步骤

问题

改进

  • 筛选匹配点
    • 以最短描述子距离的倍数为阈值选择最匹配的描述点:slambook ch7 2d2d
    • 用FLANN或KNN做特征点匹配:Trying to match two images using sift in OpenCv, but too many matches
    • 参考opencv官方教程做特征点匹配:Feature Matching
    • Ratio Test方法:OpenCV实现SfM(二):双目三维重建
  • 对每次添加帧解3D-2D后,做一次优化
  • 建立全局和局部地图,局部地图用于匹配,减少匹配时间

参考资料

SLAM

SFM

依赖库:

About

一个基于OpenCV的SFM简单实现,学习用途。欢迎光临我的主页查看更多其他项目详情。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published