精华内容
下载资源
问答
  • 特征匹配

    2018-09-16 10:36:22
    特征匹配 匹配方法: 1. 暴力匹配 暴力方法找到点集1中每个descriptor在点集2中距离最近的descriptor;找寻到的距离最小就认为匹配 2. Flann 是一个对大数据集和高维特征进行最近邻搜索的算法的集合,在...

    特征匹配

    匹配方法

    1. 暴力匹配
      暴力方法找到点集1中每个descriptor在点集2中距离最近的descriptor;找寻到的距离最小就认为匹配
    2. Flann
      是一个对大数据集和高维特征进行最近邻搜索的算法的集合,在面对大数据集时它的效果要好于BFMatcher。

    KNN

    KNN(k-NearestNeighbor)即k个最邻近距离,不管是暴力匹配还是flann算法都可以输出k个最邻近匹配。

    去粗差方法

    两组特征匹配了,但其中可能存在False-positive matches 即存在错误匹配,我们称其为粗差。
    去除粗差匹配的方法:

    1. 交叉验证

    针对暴力匹配,可以使用交叉匹配的方法来过滤错误的匹配。交叉过滤的思想很简单,再进行一次匹配,反过来使用被匹配到的点进行匹配,如果匹配到的仍然是第一次匹配的点的话,就认为这是一个正确的匹配。举例来说就是,假如第一次特征点A使用暴力匹配的方法,匹配到的特征点是特征点B;反过来,使用特征点B进行匹配,如果匹配到的仍然是特征点A,则就认为这是一个正确的匹配,否则就是一个错误的匹配。OpenCV中BFMatcher已经封装了该方法,创建BFMatcher的实例时,第二个参数传入true即可,BFMatcher bfMatcher(NORM_HAMMING,true)。

    2. Ratio test

    K近邻匹配,在匹配的时候选择K个和特征点最相似的点,如果这K个点之间的区别足够大,则选择最相似的那个点作为匹配点,通常选择K = 2,也就是最近邻匹配。对每个匹配返回两个最近邻的匹配,如果第一匹配和第二匹配距离比率足够大(向量距离足够远),则认为这是一个正确的匹配,比率的阈值通常在2左右。

    3. RANSAC

    随机采样一致性(RANSAC)可过滤掉错误的匹配,该方法利用匹配点计算两个图像之间单应矩阵,并分解得到位姿R,t,通过三角测量来得到两个关联特征对应的3D点,将3D点按照当前估计的位姿进行投影,也就是重投影,然后利用重投影误差(观测到得投影位置(像素坐标)与3D点进行重投影的位置之差)来判定某一个匹配是不是正确的匹配。


    Opencv中各种实现详情见:
    https://www.cnblogs.com/Jessica-jie/p/8622449.html
    http://www.cnblogs.com/wangguchangqing/p/4333873.html

    展开全文
  • 特征匹配的概念. 基于特征点的影像匹配策略. 跨接法影像匹配
  • 2、Harris特征匹配 Harris角点检测器可以给出图像中检测到兴趣点,但它并没有提供在图像间对兴趣点进行比较的方法,我们需要在每个角点添加描述子,以及对这些描述子进行比较。 代码: # -*- coding: utf-8 -*- from...

    1、比较Harris角点和SIFT特征的不同

    在这里插入图片描述
    对一幅图像提取SIFT特征,可以看到,两个算法所选择的特征点的位置不同。

    2、Harris特征匹配

    Harris角点检测器可以给出图像中检测到兴趣点,但它并没有提供在图像间对兴趣点进行比较的方法,我们需要在每个角点添加描述子,以及对这些描述子进行比较。

    代码:
    # -*- coding: utf-8 -*-
    from pylab import *
    from PIL import Image
    
    from PCV.localdescriptors import harris
    from PCV.tools.imtools import imresize
    
    """
    This is the Harris point matching example in Figure 2-2.
    """
    
    # Figure 2-2上面的图
    #im1 = array(Image.open("../data/crans_1_small.jpg").convert("L"))
    #im2= array(Image.open("../data/crans_2_small.jpg").convert("L"))
    
    # Figure 2-2下面的图
    im1 = array(Image.open("D:/picture/07.jpg").convert("L"))
    im2 = array(Image.open("D:/picture/08.jpg").convert("L"))
    
    # resize加快匹配速度
    im1 = imresize(im1, (im1.shape[1]//2, im1.shape[0]//2))
    im2 = imresize(im2, (im2.shape[1]//2, im2.shape[0]//2))
    
    wid = 5
    harrisim = harris.compute_harris_response(im1, 5)
    filtered_coords1 = harris.get_harris_points(harrisim, wid+1)
    d1 = harris.get_descriptors(im1, filtered_coords1, wid)
    
    harrisim = harris.compute_harris_response(im2, 5)
    filtered_coords2 = harris.get_harris_points(harrisim, wid+1)
    d2 = harris.get_descriptors(im2, filtered_coords2, wid)
    
    print ('starting matching')
    matches = harris.match_twosided(d1, d2)
    
    figure()
    gray() 
    harris.plot_matches(im1, im2, filtered_coords1, filtered_coords2, matches)
    show()
    
    
    

    出现了如下的报错:
    在这里插入图片描述
    出错原因是因为参数是要求为整数,所以将/改成//就可以了。
    如图:
    在这里插入图片描述
    结果是这个样子的:
    在这里插入图片描述
    可以看到匹配出现了很多的错误,虽然在建筑物上面的特征点有正确匹配到,但是旁边的树成了很大的干扰因素。

    3、SIFT特征匹配

    SIFT匹配结果是这样的:
    在这里插入图片描述
    结果的match为什么只有两条连接呢,我觉得可能是使用对称匹配条件,去除了不正确的匹配,反而把好的匹配也去除掉了。
    所以我将match_twosided()函数改成了match()函数,运行结果如下图:
    在这里插入图片描述

    展开全文
  • BRISK特征匹配

    千次阅读 2016-01-05 14:02:44
    BRISK特征匹配

    BRISK原理:http://blog.csdn.net/quincuntial/article/details/50462126

    /*
     *@function BRISK_Detect.cpp
     *@brief 使用BRISK特征检测并匹配目标
     *@author ltc
     *@date 17:16 Thursday,December 3rd,2015
    */
    
    #include<opencv2\core\core.hpp>
    #include<opencv2\highgui\highgui.hpp>
    #include<opencv2\features2d\features2d.hpp>
    #include<opencv2\calib3d\calib3d.hpp>
    
    #include<iostream>
    
    using namespace std;
    using namespace cv;
    
    int main(int argc,char* argv[])
    {
    	Mat queryImage,trainImage;
    	queryImage=imread("4.jpg",IMREAD_COLOR);
    	trainImage=imread("2.jpg",IMREAD_COLOR);
    	
    	vector<KeyPoint> queryKeyPoint,trainKeyPoint;
    	Mat queryDescriptor,trainDescriptor;
    	
    	int thresh=60;
    	int octave=4;
    	float patternScale=1.0f;
    
    	BRISK briskDetector(thresh,octave,patternScale);
    	briskDetector.detect(queryImage,queryKeyPoint);
    	briskDetector.compute(queryImage,queryKeyPoint,queryDescriptor);
    	
    	briskDetector.detect(trainImage,trainKeyPoint);
    	briskDetector.compute(trainImage,trainKeyPoint,trainDescriptor);
    	
    	drawKeypoints(queryImage,queryKeyPoint,queryImage);
    	drawKeypoints(trainImage,trainKeyPoint,trainImage);
    
    	imshow("query",queryImage);
    	imshow("train",trainImage);
    
    	vector<DMatch> matches;
    	BFMatcher matcher(NORM_HAMMING);
    
    	matcher.match(queryDescriptor,trainDescriptor,matches);
    
    	Mat image_match;
    	
    	drawMatches(queryImage,queryKeyPoint,trainImage,trainKeyPoint,matches,image_match);
    
    	imshow("image_match",image_match);
    	
    	waitKey(0);
    	return 0;
    }

    匹配结果:


    展开全文
  • BRIEF特征匹配

    千次阅读 2016-01-05 12:16:15
    BRIEF特征匹配

    BRIEF原理:http://blog.csdn.net/quincuntial/article/details/50461649

    /*
     *@function BRIEFK_Detect.cpp
     *@brief 使用BRIEF特征检测并匹配目标
     *@author ltc
     *@date 19:06 Thursday,December 3rd,2015
    */
    
    #include<opencv2\core\core.hpp>
    #include<opencv2\highgui\highgui.hpp>
    #include<opencv2\features2d\features2d.hpp>
    #include<opencv2\calib3d\calib3d.hpp>
    
    #include<iostream>
    
    using namespace std;
    using namespace cv;
    
    int main(int argc,char* argv[])
    {
    	Mat queryImage,trainImage;
    	queryImage=imread("1.jpg",IMREAD_COLOR);
    	trainImage=imread("2.jpg",IMREAD_COLOR);
    	
    	vector<KeyPoint> queryKeyPoint,trainKeyPoint;
    	Mat queryDescriptor,trainDescriptor;
    	
    
    	StarDetector starDetector;
    	starDetector.detect(queryImage,queryKeyPoint);
    	starDetector.detect(trainImage,trainKeyPoint);
    
    
    	BriefDescriptorExtractor briefDetector;
    	briefDetector.compute(queryImage,queryKeyPoint,queryDescriptor);
    	briefDetector.compute(trainImage,trainKeyPoint,trainDescriptor);
    	
    
    	drawKeypoints(queryImage,queryKeyPoint,queryImage);
    	drawKeypoints(trainImage,trainKeyPoint,trainImage);
    
    	imshow("query",queryImage);
    	imshow("train",trainImage);
    
    	vector<DMatch> matches;
    	BFMatcher matcher(NORM_HAMMING);
    	matcher.match(queryDescriptor,trainDescriptor,matches);
    
    	Mat image_match;
    	drawMatches(queryImage,queryKeyPoint,trainImage,trainKeyPoint,matches,image_match);
    
    	imshow("image_match",image_match);
    	
    	waitKey(0);
    	return 0;
    }

    匹配结果:


    展开全文
  • 特征匹配算法

    千次阅读 2020-06-03 16:51:21
    看论文《特征匹配算法研究及其在目标跟踪上的应用》,感谢! 特征匹配算法 目前 SIFT 算法和 ORB 算法获得了研究者的青睐,但是因为 SIFT 算法是对图像进行全局的特征点检测耗时较长,造成算法的运行速度慢,达不到...
  • FLANN特征匹配

    万次阅读 2018-12-03 21:52:41
    FLANN (Fast Approximate ... 特征匹配记录下目标图像与待匹配图像的特征点(KeyPoint),并根据特征点集合构造特征量(descriptor),对这个特征量进行比较、筛选,最终得到一个匹配点的映射集合。我们也可以根...
  • Surf特征匹配Matlab代码

    2018-12-25 10:57:55
    详细的 Surf特征匹配Matlab代码,子函数很多;有助于对Surf特征匹配的学习与理解,是个很不错的代码。
  • opencv 特征匹配 使用特征匹配和单应性查找对象 在一张杂乱的图像中找到了一个对象(的某些部分)的位置。这些信息足以帮助我们在目标图像中准确的找到(查询图像)对象。为了达到这个目的我们可以使用 calib3d ...
  • ORB特征匹配

    2020-06-12 11:25:50
    策略汇总(十一种特征匹配策略) SearchForInitialization SearchByBow->2种 SearchByProjection->4种 SearchForTriangulation Fuse->2种 SearchBySim3 1....
  • 图像特征匹配

    2020-03-28 10:46:54
    本文主要演示利用opencv自带的特征检测算子做图像的特征匹配。 检测算子包括 SIFT SURF ORB 特征描述子提取算子包括 SIFT SURF ORB VGG 匹配算法 FlannBasedMatcher 本文不对相关原理做介绍,只演示其用法,...
  • C 特征匹配源码,都是一些特征匹配类文件,在开发的时候用得上,基于opencv的特征匹配,用的算法是sift,包含大部分源代码,懂得的朋友按照文件加载即可使用。
  • 特征检测和特征匹配方法

    千次阅读 2017-12-19 19:25:24
    特征检测和特征匹配方法 一幅图像中总存在着其独特的像素点,这些点我们可以认为就是这幅图像的特征,成为特征点。计算机视觉领域中的很重要的图像特征匹配就是一特征点为基础而进行的,所以,如何定义...
  • SIFT特征匹配

    2018-07-28 11:40:43
    SIFT特征匹配 一、特征点(角点)匹配  图像匹配能够应用的场合非常多,如目标跟踪,检测,识别,图像拼接等,而角点匹配最核心的技术就要属角点匹配了,所谓角点匹配是指寻找两幅图像之间的特征像素点的对应...
  • Harris 角点检测 特征匹配 C++基于Harris的特征检测与匹配
  • 特征提取、特征描述、特征匹配的通俗解释

    千次阅读 多人点赞 2018-09-16 12:52:54
    特征匹配(Feature Match)是计算机视觉中很多应用的基础,比如说图像配准,摄像机跟踪,三维重建,物体识别,人脸识别,所以花一些时间去深入理解这个概念是不为过的。本文希望通过一种通俗易懂的方式来阐述特征匹配...
  • opencv 特征检测和特征匹配方法汇总

    万次阅读 多人点赞 2019-05-29 02:56:37
    计算机视觉领域中的很重要的图像特征匹配就是一特征点为基础而进行的,所以,如何定义和找出一幅图像中的特征点就非常重要。这篇文章我总结了视觉领域最常用的几种特征点以及特征匹配的方法。 在计算机视觉领域,...
  • SIFT地理特征匹配

    2021-03-28 20:57:31
    SIFT 算法被认为是图像匹配效果好的方法之 一算法实现特征匹配主要有三个流程: ①特征点提取; ②特征点主方向确定; ③特征点描述; ④特征点匹配; 其中特征点提取主要包括生成高斯差分(DifferenceofG
  • C#-EmguCV 特征匹配

    2018-05-09 10:50:39
    C#版本EmguCV,实现特征匹配,对特征点进行处理,标识
  • 针对ORB算法特征匹配精度低的缺陷,结合金字塔光流特性,提出一种优化ORB特征匹配的方法。首先,采用区域分块法对待匹配图像进行处理,挑选出最佳匹配子块,缩小无效匹配区域;接着,对子块提取ORB关键字并计算匹配描述子...
  • 特征检测和特征匹配方法汇总引言1.SURF2.SIFT3.ORB4.FAST5.Harris角点 引言 转载自博客,一幅图像中总存在着其独特的像素点,这些点我们可以认为就是这幅图像的特征,成为特征点。计算机视觉领域中的很重要的图像...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,416
精华内容 6,566
关键字:

特征匹配