OpenCV 4.13.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 4.13.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
cv::line_descriptor::BinaryDescriptorMatcher クラス

記述子マッチャー のモデルに基づき、ユーザが提供する(ただし、ユーザがいずれにせよデータを投入する必要がある)データセット、またはクラス内部のデータセットを問い合わせるための全機能を提供する さらに...

#include <opencv2/line_descriptor/descriptor.hpp>

Collaboration diagram for 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
 各入力クエリ記述子について、ユーザが提供するデータセット、またはクラス内部のデータセットから、最も一致する1個を取得する。
 
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 関数によってローカルに保存された全記述子をデータセットに挿入して更新する。
 
- Public Member Functions inherited from 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 オブジェクトを作成し、そのスマートポインタを返す。
 
- Static Public Member Functions inherited from 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)
 ファイルノードからアルゴリズムを読み込む。
 

Additional Inherited Members

- Protected Member Functions inherited from cv::Algorithm
void writeFormat (FileStorage &fs) const
 

詳細説明

記述子マッチャー のモデルに基づき、ユーザが提供する(ただし、ユーザがいずれにせよデータを投入する必要がある)データセット、またはクラス内部のデータセットを問い合わせるための全機能を提供する

画像から記述子が抽出されると(それらが線分と点のどちらを表す場合でも)、ある記述子を、別の画像から抽出され、同じ線分や点を異なる視点や異なるスケールで捉えたものを表す別の記述子とマッチングできることが重要になる。この目標を達成する上で、最大の悩みは、クエリ記述子をデータセットから抽出された記述子と対応付ける効率的な探索アルゴリズムの設計である。以下では、Multi-Index Hashing (MiHashing) に基づくマッチング方式について説明する。

Multi-Index Hashing

本節で説明する理論は [215] に基づく。バイナリコードを投入したデータセットが与えられると、各コードは分割された m 個の部分文字列に従って、m 個の異なるハッシュテーブルに m 回インデックス付けされる。したがって、クエリコードが与えられると、少なくとも1つの部分文字列でそれに近いすべてのエントリが、探索によって 近傍候補 (neighbor candidates) として返される。返されたエントリは次に、その完全なコードが(Hamming 空間において)クエリコードから r ビットを超えて離れていないことを検証することで、妥当性が確認される。詳細には、b ビットからなる各バイナリコード h は、m 個の互いに素な部分文字列 \(\mathbf{h}^{(1)}, ..., \mathbf{h}^{(m)}\) に分割され、それぞれの長さは \(\lfloor b/m \rfloor\) または \(\lceil b/m \rceil\) ビットである。形式的には、2つのコード hg が高々 r ビット異なるとき、それらの m 個の部分文字列のうち少なくとも1つでは、高々 \(\lfloor r/m \rfloor\) ビットしか異ならない。特に、\(||\mathbf{h}-\mathbf{g}||_H \le r\)(ここで \(||.||_H\) は Hamming ノルム)のとき、次を満たす部分文字列 k(\(1 \le k \le m\))が必ず存在する

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

これは、m 個の各部分文字列間の Hamming 距離がいずれも厳密に \(\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})\) 内の各要素との間の Hamming 距離を計算し、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各入力クエリに対して返す、最も近い記述子の数
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]]) -> None

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

引数
queryDescriptorsクエリ記述子
matches取得したマッチを格納するベクトル
k各入力クエリに対して返す、最も近い記述子の数
masksどの入力記述子をデータセット内のものとマッチングするかを選択するマスクのベクトル(ベクトル内の 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

各入力クエリ記述子について、ユーザが提供するデータセット、またはクラス内部のデータセットから、最も一致する1個を取得する。

引数
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取得したマッチを格納するベクトル
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探索半径
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探索半径
masksどの入力記述子をデータセット内のものとマッチングするかを選択するマスクのベクトル(ベクトル内の i 番目のマスクは、各入力クエリが i 番目の画像に対応するデータセット内の記述子とマッチング可能かどうかを示す)
compactResultコンパクトな結果を得るためのフラグ(true の場合、あるクエリに対するマッチを一切含まないベクトルは最終結果に挿入されない)

◆ train()

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

add 関数によってローカルに保存された全記述子をデータセットに挿入して更新する。

覚え書き
この関数が呼び出されるたびに、現在のデータセットは削除され、ローカルに保存された記述子がデータセットに挿入される。挿入されたばかりの記述子のローカル保存コピーはその後削除される。

このクラス詳解は次のファイルから抽出されました: