特徴の検出と記述

CvSURFPoint

Comments from the Wiki

class CvSURFPoint

((x,y), laplacian, size, dir, hessian) というタプルで表現される,SURFキーポイント.

x

画像中の特徴のx-座標.

y

画像中の特徴のy-座標.

laplacian

-1, 0 または +1.特徴点のラプラシアンの符号.ラプラシアン符号の異なる特徴同士はマッチしないので,特徴同士の比較を高速化するために利用されます.

size

特徴のサイズ.

dir

特徴の方向:0...360 度.

hessian

ヘッシアンの値(特徴の強さを大まかに推定するのに利用できます.params.hessianThreshold も参照してください).

ExtractSURF

Comments from the Wiki

ExtractSURF(image, mask, storage, params)-> (keypoints, descriptors)

画像から SURF 特徴を抽出します.

パラメタ:
  • image (CvArr) – 8 ビット,グレースケールの入力画像.
  • mask (CvArr) – オプション.8 ビットの入力マスク.0以外のマスクピクセルが50 % 以上を占める領域の特徴のみが計算されます.
  • keypoints (CvSeq of CvSURFPoint) – キーポイントのシーケンス.
  • descriptors (CvSeq of list of float) – ディスクリプタのシーケンス.それぞれの SURF ディスクリプタは,長さが 64 または 128 の float のリストです.
  • storage (CvMemStorage) – キーポイントとディスクリプタが格納されるメモリストレージ.
  • params (CvSURFParams) –

    タプル (extended, hessianThreshold, nOctaves, nOctaveLayers) 形式の,様々なアルゴリズムパラメータ:

    • extended 0 の場合,基本ディスクリプタを意味し( 64 要素),1 の場合,拡張ディスクリプタを意味します( 128 要素).
    • hessianThreshold これよりも大きいヘッシアン値を持つ特徴だけが抽出されます.適切なデフォルト値は,約 300-500 です(これは,画像の局所的なコントラストとシャープネスに依存します).ユーザは,ヘッシアン値やその他の特徴に基づいて,さらに特徴を除外する事ができます.
    • nOctaves 抽出に利用されるオクターブ数.オクターブが 1 階上がる毎に,特徴サイズは 2 倍になります(デフォルトは 3 ).
    • nOctaveLayers 各オクターブ内のレイヤ数(デフォルトは 4 ).

関数 cvExtractSURF は, Bay06 で述べられたロバストな特徴を画像から検出します.各特徴は,それ自身の位置,サイズ,姿勢に加え,オプションとして(基本または拡張)ディスクリプタ,を返します. この関数は,物体追跡や位置同定,画像スティッチングに利用できます.

画像から,強い SURF 特徴を抽出する方法を示します.

>>> import cv
>>> im = cv.LoadImageM("building.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE)
>>> (keypoints, descriptors) = cv.ExtractSURF(im, None, cv.CreateMemStorage(), (0, 30000, 3, 1))
>>> print len(keypoints), len(descriptors)
6 6
>>> for ((x, y), laplacian, size, dir, hessian) in keypoints:
...     print "x=%d y=%d laplacian=%d size=%d dir=%f hessian=%f" % (x, y, laplacian, size, dir, hessian)
x=30 y=27 laplacian=-1 size=31 dir=69.778503 hessian=36979.789062
x=296 y=197 laplacian=1 size=33 dir=111.081039 hessian=31514.349609
x=296 y=266 laplacian=1 size=32 dir=107.092300 hessian=31477.908203
x=254 y=284 laplacian=1 size=31 dir=279.137360 hessian=34169.800781
x=498 y=525 laplacian=-1 size=33 dir=278.006592 hessian=31002.759766
x=777 y=281 laplacian=1 size=70 dir=167.940964 hessian=35538.363281

GetStarKeypoints

Comments from the Wiki

GetStarKeypoints(image, storage, params) → keypoints

StarDetector アルゴリズムを用いて,キーポイントを抽出します.

パラメタ:
  • image (CvArr) – 8 ビット,グレースケールの入力画像.
  • storage (CvMemStorage) – キーポイントが格納されるメモリストレージ.
  • params (CvStarDetectorParams) –

    タプル (maxSize, responseThreshold, lineThresholdProjected, lineThresholdBinarized, suppressNonmaxSize) 形式の,様々なアルゴリズムパラメータ:

    • maxSize 検出される特徴の最大サイズ.次のパラメータ値がサポートされています: 4, 6, 8, 11, 12, 16, 22, 23, 32, 45, 46, 64, 90, 128
    • responseThreshold 近似されたラプラシアンに対する閾値.弱い特徴を除外するために利用されます.
    • lineThresholdProjected ラプラシアンに対するもう一つの閾値.エッジを除外するために利用されます.
    • lineThresholdBinarized 特徴のスケールに対する閾値.エッジを除外するために利用されます.
    • suppressNonmaxSize ピクセルの近傍領域の線形サイズ.non-maxima suppression で利用されます.

関数 GetStarKeypoints は,スケール-空間における極大値であるキーポイントを抽出します. スケール-空間は,各ピクセルに対して,異なるシグマのラプラシアンを近似値計算することで作成されます. 画像ピラミッドは計算時間を削減する有名な方法ですが,それを利用する代わりに,元の高解像度画像のピクセル毎に,すべてのラプラシアンを計算します. しかし,それぞれの近似ラプラシアン値は,積分画像を利用することで,シグマに関係なく O(1) 時間で計算できます. このアルゴリズムは,Agrawal08 の論文に基づいていますが,矩形や六角形,八角形の代わりに,直立した矩形と45度回転した矩形を重ね合わせた八頂点の星型形状を利用しており,これが名前の由来になっています.

各キーポイントは,タプル ((x, y), size, response) で表現されます:

  • x, y キーポイントのスクリーン座標.
  • size 特徴のサイズ. maxSize 以下.
  • response キーポイントの,近似されたラプラシアン値.

目次

このページ