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 函式本地儲存的描述符插入資料集來更新資料集。

注意
每次呼叫此函式時,當前資料集都會被刪除,並且本地儲存的描述符將被插入到資料集中。然後,本地儲存的剛剛插入的描述符副本將被移除。

此類的文件是從以下檔案生成的