精华内容
下载资源
问答
  • FLANN算法代码

    2015-08-30 11:06:26
    FLANN算法的源码,c++
  • FLANN算法特征匹配

    2018-12-05 12:27:22
    利用OpenCV和vs2015,FLANN算法进行特征点匹配。。。。。
  • 分析对比了采用传感器输入输出设计的FLANN算法补偿器与采用零极点配置法进行动态补偿的效果。结果表明,采用FLANN算法设计的补偿器具有更小的补偿误差,且有效扩展了速度传感器的使用频带,很好地满足了工程上超低频...
  • 基于FLANN算法的传感器动态补偿,是一种改进的动态补偿方法。
  • FLANN 是快速最临近邻搜索包的简称Fast_Library_for_Approximate_Nearest_...使用FLANN算法进行匹配时,需要传入两个字典作为参数。这两个字典是为了确定要使用的算法和其他相关参数等。 第一个字典是 IndexPar...

    FLANN 是快速最临近邻搜索包的简称Fast_Library_for_Approximate_Nearest_Neighbors的简称。它是一个对大数据集和高维特征进行最近邻搜索的算法的集合。

    特点:在面对大数据集时它的效果要好于 BFMatcher。


    使用FLANN算法进行匹配时,需要传入两个字典作为参数。这两个字典是为了确定要使用的算法和其他相关参数等。

    1. 第一个字典是 IndexParams。对于SIFT 和SURF 等算法我们可以传入的参数是: indexparams = dict(algorithm = F LANNINDEXKDTREE, trees = 5)
    2. 第二个字典是 SearchParams。用它来指定递归遍历的次数。值越高结果越准确,但是消耗的时间也越多。如果想修改这个值,传入参数searchparams = dict(checks = 100)。

    使用一个查询图像,在其中找到一些特征点(关键点),我们又在另一幅图像中也找到了一些特征点,最后对这两幅图像之间的特征点进行匹配。简单来说就是:我们在一张杂乱的图像中找到了一个对象(的某些部分)的位置。这些信息足以帮助我们在目标图像中准确的找到(查询图像)对象。 

    可以使用 calib3d 模块中的 cv2.findHomography()函数。如果将这两幅图像中的特征点集传给这个函数,他就会找到这个对象的透视图变换。然后就可以使用函数cv2.perspectiveTransform() 找到这个对象了。至少要 4 个正确的点才能找到这种变换。 

    我们已经知道在匹配过程可能会有一些错误匹配,而这些错误会影响最终结果。为了解决这个问题,算法使用 RANSAC 和 LEAST_MEDIAN(可以通过参数来设定)。所以好的匹配提供的正确的估计被称为 inliers,剩下的被称为outliers cv2.findHomography() 返回一个掩模,这个掩模确定了 inlier 和outlier 点。

    代码如下图所示:

    import cv2
    from matplotlib import pyplot as plt
    import numpy as np
    
    MIN_MATCH_COUNT = 10
    
    img1 = cv2.imread('shu1.jpg', 0)
    img2 = cv2.imread('shu2.jpg', 0)
    
    sift = cv2.xfeatures2d.SIFT_create()
    kp1, des1 = sift.detectAndCompute(img1, None)
    kp2, des2 = sift.detectAndCompute(img2, None)
    
    FLANN_INDEX_KDTREE = 0
    indexParams = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
    searchParams = dict(checks=50)
    
    flann = cv2.FlannBasedMatcher(indexParams, searchParams)
    
    matches = flann.knnMatch(des1, des2, k=2)
    
    good = []
    for m, n in matches:
        if m.distance < 0.7 * n.distance:
            good.append(m)
    
    if len(good) > MIN_MATCH_COUNT:
        src_pts = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)
        dst_pts = np.float32([kp2[m.trainIdx].pt for m in good]).reshape(-1, 1, 2)
        M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)
    
        matchesMask = mask.ravel().tolist()
        h, w = img1.shape
        pts = np.float32([[0, 0], [0, h - 1], [w - 1, h - 1], [w - 1, 0]]).reshape(-1, 1, 2)
        dst = cv2.perspectiveTransform(pts, M)
    
        img2 = cv2.polylines(img2, [np.int32(dst)], True, 255, 3, cv2.LINE_AA)
    else:
        print("Not Enough")
        matchesMask = None
    
    drawParams = dict(matchColor=(0, 255, 0),
                      singlePointColor=None,
                      matchesMask=matchesMask,
                      flags=2
                      )
    resultImage = cv2.drawMatches(img1, kp1, img2, kp2, good, None, **drawParams)
    plt.xticks([]), plt.yticks([])
    plt.imshow(resultImage), plt.show()
    

    运行结果如图所示:

    绿色为匹配线,白色为左边图框的单应性映射线
    展开全文
  • 单纯原始的FLANN算法如下,会有图像畸变难处理、特征值过多没有闸值限制等问题,如下: # -*- coding:utf-8 -*- # 创建时间:2019年7月28日 # FLANN算法匹配检测; # 修改:模块化封装 # 注:安装opencv-contrib-...

    单纯原始的FLANN算法如下,会有图像畸变难处理、特征值过多没有闸值限制等问题,如下:

    # -*- coding:utf-8 -*-
    # 创建时间:2019年7月28日
    # FLANN算法匹配检测;
    # 修改:模块化封装
    # 注:安装opencv-contrib-python 3.4.2.17以下版本
    
    import cv2
    
    # FLANN算法特征匹配检测
    # 输入参数:查询图像train_img;训练图像frame
    # 输出参数:匹配得到的特征值数量len(matches)
    # 注:二维码等匹配目标时滤波会滤去过多的细节信息,此时不建议使用
    def FLANN_inspect(train_img, frame):
        # 高斯滤波进行平滑处理
        # train_img_gray = cv2.cvtColor(train_img, cv2.COLOR_BGR2GRAY)
        # train_img_gray = cv2.GaussianBlur(train_img_gray, (1, 1), 0)
        # frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # frame_gray = cv2.GaussianBlur(frame_gray, (1, 1), 0)
        # 创建sift检测器
        sift = cv2.xfeatures2d.SIFT_create()
        # 查找监测点和匹配符
        kp1, des1 = sift.detectAndCompute(img1, None)
        kp2, des2 = sift.detectAndCompute(img1, None)
        """
        keypoint是检测到的特征点的列表
        descriptor是检测到特征的局部图像的列表
        """
        # 获取f
    展开全文
  • 记录将FLANN算法编译成MEX文件的过程

    千次阅读 2016-07-08 13:56:37
    在重现文章《Vocmatch:Efficient Multiview Correspondence for Structure from Motion》所做的研究工作中,我们遇上了如何将FLANN算法的C++代码转换成MEX文件的问题。我们使用的软件是Matlab R2015b以及MSVC2010。...

    在重现文章《Vocmatch:Efficient Multiview Correspondence for Structure from Motion》所做的研究工作中,我们遇上了如何将FLANN算法的C++代码转换成MEX文件的问题。我们使用的软件是Matlab R2015b以及MSVC2010。利用这篇文章,记录一下debug的过程。


    参见:http://www.prs.igp.ethz.ch/research/projects/vocmatch.html

    参见:http://www.cs.ubc.ca/research/flann/


    我们最初遇到的问题为“fatal error C1083: 无法打开包括文件:“flann/flann.h”: No such file or directory”

    #include <flann/flann.h>


    其实这是一个很低级的问题。在《C++程序设计(第2版)》(吴乃陵 况迎辉著)中对这个问题有如下解释:“#include<xxx>方式为标准方式,预处理器将在include子目录下搜索由文件名所指明的文件。这种方式适用于嵌入C++提供的头文件,因为这些头文件一般都存在C++系统目录的include子目录下。而对于#include"xxx",编译器将首先在当前文件所在目录下搜索,如果找不到,再按标准方式搜索,这种方式适用于嵌入用户自己建立的头文件。” 简单来说,即对于C++本身提供的头文件,用<>;自己编译的头文件,用""。


    用mex的编译指令编译数次,改掉几个同种错误之后,我们又遇到非常棘手的一个错误。错误如下:

    nearest_neighbors.obj : error LNK2019: 无法解析的外部符号 flann_find_nearest_neighbors_int,该符号在函数 "void __cdecl _find_nn(int,struct mxArray_tag * *
    const,int,struct mxArray_tag const * * const)" (?_find_nn@@YAXHQEAPEAUmxArray_tag@@HQEAPEBU1@@Z) 中被引用。

    一共有26个同种错误。


    对于这个问题我们尝试了很多方案,甚至更换了多个Matlab版本,都没有解决。经我们分析,该错误可能是:通过编译nearest_neighbors.cpp,由于nearest_neighbors.cpp内只包含了flann.h头文件,而flann.h头文件只是函数声明,函数的实现在flann.hpp和flann.cpp中,但是因为没有C++工程文件,所以编译器在LINK时找不到函数的实现,故而报错。我们的解决方案是:将flann.hpp文件合并进flann.h文件中,同时删去flann.hpp文件;将flann.cpp重命名为flanncpp.h,在flann.h的末尾添加#include "flanncpp.h"。


    完成这一系列改动后,再次使用mex指令编译nearest_neighbors.cpp,会得到一共error和很多warning,error如下:

     error C2228: “.serialize”的左边必须有类/结构/联合
            类型是“unsigned __int64”

    对于这个错误,我们参考了:http://www.vcerror.com/?p=719


    利用这篇文章的方法修改后,再次用mex指令编译nearest_neighbors.cpp,会有如下错误:

    c:\program files (x86)\microsoft visual studio 10.0\vc\include\vector(1271) : fatal error C1128: 节数超过对象文件格式限制: 请使用 /bigobj 进行编译。


    我们的解决方法是,打开mex_C++_win64.xml文件(建议利用mex -v -O指令来找到该文件的路径),将其中的COMPFLAGS="/GR /W3 /EHs /nologo /MD $INCLUDE  $COMPDEFINES"修改为          COMPFLAGS="/GR /W3 /EHs /nologo /MD /bigobj $INCLUDE  $COMPDEFINES"


    再次编译,我们成功的得到了mex文件。


    展开全文
  • FLANN相比较与ORB和Harris,速度快十倍以上,在嵌入式视觉硬件上最实用,以下是未...# FLANN算法匹配检测;图像金字塔;D-P轮廓算法; # 注:安装opencv-contrib-python 3.4.2.17以下版本 import cv2 # FLANN算...

    FLANN相比较与ORB和Harris,速度快十倍以上,在嵌入式视觉硬件上最实用,以下是未移植的源码

    # -*- coding:utf-8 -*-
    # 创建时间:2019年7月28日
    # 功能:识别待匹配的二维码
    # FLANN算法匹配检测;图像金字塔;D-P轮廓算法;
    # 注:安装opencv-contrib-python 3.4.2.17以下版本
    
    import cv2
    
    # FLANN算法特征匹配检测
    # 输入参数:查询图像train_img;训练图像frame
    # 输出参数:匹配得到的特征值数量len(matches)
    # 注:二维码等匹配目标时滤波会滤去过多的细节信息,此时不建议使用
    def FLANN_inspect(train_img, frame):
        # 高斯滤波进行平滑处理
        # train_img_gray = cv2.cvtColor(train_img, cv2.COLOR_BGR2GRAY)
        # train_img_gray = cv2.GaussianBlur(train_img_gray, (1, 1), 0)
        # frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # frame_gray = cv2.GaussianBlur(frame_gray, (1, 1), 0)
        # 创建sift检测器
        sift = cv2.xfeatures2d.SIFT_create()
        # 查找监测点和匹配符
        kp1, des1 = sift.detectAndCompute(train_img, None)
        kp2, des2 = sift.detectAndCompute(frame, None)
        """
        keypoint是检测到的特征点的列表
        descripto
    展开全文
  • 使用FLANN算法纠正图像匹配

    千次阅读 2018-10-23 14:25:08
    flann = cv2.FlannBasedMatcher(index_params, search_params) # 使用KNN算法匹配 matches = flann.knnMatch(des1,des2,k=2) # 去除错误匹配 good = [] for m,n in matches: if m.distance *n.distance: good....
  • Surf与flann 算法代码实现

    千次阅读 2015-08-24 14:11:17
    OpenCV图像Surf与flann特征点 分类: OpenCV2013-06-01 21:36 5391人阅读 评论(3) 收藏 举报 Surf(Speed Up Robust Feature) Surf算法的原理
  • Flann 在调用匹配函数之前,为了提高匹配速度,训练一个匹配器。训练阶段是为了优化cv::FlannBasedMatcher的性能。train类将会建立特征集的索引树。将 query image 的每一个特征点和 train 匹配器进行匹配,找出最佳...
  • 记录一下学习过程,话不多说贴代码:#include &lt;opencv2/core/core.hpp&gt; #include &lt;opencv2/features2d/features2d.hpp&gt; #include &...opencv2/flann/flann.hpp&gt; #in...
  • FLANN匹配算法

    千次阅读 2019-03-09 21:16:07
    算法的选择 1、 随机k-d树算法(The Randomized k-d TreeAlgorithm) a. Classick-d tree b. Randomizedk-d tree 2、 优先搜索k-means树算法(The Priority Search K-MeansTree Algorithm) 2.1 算法描述 3...
  • FLANN - Fast Library for Approximate Nearest Neighbors FLANN is a library for performing fast approximate nearest neighbor searches in high dimensional spaces. It contains a collection of algorithms ...
  • 基于FLANN匹配算法定位零件 import numpy as np import cv2.cv2 as cv2 from matplotlib import pyplot as plt MIN_MATCH_COUNT=10 template=cv2.imread('sam1.jpg',0) target=cv2.imread('666.jpg',0) import ...
  • matlab中存档算法代码FLANN-近似最近邻居的快速库 FLANN是用于在高维空间中执行快速近似最近邻居搜索的库。 它包含一组我们发现最适合最邻近搜索的算法,以及一个根据数据集自动选择最佳算法和最佳参数的系统。 ...
  • OpenCv-C++-FLANN特征匹配算法

    千次阅读 2018-12-08 20:25:54
    FLANN(快速最近邻逼近搜索函数库),它是一个算法库,包含一系列算法库,OpenCv中集成了FLANN的一部分匹配算法,主要对高维数据搜索比较快。 相比于上一篇的暴力匹配算法FLANN更加精确,不会有过多的描述特征匹配到...
  • FLANN算法 1、建立索引 2、进行搜索 输出结果 实现代码 FLANN算法 FLANN库全称是Fast Library for Approximate Nearest Neighbors,它是目前最完整的(近似)最近邻开源库。不但实现了一系列查找...
  • FLANN快速近似最邻近算法官方指导文档IntroductionQuick Start 快速学习Downloading and compiling FLANN 下载和编译Upgrading from a previous version 版本升级Compiling FLANN with multithreading support 多...
  • opencv-FLANN特征匹配算法实现

    千次阅读 2013-05-18 23:31:02
    FANN:Fast Approximate Nearest Neighbor Search Library. /** * @file SURF_FlannMatcher * @brief SURF detector + descriptor + FLANN Matcher * @author A. Huaman */ #include #include #include
  • Surf算法的原理  SURF角点检测算法是对SIFT的一种改进,主要体现在速度上,效率更高。它和SIFT的主要区别是图像多尺度空间的构建方法不同。  在计算视觉领域,尺度空间被象征性的表述为一个...
  • matlab中存档算法代码FLANN-近似最近邻居的快速库 FLANN是用于在高维空间中执行快速近似最近邻居搜索的库。 它包含一组我们发现最适合最邻近搜索的算法,以及一个根据数据集自动选择最佳算法和最佳参数的系统。 ...
  • 高维数据的可伸缩最近邻算法FLANN1.简介在计算机视觉和机器学习中,对于一个高维特征,找到训练数据中的最近邻计算代价是昂贵的。对于高维特征,目前来说最有效 高维数据的快速最近邻算法FLANN 1.简介 在...
  • SURF特征检测上一篇博文已经介绍过了,这里不再赘述,关键的问题是图像的特征被描述出来之后,怎样快速粗选出哪些点属于匹配点,如果不采用算法进行优化,那么这一部分的运算量是相当大的,FLANN最近邻算法的功...
  • matlab中存档算法代码FLANN-近似最近邻居的快速库 FLANN是用于在高维空间中执行快速近似最近邻居搜索的库。 它包含一组我们发现最适合最邻近搜索的算法,以及一个根据数据集自动选择最佳算法和最佳参数的系统。 ...
  • 最近邻搜索算法flann repo https://github.com/mariusmuja/flann http://www.qhull.org/

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,384
精华内容 1,353
关键字:

flann算法