FAST角点的主要优势就是速度快,比SIFT快了几乎一个数量级,从而可以满足SLAM实时性的要求。
Shi-Tomas角点是vins-mono中使用的角点。
下面我对这两种角点在检测上的速度和能够检测到的最大角点数量进行了对比。
使用两种角点对KITTI数据集中的28帧图片进行检测,检测结果如下:
下图显示了ShiTomas角点检测到的角点数量及其花费的时间
下图显示了FAST角点检测到的角点数量及其花费的时间
可以看出,提取相同的28帧图片,FAST角点检测方法提取到了更多的角点,且花费的时间要小于ShiTomas。
FAST的快果然名不虚传。
下面附上这两种提取算法的代码:
#include <iostream>
#include <opencv2/opencv.hpp>
#include <chrono>
using namespace std;
using namespace cv;
int main(int argc , char* argv[])
{
int thread_value = 30;
vector<String> files; //存放文件路径
vector<Mat> images; //存放文件数据
//读取文件夹下所有符合要求的文件路径
glob("/home/wang/code/jiaodian/testingpicture/*.png", files, true);
size_t num = files.size(); //读取的符合条件的文件个数
chrono::steady_clock::time_point t1 = chrono::steady_clock::now();
for (int i = 0; i < num; i++)
{
//Mat after_fast_image;
Mat img = imread(files[i], IMREAD_GRAYSCALE); //读取灰度图像
if (img.empty())
{
cerr << files[i] << " can't be loaded!" << endl;