OpenCV  4.10.0
开源计算机视觉库
加载中...
搜索中...
无匹配项
公共类型 | 公共成员函数 | 所有成员列表
cv::flann::GenericIndex< Distance > 类模板参考

FLANN 最近邻索引类。此类使用用于构建索引的元素类型进行模板化。 更多...

#include <opencv2/flann.hpp>

cv::flann::GenericIndex< Distance > 的协作图

公共类型

typedef Distance::ResultType DistanceType
 
typedef Distance::ElementType ElementType
 

公共成员函数

 GenericIndex (const Mat &features, const ::cvflann::IndexParams &params, Distance distance=Distance())
 为给定数据集构建最近邻搜索索引。
 
 ~GenericIndex ()
 
const ::cvflann::IndexParams * getIndexParameters ()
 
::cvflann::IndexParams getParameters ()
 
void knnSearch (const Mat &queries, Mat &indices, Mat &dists, int knn, const ::cvflann::SearchParams &params)
 
void knnSearch (const std::vector< ElementType > &query, std::vector< int > &indices, std::vector< DistanceType > &dists, int knn, const ::cvflann::SearchParams &params)
 使用索引对给定查询点执行 K 近邻搜索。
 
int radiusSearch (const Mat &query, Mat &indices, Mat &dists, DistanceType radius, const ::cvflann::SearchParams &params)
 
int radiusSearch (const std::vector< ElementType > &query, std::vector< int > &indices, std::vector< DistanceType > &dists, DistanceType radius, const ::cvflann::SearchParams &params)
 使用索引对给定查询点执行半径最近邻搜索。
 
void save (String filename)
 
int size () const
 
int veclen () const
 

详细描述

template<typename Distance>
class cv::flann::GenericIndex< Distance >

FLANN 最近邻索引类。此类使用用于构建索引的元素类型进行模板化。

Distance 仿函数指定用于计算两个点之间距离的度量。有一些Distance 仿函数可以直接使用

cv::cvflann::L2_Simple - 平方欧几里得距离仿函数。这是更简单、展开的版本。对于非常低维数据(例如 3D 点)来说,这是更优的选择。

cv::flann::L2 - 平方欧几里得距离仿函数,优化版本。

cv::flann::L1 - 曼哈顿距离仿函数,优化版本。

cv::flann::MinkowskiDistance - 明可夫斯基距离仿函数。这是高度优化的,带有循环展开。为了提高效率,省略了最后方的平方根计算。

cv::flann::MaxDistance - 最大距离仿函数。它计算两个向量之间的最大距离。这种距离不是有效的 kdtree 距离,它不是按维度加性的。

cv::flann::HammingLUT - 汉明距离仿函数。它使用查找表实现计算两个字符串之间的位差异。

cv::flann::Hamming - 汉明距离仿函数。如果可用,则使用库调用执行人口计数。查找表实现用作后备。

cv::flann::Hamming2 - 汉明距离仿函数。人口计数在 12 个算术运算中实现(其中一个为乘法)。

cv::flann::DNAmmingLUT - Hamming 距离仿函数对 DNA 比较的改编。由于 DNA 的四个碱基 A、C、G、T(或 RNA 的 A、G、C、U)可以在 2 位上编码,因此它使用查找表实现计算两个序列之间的位对差异。

cv::flann::DNAmming2 - Hamming 距离仿函数对 DNA 比较的改编。由于使用标准寄存器进行算术运算,碱基差异计数被矢量化(AVX2 和 AVX-512 应该在不久的将来出现)。

cv::flann::HistIntersectionDistance - 直方图交集距离仿函数。

cv::flann::HellingerDistance - 海林格距离仿函数。

cv::flann::ChiSquareDistance - 卡方距离仿函数。

cv::flann::KL_Divergence - 库尔贝克-莱布勒散度仿函数。

