ディスクリプタ抽出器の共通インタフェース ============================================================ .. highlight:: cpp OpenCVのキーポイントディスクリプタの抽出器は,同一の問題を解く異なるアルゴリズム間を容易にスイッチできる共通のインタフェースによってラップされています. このセクションでは,多次元空間の vector として表現できるディスクリプタの計算方法について述べます. "vector" ディスクリプタ抽出器を実装するすべてのオブジェクトは, :func:`DescriptorExtractor` インタフェースから派生します. .. index:: DescriptorExtractor .. _DescriptorExtractor: DescriptorExtractor ------------------- `id=0.295528239668 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.331875888875 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.340631999472 Comments from the Wiki `__ .. cfunction:: void DescriptorExtractor::read( const FileNode\& fn ) ファイルノードから,ディスクリプタ抽出器オブジェクトを読み込みます. :param fn: ファイルノード.ここから抽出器が読み込まれます. .. index:: DescriptorExtractor::write cv::DescriptorExtractor::write ------------------------------ `id=0.922237781321 Comments from the Wiki `__ .. cfunction:: void DescriptorExtractor::write( FileStorage\& fs ) const ファイルストレージに,ディスクリプタ抽出器オブジェクトを書き込みます. :param fs: ファイルストレージ.ここに抽出器が書き込まれます. .. index:: DescriptorExtractor::create cv::DescriptorExtractor::create ------------------------------- `id=0.00936723407901 Comments from the Wiki `__ :func:`DescriptorExtractor` .. code-block:: c .. :param : ```` :func:`SiftFeatureDetector` \ ```` :func:`SurfFeatureDetector` \ ```` :func:`BriefFeatureDetector` \ ```` :func:`OpponentColorDescriptorExtractor` ```` .. index:: SiftDescriptorExtractor .. _SiftDescriptorExtractor: SiftDescriptorExtractor ----------------------- `id=0.860599153879 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.836596634016 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.44452943641 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.451610461392 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.147499244009 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: ... }; ..