OpenCV 4.11.0
开源计算机视觉
加载中…
搜索中…
未找到匹配项
cv::line_descriptor::BinaryDescriptorMatcher 类参考

提供所有功能,用于根据描述符匹配器模型查询用户提供的数据集或类内部的数据集(用户无论如何都必须填充)。更多…

#include <opencv2/line_descriptor/descriptor.hpp>

cv::line_descriptor::BinaryDescriptorMatcher 的协作图

公有成员函数

 BinaryDescriptorMatcher ()
 构造函数。
 
 ~BinaryDescriptorMatcher ()
 
void add (const std::vector< Mat > &descriptors)
 在本地存储要插入数据集的新描述符,无需更新数据集。
 
void clear () CV_OVERRIDE
 清除数据集和内部数据。
 
void knnMatch (const Mat &queryDescriptors, const Mat &trainDescriptors, std::vector< std::vector< DMatch > > &matches, int k, const Mat &mask=Mat(), bool compactResult=false) const
 对于每个输入查询描述符,从用户提供的数据集或类内部的数据集中检索最佳的 *k* 个匹配项。
 
void knnMatch (const Mat &queryDescriptors, std::vector< std::vector< DMatch > > &matches, int k, const std::vector< Mat > &masks=std::vector< Mat >(), bool compactResult=false)
 
void match (const Mat &queryDescriptors, const Mat &trainDescriptors, std::vector< DMatch > &matches, const Mat &mask=Mat()) const
 对于每个输入查询描述符,从用户提供的数据集或类内部的数据集中检索最佳匹配项。
 
void match (const Mat &queryDescriptors, std::vector< DMatch > &matches, const std::vector< Mat > &masks=std::vector< Mat >())
 
void radiusMatch (const Mat &queryDescriptors, const Mat &trainDescriptors, std::vector< std::vector< DMatch > > &matches, float maxDistance, const Mat &mask=Mat(), bool compactResult=false) const
 对于每个输入查询描述符,从用户提供的数据集或类内部的数据集中检索所有与输入查询距离不超过 *maxDist* 的描述符。
 
void radiusMatch (const Mat &queryDescriptors, std::vector< std::vector< DMatch > > &matches, float maxDistance, const std::vector< Mat > &masks=std::vector< Mat >(), bool compactResult=false)
 
void train ()
 通过将所有由 *add* 函数本地存储的描述符插入到数据集中来更新数据集。
 
- 从 cv::Algorithm 继承的公有成员函数
 Algorithm ()
 
virtual ~Algorithm ()
 
virtual bool empty () const
 如果 Algorithm 为空(例如,在开始时或读取失败后),则返回 true。
 
virtual String getDefaultName () const
 
virtual void read (const FileNode &fn)
 从文件存储中读取算法参数。
 
virtual void save (const String &filename) const
 
void write (const Ptr< FileStorage > &fs, const String &name=String()) const
 
virtual void write (FileStorage &fs) const
 将算法参数存储在文件存储中。
 
void write (FileStorage &fs, const String &name) const
 

静态公有成员函数

static Ptr< BinaryDescriptorMatchercreateBinaryDescriptorMatcher ()
 创建一个 BinaryDescriptorMatcher 对象并返回指向它的智能指针。
 
- 从 cv::Algorithm 继承的静态公有成员函数
template<typename _Tp >
static Ptr< _Tpload (const String &filename, const String &objname=String())
 从文件中加载算法。
 
template<typename _Tp >
static Ptr< _TploadFromString (const String &strModel, const String &objname=String())
 从字符串加载算法。
 
template<typename _Tp >
static Ptr< _Tpread (const FileNode &fn)
 从文件节点读取算法。
 

继承的附加成员

- 从 cv::Algorithm 继承的受保护成员函数
void writeFormat (FileStorage &fs) const
 

详细描述

提供所有功能,用于根据 描述符匹配器 的模型查询用户提供的数据集或类内部数据集(用户无论如何都必须填充)。

一旦从图像中提取了描述符(它们表示直线和点),能够将一个描述符与从另一幅图像中提取的表示相同直线或点的另一个描述符匹配就变得很有趣了,这些直线或点是从不同的角度或不同的尺度上看到的。为了达到这个目标,主要难题是设计一种有效的搜索算法,将查询描述符与从数据集中提取的描述符关联起来。下面将描述一种基于 *多索引哈希 (MiHashing)* 的匹配模式。

多索引哈希