尽管提供的实现涵盖了广泛的情况,但也可以使用自定义实现。距离仿函数是一个类的 operator(),它计算两个特征之间的距离。如果距离也是 kd-tree 兼容距离,它还应提供一个 accum_dist() 方法,该方法计算单个特征维之间的距离。

除了 operator()accum_dist() 之外,距离仿函数还应定义 ElementTypeResultType 作为其操作的元素类型及其计算的结果类型。如果距离仿函数可以用作 kd-tree 距离(意味着一对特征之间的完整距离可以从单个维度之间的部分距离累积得到),则 typedef is_kdtree_distance 应该存在于距离仿函数中。如果距离不是 kd-tree 距离,但它是向量空间中的距离(可以独立访问其操作的元素的各个维度),则 typedef is_vector_space_distance 应该在仿函数中定义。如果未定义任何 typedef,则假设距离为度量距离,并且仅与对通用度量距离进行操作的索引一起使用。

成员类型定义文档

◆ DistanceType

template<typename Distance >
typedef Distance::ResultType cv::flann::GenericIndex< Distance >::DistanceType

◆ ElementType

template<typename Distance >
typedef Distance::ElementType cv::flann::GenericIndex< Distance >::ElementType

构造函数和析构函数文档

◆ GenericIndex()

template<typename Distance >
cv::flann::GenericIndex< Distance >::GenericIndex ( const Mat features,
const ::cvflann::IndexParams &  params,
Distance  distance = Distance() 
)

为给定数据集构建最近邻搜索索引。

参数
features包含要索引的特征(点)的矩阵。矩阵的大小为 num_features x feature_dimensionality,矩阵中元素的数据类型必须与索引的类型一致。
params包含索引参数的结构。将构建的索引类型取决于此参数的类型。请参见描述。
distance

该方法使用指定的算法和指定的参数(由 params 定义)从一组特征构建一个快速搜索结构。params 是以下 IndexParams 后代类之一的引用

  • LinearIndexParams 当传递此类型的对象时,索引将执行线性、暴力搜索。
    struct LinearIndexParams : public IndexParams
    {
    };
  • KDTreeIndexParams 当传递此类型的对象时,构建的索引将由一组随机化的 kd-tree 组成,这些 kd-tree 将并行搜索。
    struct KDTreeIndexParams : public IndexParams
    {
    KDTreeIndexParams( int trees = 4 );
    };
  • HierarchicalClusteringIndexParams 当传递此类型的对象时,构建的索引将是聚类的层次结构树,将每个点集划分为 n 个聚类,其中心在点之间选择,而无需进一步细化其位置。此算法适用于浮点数、整数和二进制向量。
    struct HierarchicalClusteringIndexParams : public IndexParams
    {
    HierarchicalClusteringIndexParams(
    int branching = 32,
    flann_centers_init_t centers_init = CENTERS_RANDOM,
    int trees = 4,
    int leaf_size = 100);
    };
  • KMeansIndexParams 当传递此类型的对象时,构建的索引将是层次化的 k 均值树(默认情况下为一棵树),将每个点集划分为 n 个聚类,其重心被迭代地细化。请注意,该算法已扩展为支持二进制向量,作为 LSH 的替代方法,当 knn 搜索速度是标准时。当直接处理(即,不使用 MCA/PCA)数据集时,它在性能上也会优于 LSH,这些数据集的点在大多数维度上共享大部分相同的价值。建议使用二进制数据设置多棵树。
    struct KMeansIndexParams : public IndexParams
    {
    KMeansIndexParams(
    int branching = 32,
    int iterations = 11,
    flann_centers_init_t centers_init = CENTERS_RANDOM,
    float cb_index = 0.2,
    int trees = 1);
    };
  • CompositeIndexParams 当使用此类型的参数对象时,创建的索引将组合随机化 kd-tree 和层次化的 k 均值树。
    struct CompositeIndexParams : public IndexParams
    {
    CompositeIndexParams(
    int trees = 4,
    int branching = 32,
    int iterations = 11,
    flann_centers_init_t centers_init = CENTERS_RANDOM,
    float cb_index = 0.2 );
    };
  • LshIndexParams 当使用此类型的参数对象时,创建的索引使用多探测 LSH(由多探测 LSH:Qin Lv、William Josephson、Zhe Wang、Moses Charikar、Kai Li 的高效高维相似性搜索索引,第 33 届国际超大型数据库大会 (VLDB) 论文集。维也纳,奥地利。2007 年 9 月)。此算法专为二进制向量设计。
    struct LshIndexParams : public IndexParams
    {
    LshIndexParams(
    int table_number,
    int key_size,
    int multi_probe_level );
    };
  • AutotunedIndexParams 当传递此类型的对象时,创建的索引会自动调整以提供最佳性能,方法是选择最优索引类型(随机化 kd-tree、层次化 k 均值、线性)和为提供的数据集提供的参数。
    struct AutotunedIndexParams : public IndexParams
    {
    AutotunedIndexParams(
    float target_precision = 0.9,
    float build_weight = 0.01,
    float memory_weight = 0,
    float sample_fraction = 0.1 );
    };
  • SavedIndexParams 此对象类型用于从磁盘加载以前保存的索引。
    struct SavedIndexParams : public IndexParams
    {
    SavedIndexParams( String filename );
    };
    std::string String
    定义 cvstd.hpp:151

