一般的なディスクリプタMatcherの共通インタフェース ====================================================================== .. highlight:: cpp OpenCVにおけるキーポイントディスクリプタMatcherは,同一の問題を解く異なるアルゴリズム間を容易にスイッチできる共通のインタフェースによってラップされています. このセクションでは,多次元空間の vector として表現できないディスクリプタ同士の,マッチング方法について述べます. ``GenericDescriptorMatcher`` は,ディスクリプタのより一般的なインタフェースです.これは,ディスクリプタの表現方法について何の仮定も持ちません. :func:`DescriptorExtractor` インタフェースを持つすべてのディスクリプタは, ``GenericDescriptorMatcher`` インタフェースのラッパーを持ちます( :func:`VectorDescriptorMatcher` を参照してください). One way ディスクリプタ や Ferns ディスクリプタのように, ``GenericDescriptorMatcher`` インタフェースの実装を持っていても, :func:`DescriptorExtractor` をサポートしないものもあります. .. index:: GenericDescriptorMatcher .. _GenericDescriptorMatcher: GenericDescriptorMatcher ------------------------ `id=0.0588274344668 Comments from the Wiki `__ .. ctype:: GenericDescriptorMatcher キーポイントディスクリプタの抽出とマッチングのための抽象インタフェース. 同じ目的のものとして :func:`DescriptorExtractor` および :func:`DescriptorMatcher` がありますが, これらのインタフェースは,多次元空間の vector として表現されるディスクリプタ専用のものです. ``GenericDescriptorMatcher`` は,ディスクリプタに対する,より一般的なインタフェースです. :func:`DescriptorMatcher` と同様に, ``GenericDescriptorMatcher`` のマッチング方法も, 1つの画像のキーポイントに対するマッチングと,画像集合のキーポイントに対するマッチング,の2種類に分けられます: .. code-block:: c class GenericDescriptorMatcher { public: GenericDescriptorMatcher(); virtual ~GenericDescriptorMatcher(); virtual void add( const vector& images, vector >& keypoints ); const vector& getTrainImages() const; const vector >& getTrainKeypoints() const; virtual void clear(); virtual void train() = 0; virtual bool isMaskSupported() = 0; void classify( const Mat& queryImage, vector& queryKeypoints, const Mat& trainImage, vector& trainKeypoints ) const; void classify( const Mat& queryImage, vector& queryKeypoints ); /* * 画像ペアから得たキーポイント同士のマッチメソッド一覧. */ void match( const Mat& queryImage, vector& queryKeypoints, const Mat& trainImage, vector& trainKeypoints, vector& matches, const Mat& mask=Mat() ) const; void knnMatch( const Mat& queryImage, vector& queryKeypoints, const Mat& trainImage, vector& trainKeypoints, vector >& matches, int k, const Mat& mask=Mat(), bool compactResult=false ) const; void radiusMatch( const Mat& queryImage, vector& queryKeypoints, const Mat& trainImage, vector& trainKeypoints, vector >& matches, float maxDistance, const Mat& mask=Mat(), bool compactResult=false ) const; /* * 画像集合から得たキーポイント同士のマッチメソッド一覧. */ void match( const Mat& queryImage, vector& queryKeypoints, vector& matches, const vector& masks=vector() ); void knnMatch( const Mat& queryImage, vector& queryKeypoints, vector >& matches, int k, const vector& masks=vector(), bool compactResult=false ); void radiusMatch( const Mat& queryImage, vector& queryKeypoints, vector >& matches, float maxDistance, const vector& masks=vector(), bool compactResult=false ); virtual void read( const FileNode& ); virtual void write( FileStorage& ) const; virtual Ptr clone( bool emptyTrainData=false ) const = 0; protected: ... }; .. .. index:: GenericDescriptorMatcher::add cv::GenericDescriptorMatcher::add --------------------------------- `id=0.645673137343 Comments from the Wiki `__ .. cfunction:: void GenericDescriptorMatcher::add( const vector\& images, vector >\& keypoints ) 画像と画像から得られるキーポイントを,訓練コレクションに追加します(ここで,ディスクリプタが計算されることになります). 訓練コレクションが空ではない場合,新しい画像と,そこから得られるキーポイントが,既存のデータに追加されます. :param images: 画像コレクション. :param keypoints: 点コレクション. ``keypoints[i]`` は, 画像 ``images[i]`` で検出されたキーポイントと見なされます. .. index:: GenericDescriptorMatcher::getTrainImages cv::GenericDescriptorMatcher::getTrainImages -------------------------------------------- `id=0.173037585798 Comments from the Wiki `__ .. code-block:: c .. .. index:: cv:: ---- `id=0.626314900873 Comments from the Wiki `__ .. code-block:: c .. .. index:: cv:: ---- `id=0.438463171739 Comments from the Wiki `__ .. code-block:: c .. .. index:: cv:: ---- `id=0.249814170783 Comments from the Wiki `__ .. code-block:: c .. .. index:: cv:: ---- `id=0.198421653812 Comments from the Wiki `__ .. code-block:: c .. .. index:: cv:: ---- `id=0.836246653917 Comments from the Wiki `__ :func:`GenericDescriptorMatcher::add` .. cfunction:: void GenericDescriptorMatcher::classify( const Mat\& queryImage, vector\& queryKeypoints, const Mat\& trainImage, vector\& trainKeypoints ) const クエリキーポイントを,入力引数として与えられる1つの訓練画像のキーポイントのどれかに分類します(このメソッドの第1のバージョン). または,クエリキーポイントを, によってセットされた訓練画像コレクションのキーポイントのどれかに分類します(第2のバージョン). .. cfunction:: void GenericDescriptorMatcher::classify( const Mat\& queryImage, vector\& queryKeypoints ) :param queryImage: クエリ画像. :param queryKeypoints: クエリ画像から得られたキーポイント. :param trainImage: 訓練画像. :param trainKeypoints: 訓練画像から得られたキーポイント. .. index:: GenericDescriptorMatcher::match cv::GenericDescriptorMatcher::match ----------------------------------- `id=0.197537978026 Comments from the Wiki `__ :func:`GenericDescriptorMatcher::add` :func:`DescriptorMatcher::match` .. cfunction:: void GenericDescriptorMatcher::match( const Mat\& queryImage, vector\& queryKeypoints, const Mat\& trainImage, vector\& trainKeypoints, vector\& matches, const Mat\& mask=Mat() ) const クエリキーポイントに対するベストマッチを,訓練集合から見つけます. このメソッドの第1のバージョンでは,1つの訓練画像と,そこで検出される予定のキーポイント,が入力引数になります. 第2のバージョンでは,クエリキーポイントと訓練画像集合とのマッチングが行われます. この集合は によってセットされます. また, の場合と同様に,マスクもセットすることができます. .. cfunction:: void GenericDescriptorMatcher::match( const Mat\& queryImage, vector\& queryKeypoints, vector\& matches, const vector\& masks=vector() ) :param queryImage: クエリ画像. :param queryKeypoints: ``queryImage`` から検出されるキーポイント. :param trainImage: 訓練画像.これは,クラスオブジェクト内に格納される訓練画像コレクションには追加されません. :param trainKeypoints: ``trainImage`` から検出されるキーポイント.これは,クラスオブジェクト内に格納される訓練画像コレクションには追加されません. :param matches: マッチ. ``mask`` によって除外されるクエリディスクリプタ(キーポイント)の場合, そのディスクリプタに対しては,マッチは追加されません. よって, ``matches`` サイズは,クエリキーポイント数よりも少なくなる可能性があります. :param mask: 入力クエリキーポイントと訓練キーポイントとの間のマッチに対するマスク. :param masks: マスク集合.それぞれの ``masks[i]`` が, 入力クエリキーポイントと,i-番目の画像から得られる訓練キーポイントとの間のマッチに対するマスクになります. .. index:: GenericDescriptorMatcher::knnMatch cv::GenericDescriptorMatcher::knnMatch -------------------------------------- `id=0.676048073149 Comments from the Wiki `__ :func:`GenericDescriptorMatcher::match` :func:`DescriptorMatcher::knnMatch` .. cfunction:: void GenericDescriptorMatcher::knnMatch( const Mat\& queryImage, vector\& queryKeypoints, const Mat\& trainImage, vector\& trainKeypoints, vector >\& matches, int k, const Mat\& mask=Mat(), bool compactResult=false ) const クエリ集合から得られる各キーポイントに対するKNN ベストマッチを,訓練キーポイントから見つけます. K個の最近傍(あるいは,それより少ない可能性もあります)マッチは,距離が昇順になるように返されます. 詳細は, および を参照してください. .. cfunction:: void GenericDescriptorMatcher::knnMatch( const Mat\& queryImage, vector\& queryKeypoints, vector >\& matches, int k, const vector\& masks=vector(), bool compactResult=false ) .. index:: GenericDescriptorMatcher::radiusMatch cv::GenericDescriptorMatcher::radiusMatch ----------------------------------------- `id=0.714054404985 Comments from the Wiki `__ :func:`GenericDescriptorMatcher::match` :func:`DescriptorMatcher::radiusMatch` .. cfunction:: void GenericDescriptorMatcher::radiusMatch( const Mat\& queryImage, vector\& queryKeypoints, const Mat\& trainImage, vector\& trainKeypoints, vector >\& matches, float maxDistance, const Mat\& mask=Mat(), bool compactResult=false ) const 各クエリキーポイントに対して,与えられた閾値よりも小さい距離にあるベストマッチを見つけます. 求められたマッチは,距離の昇順で返されます.詳細は,および を参照してください. .. cfunction:: void GenericDescriptorMatcher::radiusMatch( const Mat\& queryImage, vector\& queryKeypoints, vector >\& matches, float maxDistance, const vector\& masks=vector(), bool compactResult=false ) .. index:: GenericDescriptorMatcher::read cv::GenericDescriptorMatcher::read ---------------------------------- `id=0.317491544349 Comments from the Wiki `__ .. cfunction:: void GenericDescriptorMatcher::read( const FileNode\& fn ) ファイルノードから Matcher オブジェクトを読み込みます. .. index:: GenericDescriptorMatcher::write cv::GenericDescriptorMatcher::write ----------------------------------- `id=0.383338250878 Comments from the Wiki `__ .. cfunction:: void GenericDescriptorMatcher::write( FileStorage\& fs ) const ファイルストレージに Matcher オブジェクトを書き込みます. .. index:: GenericDescriptorMatcher::clone cv::GenericDescriptorMatcher::clone ----------------------------------- `id=0.698785605787 Comments from the Wiki `__ .. cfunction:: Ptr\\GenericDescriptorMatcher::clone( bool emptyTrainData ) const Matcher を複製します. :param emptyTrainData: ``emptyTrainData`` が false の場合, このメソッドはオブジェクトの深いコピーを作成,つまり,パラメータと訓練データの両方をコピーします. ``emptyTrainData`` が true の場合,現在のパラメータだけをコピーしたオブジェクトを作成し,訓練データは空になります. .. index:: OneWayDescriptorMatcher .. _OneWayDescriptorMatcher: OneWayDescriptorMatcher ----------------------- `id=0.431889336706 Comments from the Wiki `__ .. ctype:: OneWayDescriptorMatcher :func:`OneWayDescriptorBase` クラスを用いた,ディスクリプタの計算,マッチング,分類のためのラッパークラス. .. code-block:: c class OneWayDescriptorMatcher : public GenericDescriptorMatcher { public: class Params { public: static const int POSE_COUNT = 500; static const int PATCH_WIDTH = 24; static const int PATCH_HEIGHT = 24; static float GET_MIN_SCALE() { return 0.7f; } static float GET_MAX_SCALE() { return 1.5f; } static float GET_STEP_SCALE() { return 1.2f; } Params( int poseCount = POSE_COUNT, Size patchSize = Size(PATCH_WIDTH, PATCH_HEIGHT), string pcaFilename = string(), string trainPath = string(), string trainImagesList = string(), float minScale = GET_MIN_SCALE(), float maxScale = GET_MAX_SCALE(), float stepScale = GET_STEP_SCALE() ); int poseCount; Size patchSize; string pcaFilename; string trainPath; string trainImagesList; float minScale, maxScale, stepScale; }; OneWayDescriptorMatcher( const Params& params=Params() ); virtual ~OneWayDescriptorMatcher(); void initialize( const Params& params, const Ptr& base=Ptr() ); // コレクションおよび OneWayDescriptorBase に保存されたキーポイントをクリアします virtual void clear(); virtual void train(); virtual bool isMaskSupported(); virtual void read( const FileNode &fn ); virtual void write( FileStorage& fs ) const; virtual Ptr clone( bool emptyTrainData=false ) const; protected: ... }; .. .. index:: FernDescriptorMatcher .. _FernDescriptorMatcher: FernDescriptorMatcher --------------------- `id=0.536379224254 Comments from the Wiki `__ .. ctype:: FernDescriptorMatcher :func:`FernClassifier` クラスを用いた,ディスクリプタの計算,マッチング,分類のためのラッパークラス. .. code-block:: c class FernDescriptorMatcher : public GenericDescriptorMatcher { public: class Params { public: Params( int nclasses=0, int patchSize=FernClassifier::PATCH_SIZE, int signatureSize=FernClassifier::DEFAULT_SIGNATURE_SIZE, int nstructs=FernClassifier::DEFAULT_STRUCTS, int structSize=FernClassifier::DEFAULT_STRUCT_SIZE, int nviews=FernClassifier::DEFAULT_VIEWS, int compressionMethod=FernClassifier::COMPRESSION_NONE, const PatchGenerator& patchGenerator=PatchGenerator() ); Params( const string& filename ); int nclasses; int patchSize; int signatureSize; int nstructs; int structSize; int nviews; int compressionMethod; PatchGenerator patchGenerator; string filename; }; FernDescriptorMatcher( const Params& params=Params() ); virtual ~FernDescriptorMatcher(); virtual void clear(); virtual void train(); virtual bool isMaskSupported(); virtual void read( const FileNode &fn ); virtual void write( FileStorage& fs ) const; virtual Ptr clone( bool emptyTrainData=false ) const; protected: ... }; .. .. index:: VectorDescriptorMatcher .. _VectorDescriptorMatcher: VectorDescriptorMatcher ----------------------- `id=0.0923489958738 Comments from the Wiki `__ .. ctype:: VectorDescriptorMatcher 有限次元空間内のベクトルとして表現されるディスクリプタ同士の,マッチングに利用されるクラス. .. code-block:: c class CV_EXPORTS VectorDescriptorMatcher : public GenericDescriptorMatcher { public: VectorDescriptorMatcher( const Ptr& extractor, const Ptr& matcher ); virtual ~VectorDescriptorMatcher(); virtual void add( const vector& imgCollection, vector >& pointCollection ); virtual void clear(); virtual void train(); virtual bool isMaskSupported(); virtual void read( const FileNode& fn ); virtual void write( FileStorage& fs ) const; virtual Ptr clone( bool emptyTrainData=false ) const; protected: ... }; .. 作成例: .. code-block:: c VectorDescriptorMatcher matcher( new SurfDescriptorExtractor, new BruteForceMatcher > ); ..