精华内容
下载资源
问答
  • FLANN

    2020-06-17 22:01:52
    1、FLANN是近似最近邻(approximate nearest neighbor searches)。 2、用FLANN库只需要包括flann.hpp头文件。 3、当indexParams定义为kdTreeIndexParams时,是randomized kd-tree.

    1、FLANN是近似最近邻(approximate nearest neighbor searches)。
    2、用FLANN库只需要包括flann.hpp头文件。
    3、当indexParams定义为kdTreeIndexParams时,是randomized kd-tree.

    展开全文
  • flann

    千次阅读 2017-11-26 04:59:26
    install flann and lz4 from github , uninstall the default ones.sudo apt-get remove liblz4-dev sudo apt-get remove libflann-devCMakeList.txtcmake_minimum_required(VERSION 2.8)project(testFlann)file...

    install flann and lz4 from github , uninstall the default ones.

    sudo apt-get remove liblz4-dev
    sudo apt-get remove libflann-dev

    CMakeList.txt

    cmake_minimum_required(VERSION 2.8)
    
    project(testFlann)
    
    file(GLOB srcs *.cpp *.hpp *.cc *.h)
    
    find_package(Flann REQUIRED)
    #find_package(HDF5 REQUIRED)
    
    
    include_directories(${FLANN_INCLUDE_DIRS})
    #include_directories(${HDF5_INCLUDE_DIRS})
    
    link_directories(${HDF5_LIBRARY_DIRS})
    
    add_executable(${PROJECT_NAME} ${srcs})
    
    target_link_libraries(${PROJECT_NAME} ${FLANN_LIBRARIES} lz4 )
    
    # ${HDF5_LIBRARIES}
    

    main.cpp

    //============================================================================
    // Name        : flann-knn-example.cpp
    // Author      : Shohei Yokoyama
    // Copyright   : Shizuoka University, Japan
    // Description : 1st step of your FLANN application.
    // Dependency  : FLANN http://people.cs.ubc.ca/~mariusm/index.php/FLANN/FLANN
    //             : Boost http://www.boost.org/
    //             : (If win) MinGW & MSYS http://www.mingw.org/
    // License     : NYSL see http://www.kmonos.net/nysl/index.en.html
    //============================================================================
    #include <flann/flann.hpp>
    #include <boost/random.hpp>
    #include <iostream>
    #include <iomanip>
    using namespace std;
    using namespace boost;
    
    int main(int argc, char** argv) {
        const int numResult = 2;
        const int numInput = 100;
        const int numQuery = 2;
        const int dimension = 2;
        const int maxValue = 255;
        const int minValue = 0;
    
        mt19937 gen(static_cast<unsigned long>(time(0)));
        uniform_smallint<> dst(minValue,maxValue);
        variate_generator<mt19937&, uniform_smallint<> > rand(gen, dst);
    
        //Calculate the width of values
        ostringstream ss;
        ss << (numInput - 1);
        string s = ss.str();
        int lnWidth = s.length(); // for line number
        ostringstream sss;
        sss << maxValue;
        s = sss.str();
        int valWidth = s.length(); // for each values
        ostringstream ssss;
        ssss << numQuery;
        s = ssss.str();
        int qWidth = s.length(); // for query number
    
        cout << "Target Data:" << endl;
        int targetData[(numInput * dimension)];
        for (int i = 0; i < numInput; ++i) {
            cout.width(qWidth);
            cout.fill(' ');
            cout << ' ';
            cout << "#";
            cout.width(lnWidth);
            cout.fill('0');
            cout << i << "\t";
            for (int j = 0; j < dimension; ++j) {
                targetData[i * dimension + j] = rand();
                cout.width(valWidth);
                cout.fill(' ');
                cout << targetData[i * dimension + j] << "\t";
            }
            cout << endl;
        }
        flann::Matrix<int> dataset(targetData, numInput, dimension);
        int queryData[dimension];
        cout << endl << "Query:" << endl;
        for (int i = 0; i < numQuery; i++) {
            cout << "Q";
            cout.width(qWidth);
            cout.fill('0');
            cout << i;
            cout.width(lnWidth + 1);
            cout.fill(' ');
            cout << " " << "\t";
            for (int j = 0; j < dimension; j++) {
                queryData[(i * dimension) + j] = rand();
                cout.width(valWidth);
                cout.fill(' ');
                cout << queryData[(i * dimension) + j] << "\t";
            }
            cout << endl;
        }
        flann::Matrix<int> query(queryData, numQuery, dimension);
        flann::Matrix<int> indices(new int[query.rows * numResult], query.rows,
                numResult);
        flann::Matrix<float> dists(new float[query.rows * numResult], query.rows,
                numResult);
        // construct an randomized kd-tree index using 4 kd-trees
        flann::Index<flann::L2<int> > index(dataset, flann::KDTreeIndexParams(8));
        index.buildIndex();
        // do a knn search, using 128 checks
        index.knnSearch(query, indices, dists, numResult, flann::SearchParams(128));
        cout << endl;
        for (int q = 0; q < numQuery; q++) {
            for (int r = 0; r < numResult; r++) {
                cout << "Q";
                cout.width(qWidth);
                cout.fill('0');
                cout << q;
                cout << "#";
                cout.width(lnWidth);
                cout.fill('0');
                cout << indices[q][r] << "\t";
                for (int j = 0; j < dimension; ++j) {
                    cout.width(valWidth);
                    cout.fill(' ');
                    cout << dataset[indices[q][r]][j] << "\t";
                }
                cout << "dist:" << dists[q][r] << endl;
            }
        }
        //delete[] dataset.ptr();
    //    /delete[] query.ptr();
        delete[] indices.ptr();
        delete[] dists.ptr();
    //    delete[] query.ptr();
    //    delete[] dataset.ptr();
        return 0;
    }
    
    Target Data:
     #00    242  16 
     #01    210 243 
     #02    211 208 
     #03     65 180 
     #04    117 239 
     #05     52  70 
     #06    206 215 
     #07    176  45 
     #08     44 198 
     #09    170  11 
     #10    128 215 
     #11    205  59 
     #12     38 101 
     #13      6  80 
     #14    154 211 
     #15    111 225 
     #16    120  76 
     #17    244 130 
     #18    241 109 
     #19     41 182 
     #20      8 149 
     #21    207  34 
     #22     25 110 
     #23    142 102 
     #24     10 119 
     #25      0   5 
     #26    116  65 
     #27    239 134 
     #28     43 234 
     #29    225 103 
     #30     33 121 
     #31    130 130 
     #32    204 130 
     #33     53 132 
     #34    125 128 
     #35    231  35 
     #36     96 111 
     #37    199  56 
     #38    161 190 
     #39      5 224 
     #40    174 145 
     #41      6  29 
     #42     33 146 
     #43     65  41 
     #44    188 224 
     #45    207 139 
     #46    227  74 
     #47     20 245 
     #48     21 155 
     #49     36  68 
     #50    130 173 
     #51     74  93 
     #52    186 168 
     #53    102 129 
     #54     52 250 
     #55     21  49 
     #56     83 102 
     #57    255 186 
     #58    241 208 
     #59     78  29 
     #60     98 140 
     #61    185 173 
     #62    133   6 
     #63    183 195 
     #64     67  55 
     #65     27  19 
     #66    140  48 
     #67    250  88 
     #68    147 173 
     #69     62  26 
     #70     28 234 
     #71    136 107 
     #72    141 162 
     #73    203 226 
     #74    249 185 
     #75    165 162 
     #76     43 240 
     #77     54 173 
     #78     97  35 
     #79    225  39 
     #80    150  44 
     #81    134   1 
     #82     31 154 
     #83    132  40 
     #84     96 200 
     #85    234  38 
     #86     59 135 
     #87      0 141 
     #88    138 192 
     #89     34 177 
     #90    105  27 
     #91    127  81 
     #92     67 166 
     #93    162 131 
     #94    101 209 
     #95     23 171 
     #96    245 120 
     #97    226 201 
     #98    251 187 
     #99     22 225 
    
    Query:
    Q0      123 208 
    Q1       22  15 
    
    Q0#10   128 215 dist:74
    Q0#15   111 225 dist:433
    Q1#65    27  19 dist:41
    Q1#41     6  29 dist:452
    展开全文
  • 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 ...
  • matlab中存档算法代码FLANN-近似最近邻居的快速库 FLANN是用于在高维空间中执行快速近似最近邻居搜索的库。 它包含一组我们发现最适合最邻近搜索的算法,以及一个根据数据集自动选择最佳算法和最佳参数的系统。 ...
  • OpenCV Flann

    2020-06-04 11:08:35
    OpenCV Flann 文章目录OpenCV Flann简介使用 opencv flann_index 进行最近邻点搜索使用opencv FlannBasedMatcher进行点的最近邻搜索 简介 本文主要记录如何在python中使用opencv的flann模块进行图像点的最近邻搜索...

    OpenCV Flann

    简介

    本文主要记录如何在python中使用opencv的flann模块进行图像点的最近邻搜索(仅作为作者自己的记录)。

    FLANN 是一个用于高维空间数据的近似最近邻搜索的库,是一个经常会被用到的库。OpenCV flann 也实现了flann,其用途主要是用在特征匹配上面。这一部分可以参考 OpenCV Python tutorial Feature Matching 。下面介绍如何使用opencv-flann进行点的最近邻搜索。

    使用 opencv flann_index 进行最近邻点搜索

    这个是后面查资料时,在so上看到的。发现相比于 cv2.FlannBasedMatcher ,cv2.flann_Index 用于最近邻搜索要简单得多,也更合适。因此做一个补充,并移到前面来。

    代码如下:

    import cv2
    import numpy as np
    from matplotlib import pyplot as plt
    
    if __name__ == '__main__':
        # generate dataset
        train_dataset_pts_nx2 = np.random.rand(1000, 2) * 1000
    
        # create KD-Tree object
        FLANN_INDEX_KDTREE = 1  # cv2 dost not contain FLANN_INDEX_KDTREE
        index_param = {"algorithm": FLANN_INDEX_KDTREE, "trees": 1}
    
        # generate dataset, the input must be float32
        flann_index = cv2.flann_Index(np.float32(train_dataset_pts_nx2), 
                                      index_param)
    
        # generate query points
        query_pts_nx2 = np.random.rand(100, 2) * 1000
    
        # query points must be float32 also
        indices, dists = flann_index.knnSearch(np.float32(query_pts_nx2), 
                                               knn=1)
        indices_nx1 = np.squeeze(indices)
        dists_nx1 = np.squeeze(dists)
    
        assert len(indices) == len(query_pts_nx2)
        assert len(dists) == len(query_pts_nx2)
    
        correspondent_pts_nx2 = train_dataset_pts_nx2[indices_nx1]
    
        plt.scatter(train_dataset_pts_nx2[:, 0], train_dataset_pts_nx2[:, 1],
                    s=10, label='dataset')
        plt.scatter(query_pts_nx2[:, 0], query_pts_nx2[:, 1],
                    s=10, label='query')
        plt.scatter(correspondent_pts_nx2[:, 0], correspondent_pts_nx2[:, 1],
                    s=10, label='correspondent')
        plt.legend(), plt.show()
    
    

    关键点

    1. 输入的dataset array 必须是float32类型的
    2. 查询时的query points 必须是2d array,类型也必须是float32

    使用opencv FlannBasedMatcher进行点的最近邻搜索

    点的坐标也可以当做是一种2维的描述子,因此使用flann进行点的最近邻搜索,本质上和使用flann进行特征匹配没有区别。只是要注意传入的数据的类型和结构。

    先放代码(关于其中出现的一些参数的解释,参考博客 OpenCV学习笔记-FLANN匹配器):

    import cv2
    import numpy as np
    from matplotlib import pyplot as plt
    
    if __name__ == '__main__':
        # generate dataset
        train_dataset_pts_nx2 = np.random.rand(1000, 2) * 1000
    
        # create KD-Tree object
        FLANN_INDEX_KDTREE = 1
        index_param = {"algorithm": FLANN_INDEX_KDTREE, "trees": 5}
        search_param = {"checks": 50}
        cv2_kdtree = cv2.FlannBasedMatcher(index_param, search_param)
    
        # reshape points from nx2 --> 1xnx2, because in OpenCV-Flann,
        # you can add different descriptors from different images at 
        # the same time. If the added array's shape is mxnxd, it indicates
        # that theses descriptors computed from m images, and each image 
        # contain n descriptors, and each descriptor has d dimension.
        # So, if you input a nx2 array, OpenCV will expand it to a 
        # nx1x2 array, which means the points come from n images, each 
        # image has only a single point.
        # The input array's shape will impact the match results, so be 
        # careful about it.
        # Another important point is that you must input a float32 array.
        train_dataset_pts_1xnx2 = np.expand_dims(train_dataset_pts_nx2, 0)
        # add dataset and train
        cv2_kdtree.add(np.float32(train_dataset_pts_1xnx2))
        cv2_kdtree.train()
    
        # generate query points
        query_pts_nx2 = np.random.rand(100, 2) * 1000
    
        # query, also input a float32 array, and set k=1 since we want 
        # a NN search only.
        match_results = cv2_kdtree.knnMatch(np.float32(query_pts_nx2), k=1)
    
        # the return value is a 2-level nested list of cv2.DMatch
        assert len(match_results) == len(query_pts_nx2)
        assert len(match_results[0]) == 1
        correspondent_pts_nx2 = []
        for query_pt, nn_match_results in zip(query_pts_nx2, match_results):
            for match_result in nn_match_results:
                assert isinstance(match_result, cv2.DMatch)
    
                # imgIdx is the index of first axis of the train dataset 
                # in shape mxnxd
                # trainIdx is the index of second axis the of train dataset 
                # in shape mxnxd
                # we can use these two indices to get the correspondent
                # descriptor value(point) from train dataset.
                print(match_result.imgIdx, match_result.trainIdx)
                correspondent_pt = train_dataset_pts_1xnx2[
                    match_result.imgIdx, match_result.trainIdx]
                print(match_result.distance)
                print(np.linalg.norm(correspondent_pt - query_pt))
    
                correspondent_pts_nx2.append(correspondent_pt)
    
        correspondent_pts_nx2 = np.asarray(correspondent_pts_nx2)
    
        plt.scatter(train_dataset_pts_nx2[:, 0], train_dataset_pts_nx2[:, 1],
                    s=10, label='dataset')
        plt.scatter(query_pts_nx2[:, 0], query_pts_nx2[:, 1],
                    s=10, label='query')
        plt.scatter(correspondent_pts_nx2[:, 0], correspondent_pts_nx2[:, 1],
                    s=10, label='correspondent')
        plt.legend(), plt.show()
    
    

    关键点:

    1. 输入的dataset的shape,最好是手动调整成为一个3d array,保证明确性
    2. 输入的dataset array 必须是float32类型的
    3. 查询时的query points 必须是2d array,类型也必须是float32
    展开全文
  • FLANN算法代码

    2015-08-30 11:06:26
    FLANN算法的源码,c++
  • flann error

    2018-11-23 10:04:42
    /usr/include/flann/util/serialization.h:18:9: error: ‘class std::unordered_map&lt;unsigned int, std::vector&lt;unsigned int&gt; &gt;’ has no member named ‘serialize’     ...

    error:

    /usr/include/flann/util/serialization.h:18:9: error: ‘class std::unordered_map<unsigned int, std::vector<unsigned int> >’ has no member named ‘serialize’
     

     

    solution: 

                          include flann before OpenCV.

    展开全文
  • FLANN.jl:用于快速库的Julia包装器,用于近似最近的邻居(FLANN
  • flann_manual-1.8.4.pdf

    2021-05-21 19:18:48
    Flann的指导说明
  • 解决flann和opencv中的flann冲突

    千次阅读 2016-03-21 16:14:09
    flann和cv::flann冲突的解决方案
  • flann-1.9.1.zip

    2019-07-10 13:42:15
    Flann最新版本,Fast Library for Approximate Nearest Neighbors, 用于最近邻搜索
  • matlab中存档算法代码FLANN-近似最近邻居的快速库 FLANN是用于在高维空间中执行快速近似最近邻居搜索的库。 它包含一组我们发现最适合最邻近搜索的算法,以及一个根据数据集自动选择最佳算法和最佳参数的系统。 ...
  • flann编译过程

    2019-09-18 12:10:50
    Flann编译过程一.使用CMake生成编译文件1. 设置CMake配置项2. 编译代码 一.使用CMake生成编译文件 1. 设置CMake配置项 在Flann目录下新建bulid目录; 设置CMake配置项如下: 注意: a)CMake_INSTALL_PREFIX 指向...
  • FLANN C++ 使用

    2021-07-27 08:40:33
    FLANN FLANN 库,包含 KNN 算法。众多工程(例如 OpenCV)使用了 FLANN,这里单独介绍这个库,方便以后单独使用。 由官方 Latex 编译的文档链接,免费的。 安装 ubuntu 下直接通过命令行 sudo apt install libflann...
  • FLANN算法特征匹配

    2018-12-05 12:27:22
    利用OpenCV和vs2015,FLANN算法进行特征点匹配。。。。。
  • 通过一个示例,进行FLANN进行特征点匹配,适合人群为刚学习OpenCV的学生及工作人员,也可供相关图像处理工程师进行参考
  • flann库文件

    2012-08-04 16:01:16
    flann库文件中包含常用的函数,如fast neightbour search的各种函数,可以单独安装PC中
  • matlab中存档算法代码FLANN-近似最近邻居的快速库 FLANN是用于在高维空间中执行快速近似最近邻居搜索的库。 它包含一组我们发现最适合最邻近搜索的算法,以及一个根据数据集自动选择最佳算法和最佳参数的系统。 ...
  • ML之SIFT_FLANN:对图片提取SIFT特征并利用FLANN方法判别图像的相似度并可视化 目录 FLANN算法 1、建立索引 2、进行搜索 输出结果 实现代码 FLANN算法 FLANN库全称是Fast Library for Approximate ...
  • FLANN特征匹配

    千次阅读 2019-06-21 11:36:39
    FLANN特征匹配 特征的概念: 一个图像块是由相似平面组成,其在原图像中会有大量相同的区域。 一个图像块取自原图像的边缘,其具有横向或纵向的差异性,而在与该方向垂直的角度上相同。 一个图像块取自原图像的角点...
  • 暴力匹配与FLANN

    2020-06-17 14:23:15
    暴力匹配与FLANN的匹配时间分析 当ORB特征点为1000时,FLANN慢于FLANN,当ORB特征点>=1500时,FLANN时间少于暴力匹配。 特征点数目1000:(以下第一是FLANN,第二个是暴力) 特征点数目1500: 特征点数目2000:...
  • flann-1.8.4-install.7z

    2020-04-09 10:38:32
    利用CMAKE编译FLANN1.8.4,利用VS2015分别生成和安装 debug和release版本,直接下载即可使用
  • 今天小编就为大家分享一篇opencv3/C++ FLANN特征匹配方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • matlab中存档算法代码FLANN-近似最近邻居的快速库 FLANN是用于在高维空间中执行快速近似最近邻居搜索的库。 它包含一组我们发现最适合最邻近搜索的算法,以及一个根据数据集自动选择最佳算法和最佳参数的系统。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,831
精华内容 4,332
关键字:

flann