Stereo-Odometry-SOFT

授权协议 MIT License
开发语言
所属分类 应用工具、 科研计算工具
软件类型 开源软件
地区 不详
投 递 者 彭阳荣
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Stereo-Odometry-SOFT

This repository is a MATLAB implementation of the Stereo Odometry based on careful Feature selection and Tracking. The code is released under MIT License.

The code has been tested on MATLAB R2018a and depends on the following toolboxes:

  • Parallel Processing Toolbox
  • Computer Vision Toolbox

On a laptop with Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz and 16GB RAM, the following average timings were observed:

  • Time taken for feature processing (in ms): 261.4
  • Time taken for feature matching (in ms): 3650.5
  • Time taken for feature selection (in ms): 6.5
  • Time taken for motion estimation (in ms): 1.1

How to run the repository?

  1. Clone the repository using the following command:
git clone https://github.com/Mayankm96/Stereo-Odometry-SOFT.git
  1. Import the dataset to the folder data. In case you wish to use the KITTI Dataset, such as the Residential dataset, the following command might be useful:
cd PATH/TO/Stereo-Odometry-SOFT
## For Reseidential Sequence: 61 (2011_09_46_drive_0061)
# synced+rectified data
wget -c https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0009/2011_09_26_drive_0009_sync.zip -P data
# calib.txt
wget -c https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_calib.zip -P data
  1. Change the corresponding paramters in the configuration file configFile.m according to your need

  2. Run the script main.m to get a plot of the estimated odometry

Proposed Implementation of the Algorithm

The input to the algorithm at each time frame, are the left and right images at the current time instant, and the ones at the previous timestamp.

Keypoints Detection

In this section, the keypoints detection and matching is divided into following separate stages:

  • feature processing: each image is searched for locations that are likely to match well in other images
  • feature matching: efficiently searching for likely matching candidates in other images
  • feature tracking: unlike to the second stage, the correspondences are searched in a small neighborhood around each detected feature and across frames at different time steps

Feature processing

Corner and blob features are extracted for each image using the following steps:

  1. First, blob and checkerboard kernels are convolved over the input image.

  1. Efficient Non-Maximum Suppression is applied on the filter responses to produce keypoints that may belong to either of the following classes: blob maxima, blob minima, corner maxima, and corner minima. To speed up the feature matching, correspondences are only found between features belong to the same class.

  2. The feature descriptors are constructed by using a set of 16 locations out of an 11 x 11 block around each keypoint in input image's gradients. The gradient images are computed by convolving 5 x 5 sobel kernels across the input image. The descriptor has a total length of 32,

Feature matching

This part of the algorithm is concerned with finding the features for egomotion estimation. It is based on the process mentioned in the paper StereoScan: Dense 3d reconstruction in real-time. The process can be summarized as follows:

  1. Correspondences in two images are found by computing the Sum of Absolute Differences (SAD) score between a feature in the first image with the one lying in the second image that belongs to the same class

  2. This matching is done in a circular fasion between the left and right frames at time instants t-1 and t as shown below:

  1. To remove certain outliers, Normalized Cross-Correlation (NCC) is again in a circular fasion using templates of size 21 x 21 pixels around the features that have been matched successfully in the process mentioned above.

Feature Selection

To ensure a uniform distribution of features across the image, the entire image is divided into buckets of size 50 x 50 pixels and feature selection is done to select only the strongest features present in each bucket.

Egomotion Estimation

Using P3P algorithm along with RANSAC, incremental rotation and translation is estimated.

To-Dos

  • fix parfor and for loops to enable running without parallel processing
  • read the camera calibration parameters from calibration file directly
  • add sub-pixel refinement using parabolic fitting
  • add feature selection based on feature tracking i.e. the age of features
  • implement Nister's algorithm and SLERP for rotation estimation
  • use Gauss-Newton optimization to estimate translation from weighted reprojection error
  • D1: Percentage of stereo disparity outliers in first frame D2: Percentage of stereo disparity outliers in second frame Fl: Percentage of optical flow outliers SF: Percentage of scene flow outliers (=o

  • Abstract 本文介绍了一种考虑传感器输入中高斯噪声的视觉里程计,它结合特征点和特征线,提升了系统的鲁棒性和在较低语义场景下的稳定、可靠性。 Introduction 介绍了一些之前的案例,本文中主要的创新点建立在考虑到了传感器采集数据时候存在的高斯噪声,这样可以直接和存在高斯噪声的系统进行融合,通过最小化加权代价函数的方式求解相对位姿变换。 System Overview 通过提取匹配帧内的

  • Abstract 在某些场景中语义信息不是很丰富,单纯的依靠点型特征信息无法实现鲁棒性的获取位姿变换信息,因此本文提出一种结合点特征和线性特征的视觉里程计,提升了视觉里程计的鲁棒性,同时在线性特征匹配中对右侧视图中的特征部分由于遮挡等原因无法完全可视化,依旧可以在右侧视图中精准的匹配到于左侧对应的线性特征。 Introduction 本文章中所做的贡献: 适应多种场景,无论场景中是否有丰富的语义信

 相关资料
  • photometric-stereo A MATLAB Implementation of the Basic Photometric Stereo Algorithm This project implements the basic photometric stereo algorithm that essentially uses the least squares method. Give

  • 使用 OpenCV 函数, 这个项目能从成对的立体图像中重建场景。

  • 问题内容: 我在JVM中运行了两个单独的缓存(一个由第三方库控制),每个缓存都使用软引用。我希望JVM在库控制的缓存之前先清除受控的缓存。SoftReference javadoc指出: 在虚拟机引发OutOfMemoryError之前,确保已清除所有对软可访问对象的软引用。否则,在清除软引用的时间或清除对不同对象的一组此类引用的时间上将没有任何限制。但是,鼓励虚拟机实现偏向于清除最近创建或最近使

  • 问题内容: 码: CFG: 问题是我有一些密钥对,我用pkcs11-tool添加了它们。 softhsm的版本是1.2.1 为什么在密钥库中没有任何别名?如何解决这个问题? 问题答案: 我们将很快发布SoftHSM 1.3.0。它支持证书,并已通过Java测试。 SoftHSM.java: softhsm.cfg:

  • 问题内容: 我正在为Android应用程序实现缓存机制。 我使用,就像发现的许多示例一样。问题是,当我向上或向下滚动时, 大多数 图像已被清除。我在LogCat中看到,每次应用程序加载新图像时,我的应用程序都会被垃圾回收。这意味着中的 大多数 不可见图像都消失了。 因此,每次我 滚动回到 较早的位置(之前我确实下载过图像)时,都必须再次下载图像-它们 不会被 缓存 。 我也研究了这个话题。根据Ma

  • 问题内容: 是否有类似于Java的OllyDbg / SoftICE的实用程序?即执行类(从jar /具有类路径),并且没有源代码,显示了中间代码的反汇编,能够逐步执行/遍历/搜索引用/在内存中编辑特定的中间代码/将编辑应用于文件。 。 如果不是,甚至有可能编写类似这样的内容(假设我们愿意在调试期间没有热点的情况下生存)? 编辑:我不是在谈论JAD或JD或Cavaj。这些是很好的反编译器,但是由于