ディスクリプタ抽出器の共通インタフェース ============================================================ .. highlight:: cpp OpenCVのキーポイントディスクリプタの抽出器は,同一の問題を解く異なるアルゴリズム間を容易にスイッチできる共通のインタフェースによってラップされています. このセクションでは,多次元空間の vector として表現できるディスクリプタの計算方法について述べます. "vector" ディスクリプタ抽出器を実装するすべてのオブジェクトは, :func:`DescriptorExtractor` インタフェースから派生します. .. index:: DescriptorExtractor .. _DescriptorExtractor: DescriptorExtractor ------------------- `id=0.626081043276 Comments from the Wiki `__ .. ctype:: DescriptorExtractor 画像キーポイントに対するディスクリプタ計算のための抽象基底クラス. .. code-block:: c class CV_EXPORTS DescriptorExtractor { public: virtual ~DescriptorExtractor(); void compute( const Mat& image, vector& keypoints, Mat& descriptors ) const; void compute( const vector& images, vector >& keypoints, vector& descriptors ) const; virtual void read( const FileNode& ); virtual void write( FileStorage& ) const; virtual int descriptorSize() const = 0; virtual int descriptorType() const = 0; static Ptr create( const string& descriptorExtractorType ); protected: ... }; .. このインタフェースは,キーポイントディスクリプタが,基本型を要素とする,密で固定次元の vector で表現できることを仮定しています. 実際,多くのディスクリプタは,このパターンで表現できるので,ディスクリプタ間の距離を簡単に計算できます. したがって,ディスクリプタのコレクションは :func:`Mat` で表現可能で, その各行が1つのキーポイントディスクリプタに対応します. .. index:: DescriptorExtractor::compute cv::DescriptorExtractor::compute -------------------------------- `id=0.694262231336 Comments from the Wiki `__ .. cfunction:: void DescriptorExtractor::compute( const Mat\& image, vector\& keypoints, Mat\& descriptors ) const 画像(第1のバージョン),または画像集合(第2のバージョン)から 検出されたキーポイント集合に対するディスクリプタを計算します :param image: 画像. :param keypoints: キーポイント.ディスクリプタが計算できないキーポイントは削除されます. :param descriptors: ディスクリプタ.i 行が キーポイント i に対するディスクリプタになります. .. cfunction:: void DescriptorExtractor::compute( const vector\& images, vector >\& keypoints, vector\& descriptors ) const * **images** 画像集合. * **keypoints** 入力キーポイントのコレクション.keypoints[i] は images[i] から検出されたキーポイントです. ディスクリプタが計算できないキーポイントは削除されます. * **descriptors** ディスクリプタのコレクション.descriptors[i] は, 集合 keypoints[i] に対して計算されたディスクリプタになります. .. index:: DescriptorExtractor::read cv::DescriptorExtractor::read ----------------------------- `id=0.516074084636 Comments from the Wiki `__ .. cfunction:: void DescriptorExtractor::read( const FileNode\& fn ) ファイルノードから,ディスクリプタ抽出器オブジェクトを読み込みます. :param fn: ファイルノード.ここから抽出器が読み込まれます. .. index:: DescriptorExtractor::write cv::DescriptorExtractor::write ------------------------------ `id=0.432185876405 Comments from the Wiki `__ .. cfunction:: void DescriptorExtractor::write( FileStorage\& fs ) const ファイルストレージに,ディスクリプタ抽出器オブジェクトを書き込みます. :param fs: ファイルストレージ.ここに抽出器が書き込まれます. .. index:: DescriptorExtractor::create cv::DescriptorExtractor::create ------------------------------- `id=0.90433050981 Comments from the Wiki `__ :func:`DescriptorExtractor` .. cfunction:: Ptr DescriptorExtractor::create( const string\& descriptorExtractorType ) デフォルトパラメータで,指定された種類の を作成する特徴検出器ファクトリ. (デフォルトコンストラクタを使う方が好まれます). :param descriptorExtractorType: ディスクリプタ抽出器の種類. ここで,ディスクリプタ抽出器の種類としては以下がサポートされています: ``"SIFT"`` -- :func:`SiftFeatureDetector` , \ ``"SURF"`` -- :func:`SurfFeatureDetector` , \ ``"BRIEF"`` -- :func:`BriefFeatureDetector` . \ さらに,組み合わせ可能なフォーマットもサポートされています:ディスクリプタ抽出器アダプタ名( ``"Opponent"`` -- :func:`OpponentColorDescriptorExtractor` ) + ディスクリプタ抽出器名(上記を参照してください)です.例えば, ``"OpponentSIFT"`` 等となります. .. index:: SiftDescriptorExtractor .. _SiftDescriptorExtractor: SiftDescriptorExtractor ----------------------- `id=0.443459652492 Comments from the Wiki `__ .. ctype:: SiftDescriptorExtractor :func:`SIFT` クラスを使って計算するディスクリプタのラッパークラス. .. code-block:: c class SiftDescriptorExtractor : public DescriptorExtractor { public: SiftDescriptorExtractor( const SIFT::DescriptorParams& descriptorParams=SIFT::DescriptorParams(), const SIFT::CommonParams& commonParams=SIFT::CommonParams() ); SiftDescriptorExtractor( double magnification, bool isNormalize=true, bool recalculateAngles=true, int nOctaves=SIFT::CommonParams::DEFAULT_NOCTAVES, int nOctaveLayers=SIFT::CommonParams::DEFAULT_NOCTAVE_LAYERS, int firstOctave=SIFT::CommonParams::DEFAULT_FIRST_OCTAVE, int angleMode=SIFT::CommonParams::FIRST_ANGLE ); virtual void read (const FileNode &fn); virtual void write (FileStorage &fs) const; virtual int descriptorSize() const; virtual int descriptorType() const; protected: ... } .. .. index:: SurfDescriptorExtractor .. _SurfDescriptorExtractor: SurfDescriptorExtractor ----------------------- `id=0.650461077583 Comments from the Wiki `__ .. ctype:: SurfDescriptorExtractor :func:`SURF` クラスを使って計算するディスクリプタのラッパークラス. .. code-block:: c class SurfDescriptorExtractor : public DescriptorExtractor { public: SurfDescriptorExtractor( int nOctaves=4, int nOctaveLayers=2, bool extended=false ); virtual void read (const FileNode &fn); virtual void write (FileStorage &fs) const; virtual int descriptorSize() const; virtual int descriptorType() const; protected: ... } .. .. index:: CalonderDescriptorExtractor .. _CalonderDescriptorExtractor: CalonderDescriptorExtractor --------------------------- `id=0.204173174167 Comments from the Wiki `__ .. ctype:: CalonderDescriptorExtractor :func:`RTreeClassifier` クラスを使って計算するディスクリプタのラッパークラス. .. code-block:: c template class CalonderDescriptorExtractor : public DescriptorExtractor { public: CalonderDescriptorExtractor( const string& classifierFile ); virtual void read( const FileNode &fn ); virtual void write( FileStorage &fs ) const; virtual int descriptorSize() const; virtual int descriptorType() const; protected: ... } .. .. index:: OpponentColorDescriptorExtractor .. _OpponentColorDescriptorExtractor: OpponentColorDescriptorExtractor -------------------------------- `id=0.965225400382 Comments from the Wiki `__ .. ctype:: OpponentColorDescriptorExtractor Opponent Color Space(van de Sande et al., CGIV 2008 "Color Descriptors for Object Category Recognition" を参照してください) でディスクリプタを計算するように,検出器を適応させます. 入力されたRGB画像は,Opponent Color Space に変換されます. そして,(コンストラクタにセットされる)適応されないディスクリプタ抽出器が, 3チャンネルそれぞれに対してディスクリプタを計算し,それらを1つの色ディスクリプタとして結合します. .. code-block:: c class OpponentColorDescriptorExtractor : public DescriptorExtractor { public: OpponentColorDescriptorExtractor( const Ptr& dextractor ); virtual void read( const FileNode& ); virtual void write( FileStorage& ) const; virtual int descriptorSize() const; virtual int descriptorType() const; protected: ... }; .. .. index:: BriefDescriptorExtractor .. _BriefDescriptorExtractor: BriefDescriptorExtractor ------------------------ `id=0.262752075003 Comments from the Wiki `__ .. ctype:: BriefDescriptorExtractor 次の論文で述べられた BRIEF ディスクリプタを計算するためのクラス. Calonder M., Lepetit V., Strecha C., Fua P.: ''BRIEF: Binary Robust Independent Elementary Features.'' 11th European Conference on Computer Vision (ECCV), Heraklion, Crete. LNCS Springer, September 2010. .. code-block:: c class BriefDescriptorExtractor : public DescriptorExtractor { public: static const int PATCH_SIZE = 48; static const int KERNEL_SIZE = 9; // bytes は,ディスクリプタの長さをバイト単位で表します.16,32,64 バイトのどれか. BriefDescriptorExtractor( int bytes = 32 ); virtual void read( const FileNode& ); virtual void write( FileStorage& ) const; virtual int descriptorSize() const; virtual int descriptorType() const; protected: ... }; ..