ディスクリプタ抽出器の共通インタフェース

OpenCVのキーポイントディスクリプタの抽出器は,同一の問題を解く異なるアルゴリズム間を容易にスイッチできる共通のインタフェースによってラップされています. このセクションでは,多次元空間の vector として表現できるディスクリプタの計算方法について述べます. “vector” ディスクリプタ抽出器を実装するすべてのオブジェクトは, DescriptorExtractor() インタフェースから派生します.

DescriptorExtractor

Comments from the Wiki

DescriptorExtractor

画像キーポイントに対するディスクリプタ計算のための抽象基底クラス.

class CV_EXPORTS DescriptorExtractor
{
public:
    virtual ~DescriptorExtractor();

    void compute( const Mat& image, vector<KeyPoint>& keypoints,
                  Mat& descriptors ) const;
    void compute( const vector<Mat>& images, vector<vector<KeyPoint> >& keypoints,
                  vector<Mat>& descriptors ) const;

    virtual void read( const FileNode& );
    virtual void write( FileStorage& ) const;

    virtual int descriptorSize() const = 0;
    virtual int descriptorType() const = 0;

    static Ptr<DescriptorExtractor> create( const string& descriptorExtractorType );

protected:
    ...
};

このインタフェースは,キーポイントディスクリプタが,基本型を要素とする,密で固定次元の vector で表現できることを仮定しています. 実際,多くのディスクリプタは,このパターンで表現できるので,ディスクリプタ間の距離を簡単に計算できます. したがって,ディスクリプタのコレクションは Mat() で表現可能で, その各行が1つのキーポイントディスクリプタに対応します.

cv::DescriptorExtractor::compute

Comments from the Wiki

void DescriptorExtractor::compute(const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors) const

画像(第1のバージョン),または画像集合(第2のバージョン)から

検出されたキーポイント集合に対するディスクリプタを計算します

param image:画像.
param keypoints:
 キーポイント.ディスクリプタが計算できないキーポイントは削除されます.
param descriptors:
 ディスクリプタ.i 行が キーポイント i に対するディスクリプタになります.
void DescriptorExtractor::compute(const vector<Mat>& images, vector<vector<KeyPoint> >& keypoints, vector<Mat>& descriptors) const
  • images 画像集合.

  • keypoints 入力キーポイントのコレクション.keypoints[i] は

    images[i] から検出されたキーポイントです. ディスクリプタが計算できないキーポイントは削除されます.

  • descriptors ディスクリプタのコレクション.descriptors[i] は,

    集合 keypoints[i] に対して計算されたディスクリプタになります.

cv::DescriptorExtractor::read

Comments from the Wiki

void DescriptorExtractor::read(const FileNode& fn)

ファイルノードから,ディスクリプタ抽出器オブジェクトを読み込みます.

パラメタ:
  • fn – ファイルノード.ここから抽出器が読み込まれます.

cv::DescriptorExtractor::write

Comments from the Wiki

void DescriptorExtractor::write(FileStorage& fs) const

ファイルストレージに,ディスクリプタ抽出器オブジェクトを書き込みます.

パラメタ:
  • fs – ファイルストレージ.ここに抽出器が書き込まれます.

cv::DescriptorExtractor::create

Comments from the Wiki

DescriptorExtractor()

:param :

OpponentColorDescriptorExtractor()

SiftDescriptorExtractor

Comments from the Wiki

SiftDescriptorExtractor

SIFT() クラスを使って計算するディスクリプタのラッパークラス.

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:
    ...
}

SurfDescriptorExtractor

Comments from the Wiki

SurfDescriptorExtractor

SURF() クラスを使って計算するディスクリプタのラッパークラス.

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:
    ...
}

CalonderDescriptorExtractor

Comments from the Wiki

CalonderDescriptorExtractor

RTreeClassifier() クラスを使って計算するディスクリプタのラッパークラス.

template<typename T>
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:
    ...
}

OpponentColorDescriptorExtractor

Comments from the Wiki

OpponentColorDescriptorExtractor

Opponent Color Space(van de Sande et al., CGIV 2008 “Color Descriptors for Object Category Recognition” を参照してください) でディスクリプタを計算するように,検出器を適応させます. 入力されたRGB画像は,Opponent Color Space に変換されます. そして,(コンストラクタにセットされる)適応されないディスクリプタ抽出器が, 3チャンネルそれぞれに対してディスクリプタを計算し,それらを1つの色ディスクリプタとして結合します.

class OpponentColorDescriptorExtractor : public DescriptorExtractor
{
public:
    OpponentColorDescriptorExtractor( const Ptr<DescriptorExtractor>& dextractor );

    virtual void read( const FileNode& );
    virtual void write( FileStorage& ) const;
    virtual int descriptorSize() const;
    virtual int descriptorType() const;
protected:
    ...
};

BriefDescriptorExtractor

Comments from the Wiki

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.

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:
    ...
};