OpenCV  4.10.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 个比特时,它们至少在一个子串 k 中的差异最多为 \(\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})\) 是 qr 邻居的超集。然后,算法的最后一步是计算 q 与 \(\mathcal{N}(\mathbf{q})\) 中每个元素的 汉明 距离,删除与 q 的距离超过 r 的码。

构造函数和析构函数文档

◆ BinaryDescriptorMatcher()

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

构造函数。

构造的 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]]) ->

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

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

◆ 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]]) ->

这是一个重载的成员函数,为了方便提供。它与上面的函数不同之处仅在于它接受的参数。

参数
queryDescriptors查询描述符
matches用于存放检索到的匹配项的向量
k每个输入查询要返回的最接近描述符的数量
掩码掩码向量,用于选择哪些输入描述符必须与数据集中的描述符匹配(向量中的第 i 个掩码指示每个输入查询是否可以与数据集中的描述符匹配,这些描述符对应于第 i 个图像)
compactResult标志,用于获取紧凑的结果(如果为 true,则最终结果中不会插入对给定查询没有匹配项的向量)

◆ 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用于存放检索到的匹配项的向量
掩码掩码向量,用于选择哪些输入描述符必须与数据集中的一个描述符匹配(向量中的第 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标志,用于获取紧凑的结果(如果为 true,则最终结果中不会插入对给定查询没有匹配项的向量)

◆ 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搜索半径
掩码掩码向量,用于选择哪些输入描述符必须与数据集中的描述符匹配(向量中的第 i 个掩码指示每个输入查询是否可以与数据集中的描述符匹配,这些描述符对应于第 i 个图像)
compactResult标志,用于获取紧凑的结果(如果为 true,则最终结果中不会插入对给定查询没有匹配项的向量)

◆ train()

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

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

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

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