本节中描述的理论基于 [209]。给定一个填充了二进制代码的数据集,每个代码根据它被划分的 *m* 个子串,在 *m* 个不同的哈希表中被索引 *m* 次。因此,给定一个查询代码,所有至少在一个子串中与其接近的条目都会被搜索返回为 *邻居候选者*。然后通过验证其完整代码在(汉明 空间中)与查询代码的距离不超过 *r* 位来检查返回条目的有效性。具体来说,每个由 *b* 位组成的二进制代码 h 被分成 *m* 个不相交的子串 \(\mathbf{h}^{(1)}, ..., \mathbf{h}^{(m)}\),每个子串的长度为 \(\lfloor b/m \rfloor\) 或 \(\lceil b/m \rceil\) 位。形式上,当两个代码 hg 的差异最多为 *r* 位时,它们至少在一个子串中最多相差 \(\lfloor r/m \rfloor\) 位。特别是,当 \(||\mathbf{h}-\mathbf{g}||_H \le r\)(其中 \(||.||_H\) 是 汉明 范数)时,必须存在一个子串 *k*(其中 \(1 \le k \le m\)),使得

\[||\mathbf{h}^{(k)} - \mathbf{g}^{(k)}||_H \le \left\lfloor \frac{r}{m} \right\rfloor .\]

这意味着如果 *m* 个子串中每个子串之间的 汉明 距离严格大于 \(\lfloor r/m \rfloor\),则 \(||\mathbf{h}-\mathbf{g}||_H\) 必须大于 *r*,这是一个矛盾。如果数据集中的代码被分成 *m* 个子串,则将构建 *m* 个表。给定一个具有子串 \(\{\mathbf{q}^{(i)}\}^m_{i=1}\) 的查询 q,搜索第 *i* 个哈希表,查找与 \(\mathbf{q}^{(i)}\) 的距离最多为 \(\lfloor r/m \rfloor\) 的条目,并获得候选集 \(\mathcal{N}_i(\mathbf{q})\)。集合 \(\mathcal{N}(\mathbf{q}) = \bigcup_i \mathcal{N}_i(\mathbf{q})\) 的并集是 q 的 *r*-邻居的超集。然后,算法的最后一步是计算 q 与 \(\mathcal{N}(\mathbf{q})\) 中每个元素之间的 汉明 距离,删除与 q 的距离大于 *r* 的代码。

构造函数和析构函数文档

◆ BinaryDescriptorMatcher()

cv::line_descriptor::BinaryDescriptorMatcher::BinaryDescriptorMatcher ( )
Python
cv.line_descriptor.BinaryDescriptorMatcher() -> <line_descriptor_BinaryDescriptorMatcher object>

构造函数。

构造的 BinaryDescriptorMatcher 能够存储和管理长度为 256 位的条目。

◆ ~BinaryDescriptorMatcher()

cv::line_descriptor::BinaryDescriptorMatcher::~BinaryDescriptorMatcher ( )
inline

析构函数

成员函数文档

◆ add()

void cv::line_descriptor::BinaryDescriptorMatcher::add ( const std::vector< Mat > & descriptors)

在本地存储要插入数据集的新描述符,无需更新数据集。

参数
descriptors包含要插入数据集的描述符的矩阵
注意
descriptors 中的每个矩阵 *i* 应该包含与从第 i*-幅图像中提取的直线相关的描述符。

◆ clear()

void cv::line_descriptor::BinaryDescriptorMatcher::clear ( )
virtual

清除数据集和内部数据。

cv::Algorithm 重载。

◆ createBinaryDescriptorMatcher()

static Ptr< BinaryDescriptorMatcher > cv::line_descriptor::BinaryDescriptorMatcher::createBinaryDescriptorMatcher ( )
static

创建一个 BinaryDescriptorMatcher 对象并返回指向它的智能指针。

◆ knnMatch() [1/2]

void cv::line_descriptor::BinaryDescriptorMatcher::knnMatch ( const Mat & queryDescriptors,
const Mat & trainDescriptors,
std::vector< std::vector< DMatch > > & matches,
int k,
const Mat & mask = Mat(),
bool compactResult = false ) const
Python
cv.line_descriptor.BinaryDescriptorMatcher.knnMatch(queryDescriptors, trainDescriptors, k[, mask[, compactResult]]) -> matches
cv.line_descriptor.BinaryDescriptorMatcher.knnMatchQuery(queryDescriptors, matches, k[, masks[, compactResult]]) -> None

对于每个输入查询描述符,从用户提供的数据集或类内部的数据集中检索最佳的 *k* 个匹配项。

参数
queryDescriptors查询描述符
trainDescriptors用户提供的数据集描述符
matches用于保存检索到的匹配项的向量
k每个输入查询要返回的最接近描述符的数量
掩码用于选择哪些输入描述符必须与数据集中描述符匹配的掩码
compactResult标志位,用于获取紧凑的结果(如果为真,则最终结果中不包含给定查询的任何匹配项的向量)。

◆ knnMatch() [2/2]

