OpenCV 4.11.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 - 最大距离函数对象。它计算两个向量之间的最大距离。此距离不是有效的 kd 树距离,它不是逐维可加的。

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 - Kullback-Leibler 散度函数对象。

尽管提供的实现涵盖了大量的案例,但也可以使用自定义实现。距离函数对象是一个类,其 operator() 计算两特征之间的距离。如果距离也是 kd 树兼容距离,它还应该提供一个 accum_dist() 方法来计算各个特征维度之间的距离。

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

成员类型定义文档

◆ DistanceType

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

◆ ElementType

template<typename Distance >
距离::ElementType cv::flann::GenericIndex< Distance >::ElementType

构造函数和析构函数文档

◆ GenericIndex()

template<typename Distance >
cv::flann::GenericIndex< Distance >::GenericIndex ( const Mat & 特征,
const ::cvflann::IndexParams & 参数,
距离 distance = Distance() )

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

参数
特征包含要索引的特征(点)的矩阵。矩阵大小为特征数 x 特征维度,矩阵中元素的数据类型必须与索引的类型一致。
参数包含索引参数的结构体。将要构造的索引类型取决于此参数的类型。请参见描述。
距离

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

  • LinearIndexParams 传递此类型的对象时,索引将执行线性蛮力搜索。
    struct LinearIndexParams : public IndexParams
    {
    };
  • KDTreeIndexParams 传递此类型的对象时,构造的索引将由一组随机 kd 树组成,这些树将并行搜索。
    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 个聚类,其形心将迭代地细化。请注意,此算法已扩展到支持二进制向量,作为 knn 搜索速度为标准的 LSH 的替代方案。在直接处理(即,不使用 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 树和层次 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:高效索引高维相似性搜索》,第 33 届国际超大型数据库大会 (VLDB) 论文集。奥地利维也纳。2007 年 9 月)。此算法专为二进制向量设计。
    struct LshIndexParams : public IndexParams
    {
    LshIndexParams(
    int table_number,
    int key_size,
    int multi_probe_level );
    };
  • AutotunedIndexParams 传递此类型的对象时,创建的索引将自动调整以提供最佳性能,方法是为提供的数据集选择最佳索引类型(随机 kd 树、层次 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 & params )

◆ 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 & params )

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

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

◆ radiusSearch() [1/2]

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

◆ 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 & params )

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

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

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

◆ 保存

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

◆ 大小

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

◆ 向量长度

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

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