视觉SLAM/opencv特征匹配相关函数

视觉SLAM/opencv特征匹配相关函数

  • 1、提取特征FeatureDetector
    • 1.1用法:
    • 1.2数据结构:
    • 1.3其中的成员函数detect的数据结构
    • 1.4其中ORB::Create函数的数据结构
    • 1.5 KeyPoint的数据结构
  • 2、计算描述子DescriptorExtractor
    • 2.1用法
    • 2.2数据结构
    • 2.3其中子函数compute的数据结构
  • 3、另一种方法:detectAndCompute函数
    • 3.1用法
    • 3.2数据结构
  • 4、匹配DescriptorMatcher
    • 4.1 用法
    • 4.2DMatch的数据结构
    • 4.3、DescriptorMatcher的数据结构(部分)
  • 5、匹配筛选
  • 6、关于FeatureDetector与DescriptorExtractor的说明

1、提取特征FeatureDetector

1.1用法:

Ptr detecor = ORB::create();/Ptr detecor = ORB::create();/Ptr detector = SURF::create( minHessian );
vector keypoints_1;
detector->detect( img_1, keypoints_1);

1.2数据结构:

视觉SLAM/opencv特征匹配相关函数_第1张图片

视觉SLAM/opencv特征匹配相关函数_第2张图片

1.3其中的成员函数detect的数据结构

视觉SLAM/opencv特征匹配相关函数_第3张图片

1.4其中ORB::Create函数的数据结构

    CV_WRAP static Ptr create(int nfeatures=500, float scaleFactor=1.2f, int nlevels=8, int edgeThreshold=31,
        int firstLevel=0, int WTA_K=2, int scoreType=ORB::HARRIS_SCORE, int patchSize=31, int fastThreshold=20);

1.5 KeyPoint的数据结构

视觉SLAM/opencv特征匹配相关函数_第4张图片

2、计算描述子DescriptorExtractor

2.1用法

Ptr descriptor = ORB::create();
Mat descriptors_1;
descriptor->compute( img_1, keypoints_1,descriptors_1 );
//在descriptors_1中每一行roll储存一个对应的关键点的描述子

2.2数据结构

视觉SLAM/opencv特征匹配相关函数_第5张图片
视觉SLAM/opencv特征匹配相关函数_第6张图片

2.3其中子函数compute的数据结构

视觉SLAM/opencv特征匹配相关函数_第7张图片
视觉SLAM/opencv特征匹配相关函数_第8张图片

3、另一种方法:detectAndCompute函数

3.1用法

视觉SLAM/opencv特征匹配相关函数_第9张图片

3.2数据结构

视觉SLAM/opencv特征匹配相关函数_第10张图片

4、匹配DescriptorMatcher

4.1 用法

Ptr matcher = DescriptorMatcher::create( "BruteForce-Hamming" );
vector match;
matcher->match(descriptors_1, descriptors_2, match);

4.2DMatch的数据结构

视觉SLAM/opencv特征匹配相关函数_第11张图片


调用方式:match.distance,可以与double类型的数据比较

4.3、DescriptorMatcher的数据结构(部分)

class CV_EXPORTS_W DescriptorMatcher : public Algorithm
{
public:
   enum
    {
        FLANNBASED            = 1,
        BRUTEFORCE            = 2,
        BRUTEFORCE_L1         = 3,
        BRUTEFORCE_HAMMING    = 4,
        BRUTEFORCE_HAMMINGLUT = 5,
        BRUTEFORCE_SL2        = 6
    };

5、匹配筛选

保留距离小于max(30.0,2*最小距离)的匹配

6、关于FeatureDetector与DescriptorExtractor的说明

FeatureDetector与DescriptorExtractor都是cv::Feature2D的别名,所以两者是相同的,以上分开使用是为了能体现特征提取描述子计算的步骤,第一二步可以用下面的代码来替代

cv::Ptr feature = cv::ORB::create();
feature->detect( img_1, keypoints_1 );
feature->compute( img_1, keypoints_1, descriptors_1);

你可能感兴趣的:(SLAM)