void cv::line_descriptor::BinaryDescriptorMatcher::knnMatch ( const Mat & queryDescriptors,
std::vector< std::vector< DMatch > > & matches,
int k,
const std::vector< Mat > & masks = std::vector< Mat >(),
bool compactResult = false )
Python
cv.line_descriptor.BinaryDescriptorMatcher.knnMatch(queryDescriptors, trainDescriptors, k[, mask[, compactResult]]) -> matches
cv.line_descriptor.BinaryDescriptorMatcher.knnMatchQuery(queryDescriptors, matches, k[, masks[, compactResult]]) -> None

这是一个重载的成员函数,为了方便提供。它与上面的函数唯一的区别在于它接受的参数。

参数
queryDescriptors查询描述符
matches用于保存检索到的匹配项的向量
k每个输入查询要返回的最接近描述符的数量
masks掩码向量,用于选择哪些输入描述符必须与数据集中的描述符匹配(向量中的第 *i* 个掩码指示每个输入查询是否可以与数据集(相对于第 *i* 幅图像)中的描述符匹配)。
compactResult标志位,用于获取紧凑的结果(如果为真,则最终结果中不包含给定查询的任何匹配项的向量)。

◆ match() [1/2]

void cv::line_descriptor::BinaryDescriptorMatcher::match ( const Mat & queryDescriptors,
const Mat & trainDescriptors,
std::vector< DMatch > & matches,
const Mat & mask = Mat() ) const
Python
cv.line_descriptor.BinaryDescriptorMatcher.match(queryDescriptors, trainDescriptors[, mask]) -> matches
cv.line_descriptor.BinaryDescriptorMatcher.matchQuery(queryDescriptors[, masks]) -> matches

对于每个输入查询描述符,从用户提供的数据集或类内部的数据集中检索最佳匹配项。

参数
queryDescriptors查询描述符
trainDescriptors用户提供的数据集描述符
matches用于保存检索到的匹配项的向量
掩码掩码,用于选择哪些输入描述符必须与数据集中的一个描述符匹配。

◆ match() [2/2]

void cv::line_descriptor::BinaryDescriptorMatcher::match ( const Mat & queryDescriptors,
std::vector< DMatch > & matches,
const std::vector< Mat > & masks = std::vector< Mat >() )
Python
cv.line_descriptor.BinaryDescriptorMatcher.match(queryDescriptors, trainDescriptors[, mask]) -> matches
cv.line_descriptor.BinaryDescriptorMatcher.matchQuery(queryDescriptors[, masks]) -> matches

这是一个重载的成员函数,为了方便提供。它与上面的函数唯一的区别在于它接受的参数。

参数
queryDescriptors查询描述符
matches用于保存检索到的匹配项的向量
masks掩码向量,用于选择哪些输入描述符必须与数据集中的一个描述符匹配(向量中的第 *i* 个掩码指示每个输入查询是否可以与数据集(相对于第 *i* 幅图像)中的描述符匹配)。

◆ radiusMatch() [1/2]

void cv::line_descriptor::BinaryDescriptorMatcher::radiusMatch ( const Mat & queryDescriptors,
const Mat & trainDescriptors,
std::vector< std::vector< DMatch > > & matches,
float maxDistance,
const Mat & mask = Mat(),
bool compactResult = false ) const

对于每个输入查询描述符,从用户提供的数据集或类内部的数据集中检索所有与输入查询距离不超过 *maxDist* 的描述符。

参数
queryDescriptors查询描述符
trainDescriptors用户提供的数据集描述符
matches用于保存检索到的匹配项的向量
maxDistance搜索半径
掩码用于选择哪些输入描述符必须与数据集中描述符匹配的掩码
compactResult标志位,用于获取紧凑的结果(如果为真,则最终结果中不包含给定查询的任何匹配项的向量)。

◆ radiusMatch() [2/2]

void cv::line_descriptor::BinaryDescriptorMatcher::radiusMatch ( const Mat & queryDescriptors,
std::vector< std::vector< DMatch > > & matches,
float maxDistance,
const std::vector< Mat > & masks = std::vector< Mat >(),
bool compactResult = false )

这是一个重载的成员函数,为了方便提供。它与上面的函数唯一的区别在于它接受的参数。

参数
queryDescriptors查询描述符
matches用于保存检索到的匹配项的向量
maxDistance搜索半径
masks掩码向量,用于选择哪些输入描述符必须与数据集中的描述符匹配(向量中的第 *i* 个掩码指示每个输入查询是否可以与数据集(相对于第 *i* 幅图像)中的描述符匹配)。
compactResult标志位,用于获取紧凑的结果(如果为真,则最终结果中不包含给定查询的任何匹配项的向量)。

◆ train()

void cv::line_descriptor::BinaryDescriptorMatcher::train ( )

通过将所有由 *add* 函数本地存储的描述符插入到数据集中来更新数据集。

注意
每次调用此函数时,当前数据集都会被删除,本地存储的描述符会被插入到数据集中。然后删除刚刚插入的描述符的本地存储副本。

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