◆ ~GenericIndex()

template<typename Distance >
cv::flann::GenericIndex< Distance >::~GenericIndex ( )

成员函数文档

◆ getIndexParameters()

template<typename Distance >
const ::cvflann::IndexParams * cv::flann::GenericIndex< Distance >::getIndexParameters ( )
inline

◆ getParameters()

template<typename Distance >
::cvflann::IndexParams cv::flann::GenericIndex< Distance >::getParameters ( )
inline

◆ knnSearch() [1/2]

template<typename Distance >
void cv::flann::GenericIndex< Distance >::knnSearch ( const Mat 查询,
Mat 索引,
Mat 距离,
int  knn,
const ::cvflann::SearchParams &  参数 
)

◆ knnSearch() [2/2]

template<typename Distance >
void cv::flann::GenericIndex< Distance >::knnSearch ( const std::vector< ElementType > &  查询点,
std::vector< int > &  索引,
std::vector< DistanceType > &  距离,
int  knn,
const ::cvflann::SearchParams &  参数 
)

使用索引对给定查询点执行 K 近邻搜索。

参数
查询点查询点
索引将包含找到的 K 个最近邻居索引的向量。它必须至少有 knn 大小。
距离将包含找到的 K 个最近邻居距离的向量。它必须至少有 knn 大小。
knn要搜索的最近邻居数量。
paramsSearchParams

◆ radiusSearch() [1/2]

template<typename Distance >
int cv::flann::GenericIndex< Distance >::radiusSearch ( const Mat 查询点,
Mat 索引,
Mat 距离,
DistanceType  半径,
const ::cvflann::SearchParams &  参数 
)

◆ radiusSearch() [2/2]

template<typename Distance >
int cv::flann::GenericIndex< Distance >::radiusSearch ( const std::vector< ElementType > &  查询点,
std::vector< int > &  索引,
std::vector< DistanceType > &  距离,
DistanceType  半径,
const ::cvflann::SearchParams &  参数 
)

使用索引对给定查询点执行半径最近邻搜索。

参数
查询点查询点。
索引将包含找到的最近邻居索引的向量。
距离将包含找到的最近邻居距离的向量。它与索引具有相同的元素数量。
半径搜索半径。
paramsSearchParams

此函数返回找到的最近邻居数量。

◆ save()

template<typename Distance >
void cv::flann::GenericIndex< Distance >::save ( String  文件名)
inline

◆ size()

template<typename Distance >
int cv::flann::GenericIndex< Distance >::size ( ) const
inline

◆ veclen()

template<typename Distance >
int cv::flann::GenericIndex< Distance >::veclen ( ) const
inline

此类的文档是从以下文件生成的