基于ORB-SLAM2与YOLOv8剔除动态特征点

2024-02-18 00:28

本文主要是介绍基于ORB-SLAM2与YOLOv8剔除动态特征点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于ORB-SLAM2与YOLOv8剔除动态特征点

以下方法以https://cvg.cit.tum.de/data/datasets/rgbd-dataset/download#freiburg3_walking_xyz数据集进行实验测试APE

首先在不剔除动态特征点的情况下进行测试:

方法1:segment坐标点集合逐一排查剔除

利用YOLOv8的segment获取动态对象(这里指人person)所在区域的坐标点集合segpoints,之后将提取的特征点的坐标逐一与segpoints中的所有坐标作判断,将出现在segpoints中的特征点的坐标改为(-1,-1),然后在畸变校正时会将坐标为(-1,-1)的异常坐标剔除。
得到的轨迹精度还是可以的,但是segpoints中的数据量太大,完成一次剔除任务花费的时间太长(基本在20~30ms,画面中人所在区域较大时能达到50+ms)。

在这里插入图片描述

方法2:利用目标检测框

利用YOLOv8进行目标检测,将检测到的目标分为两类:动态对象和静态对象。
这里仅将person设为动态对象。获取动态对象及静态对象的检测框后判断提取的特征点是否在动态对象检测框内以及是否在静态对象检测框内。

1.特征点在动态对象检测框内而不在静态对象检测框内,则满足剔除条件,将其剔除;
2.其余情况皆不满足剔除条件。

采用这种方法速度提升至0.02~0.03ms,最多也在0.05ms以内。

精度与方法1差不多。

再次测试

下面以数据集https://cvg.cit.tum.de/data/datasets/rgbd-dataset/download#freiburg2_desk_with_person对上面两种方法再次进行测试APE

首先ORB_SLAM2的运行结果如下:

方法1的结果如下:

方法2的结果如下:

速度方面仍然是方法2要比方法1快上千倍,精度方面相差不大。

RPE结果:
ORB-SLAM2结果:

方法1:

方法2:

虽然在程序运行中发现动态对象影响的特征点剔除的效果没有达到理想效果,但与ORB_SLAM2相比精度确实提高了很多,采用方法2在速度方面也没有太大影响。
一开始采用方法1的想法是可以获取所有人所在区域的坐标点集合,然后将提取的特征点与此坐标点集合进行对比判断进而剔除,但是在实现过程中发现利用YOLOv8获得的坐标点为整型坐标(我刚开始认为图像是由一个个像素组成的,一个点就是一个像素,因为我将获取的坐标点集合在空白画布上展现是图像是连续的,在上一篇博客里面写过,之后我会继续思考方法1的),而提取的特征点坐标是浮点型,很多应该被剔除的特征点却没有被剔除,而且由于提取的特征点是比较多的,人所在区域的坐标点也是很多的,使用嵌套循环时速度就会很慢了。
而方法2是利用识别物体的检测框来判断提取的特征点是否为动态对象的特征点,但是在程序运行时,比如以desk_with_person为数据集时,person坐在chair上面,chair的检测框是比较大的,导致许多person身上的特征点没有被剔除。
如果朋友们有更好的方法还请分享一下。一起学习!一起进步!

这篇关于基于ORB-SLAM2与YOLOv8剔除动态特征点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/719459

相关文章

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

HTML5 中的<button>标签用法和特征

《HTML5中的<button>标签用法和特征》在HTML5中,button标签用于定义一个可点击的按钮,它是创建交互式网页的重要元素之一,本文将深入解析HTML5中的button标签,详细介绍其属... 目录引言<button> 标签的基本用法<button> 标签的属性typevaluedisabled

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

golang实现动态路由的项目实践

《golang实现动态路由的项目实践》本文主要介绍了golang实现动态路由项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习... 目录一、动态路由1.结构体(数据库的定义)2.预加载preload3.添加关联的方法一、动态路由1

Python Selenium动态渲染页面和抓取的使用指南

《PythonSelenium动态渲染页面和抓取的使用指南》在Web数据采集领域,动态渲染页面已成为现代网站的主流形式,本文将从技术原理,环境配置,核心功能系统讲解Selenium在Python动态... 目录一、Selenium技术架构解析二、环境搭建与基础配置1. 组件安装2. 驱动配置3. 基础操作模