研究记录--vslam 与SFM区别与联系

本文探讨了Structure from Motion (SFM)和Visual SLAM在视觉定位和3D重建上的异同。SFM侧重3D重建,而vSLAM注重实时定位。传统SFM依赖特征跟踪,vSLAM则结合预测(如加速度传感器)。随着技术发展,两者在预测方法上相互借鉴,趋向融合。评论中,一位研究生表示文章解答了他对SfM和vSLAM的疑惑,并希望能进一步交流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.

我主攻方向刚好是structure from motion,我一美国同学主攻的方向刚好是visual SLAM。我是在我们实验室vision组,他是在我们实验室Robotics组。我们又住在一起,每天必须争辩的事情就是structure from motion和visual SLAM的区别和联系,火药不断。我不得不说,SFM和vSLAM基本讨论的是同一问题,不过SFM是vision方向的叫法,而vSLAM是robotics方向的叫法,vSLAM所谓的mapping,我们vision方向叫structure,vSLAM所谓的location,我们vision方向叫camera pose。但是从出发点考虑的话,SFM主要是要完成3D reconstuction,而vSLAM主要是要完成localization。从方法论的角度上考虑的话,传统的SFM是不要求prediction的,但是对于vSLAM而言prediction是必须的,因为vSLAM的终极目标是要real-time navigation,而对于传统SFM而言,real-time是不要求的。而传统的vSLAM也把主要精力放在prediction上面,而且是借助非camera的外界的手段来predict,例如acceleration sensor。而传统SFM则把精力放在feature tracking上面了。直到最近,SFM开始利用图片间的optical flow做prediction,而vSLAM则更加的注重了feature tracking。所以就目前而言两个领域似有大融和趋势。。。所谓乱世造英雄的时代到了。。。

### 使用 OpenCV 实现视觉 SLAM 的方法 要通过 OpenCV 来实现视觉 SLAM,可以遵循以下思路: #### 1. **理解基础概念** 视觉 SLAM 是一种基于计算机视觉的技术,用于实时估计相机的姿态并构建环境地图。它通常分为三个主要模块:前端(Frontend)、后端(Backend)以及回环检测(Loop Closure)。这些模块共同协作完成定位建图的任务。 对于初学者来说,可以从简单的单目视觉里程计入手学习[^2]。这有助于掌握基本原理后再逐步扩展到完整的 SLAM 系统。 #### 2. **依赖库准备** OpenCV 提供了许多图像处理功能,适合用来提取特征点、计算光流等操作。然而仅靠 OpenCV 并不足以支持整个 SLAM 流程中的优化部分;因此还需要引入其他工具或框架辅助完成非线性最小二乘法求解等工作。例如 g2o 或 ceres solver 可被应用于轨迹优化阶段[^1]。 #### 3. **具体实现步骤** 以下是使用 OpenCV 构建简易版单目 VO/VSLAM 的一些核心环节及其对应函数调用方式: - 特征检测匹配 利用 SIFT/SURF/ORB 方法找到每帧图片内的兴趣点,并对其进行描述以便后续配对查找相同位置对象之间的关联关系。 ```cpp cv::Ptr<cv::FeatureDetector> detector = cv::ORB::create(); std::vector<cv::KeyPoint> keypoints; cv::Mat descriptors; detector->detectAndCompute(image, cv::noArray(), keypoints, descriptors); ``` - 基础矩阵估算 当前时刻拍摄所得画面同之前某一瞬间所记录下来的数据之间存在几何约束条件——即所谓的本质方程式(Epipolar Geometry),据此可推导出摄像机相对位移信息。 ```cpp std::vector<cv::Point2f> points1, points2; // ... populate point vectors ... cv::findFundamentalMat(points1, points2, CV_FM_RANSAC); ``` - 运动恢复结构(SFM)重建初步三维坐标系 结合两幅连续视图里的对应像素分布状况推测物体实际空间方位布局情形。 ```cpp cv::Mat E = findEssentialMat(...); recoverPose(E,...); ``` 以上仅为简化版本示意代码片段,在真实项目开发过程中还需考虑诸多细节问题比如噪声过滤、尺度不确定性补偿等方面因素影响最终效果质量高低程度差异较大情况下的适应能力提升措施等等内容均需深入探讨研究才行哦! --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值