视觉里程计-直接法

直接法的引入

 SLAM 主要分为视觉前端和优化后端。前端也称为 视觉里程计(VO)。它根据相邻图像的信息,估计出粗略的相机运动,给后端提供较好的初始值。

  VO 的实现方法,按是否需要提取特征,分为特征点法的前端以及不提特征的直接法前端。尽管特征点法在视觉里程计中占据主流地位,研究者们认识它至少有以下几个缺点:

  1. 关键点的提取与描述子的计算非常耗时。实践当中,SIFT目前在CPU上是无法实时计算的,而ORB也需要近20毫秒的计算。如果整个SLAM以30毫秒/帧的速度运行,那么一大半时间都花在计算特征点上。
  2. 使用特征点时,忽略了除特征点以外的所有信息。一张图像有几十万个像素,而特征点只有几百个。只使用特征点丢弃了大部分可能有用的图像信息
  3. 相机有时会运动到特征缺失的地方,往往这些地方都没有什么明显的纹理信息。例如,有时我们会面对一堵白墙,或者一个空荡荡的走廓。这些场景下特征点数量会明显减少,我们可能找不到足够的匹配点来计算相机运动。

  我们看到使用特征点确实存在一些问题。针对这些缺点,也存在若干种可行的方法:

  1. 只计算关键点,不计算描述子。同时,使用光流法(Optical Flow)来跟踪特征点的运动。这样可以回避计算和匹配描述子带来的时间,但光流本身的计算需要一定时间;
  2. 只计算关键点,不计算描述子。同时,使用
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
视觉里程(Visual Odometry)是一种通过从相机图像序列中估相机在空间中的运动的技术。在MATLAB中,你可以使用算机视觉系统工具箱(Computer Vision System Toolbox)来实现视觉里程。 首先,你需要提供一个包含连续图像帧的图像序列。然后,你可以使用视觉里程对象来估相机的运动。以下是一个简单的示例代码: ```matlab % 读取图像序列 imageSequence = imageDatastore('路径/图像文件夹/*.png'); % 创建视觉里程对象 vo = vision.OpticalFlow('ReferenceFrameSource', 'Property', 'ReferenceFrameDelay', 5); % 初始化相机姿态 initialPose = eye(4); % 处理图像序列 while hasdata(imageSequence) % 读取当前帧 frame = read(imageSequence); % 将当前帧传递给视觉里程对象 [motion, pose] = vo(frame); % 更新相机姿态 initialPose = initialPose * pose; % 可以在这里使用运动和姿态信息进行后续处理,比如建立三维地图等 % 可视化结果(可选) showFrameWithPose(frame, initialPose); end ``` 这只是一个简单的示例,实际应用中可能需要更复杂的处理和算。你可以根据你的特定需求来调整代码。此外,MATLAB提供了丰富的算机视觉函数和工具箱,可以帮助你进行更高级的视觉里程视觉SLAM(Simultaneous Localization and Mapping)任务。 请注意,这只是一种基于视觉特征的视觉里程,还有其他的方,比如基于直接(Direct Method)或深度学习方。具体使用哪种方取决于你的需求和应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JoannaJuanCV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值