OpenCV 4.12.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
 如果 算法 为空(例如,在最开始或读取不成功之后),则返回 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
 

详细描述

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

一旦从图像中提取了描述符(无论是表示线还是点),将一个描述符与从不同图像中提取的、表示相同线或点(从不同视角或不同尺度观察)的另一个描述符进行匹配就变得很有趣。为了实现这一目标,主要难题在于设计一种高效的搜索算法,以将查询描述符与从数据集中提取的描述符关联起来。下面将介绍一种基于 多索引哈希 (Multi-Index Hashing, MiHashing) 的匹配方式。

多索引哈希

本节中描述的理论基于[212]。给定一个填充了二进制码的数据集,每个码根据其被分成的 m 个子字符串,被索引到 m 个不同的哈希表中 m 次。因此,给定一个查询码,搜索将返回所有至少在一个子字符串中与其接近的条目作为 邻居候选者。然后通过验证它们的完整代码与查询码的距离(在 汉明 空间中)不超过 r 位来检查返回条目的有效性。详细来说,每个由 b 位组成的二进制码 h 被分成 m 个不相交的子字符串 \(\mathbf{h}^{(1)}, ..., \mathbf{h}^{(m)}\),每个子字符串的长度为 \(\lfloor b/m \rfloor\) 或 \(\lceil b/m \rceil\) 位。形式上,当两个码 hg 最多相差 r 位时,在它们至少一个 m 子字符串中,它们最多相差 \(\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 个表。给定一个查询 q,其子字符串为 \(\{\mathbf{q}^{(i)}\}^m_{i=1}\),则搜索第 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 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]]) ->

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

参数
queryDescriptors查询描述符
trainDescriptors用户提供的描述符数据集
matches用于存储检索到的匹配项的向量
k为每个输入查询返回的最接近描述符的数量
mask用于选择哪些输入描述符必须与数据集中的描述符匹配的掩码
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用于存储检索到的匹配项的向量
mask用于选择哪些输入描述符必须与数据集中的描述符匹配的掩码

◆ 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搜索半径
mask用于选择哪些输入描述符必须与数据集中的描述符匹配的掩码
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 函数本地存储的描述符插入数据集来更新数据集。

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

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