特徴の検出と記述 ======================== .. highlight:: python * **image** 画像.ここからキーポイント(コーナー)が検出されます. * **keypoints** 画像から検出されたキーポイント. * **threshold** 中心ピクセルと,そのまわりの円周上のピクセルとの輝度値の差の閾値.アルゴリズムの説明を参照してください. * **nonmaxSupression** これが true の場合,検出されたコーナー(キーポイント)に対して non-maximum supression が適用されます. .. index:: CvSURFPoint .. _CvSURFPoint: CvSURFPoint ----------- `id=0.985035888511 Comments from the Wiki `__ .. class:: CvSURFPoint ``((x,y), laplacian, size, dir, hessian)`` というタプルで表現される,SURFキーポイント. .. attribute:: x 画像中の特徴のx-座標. .. attribute:: y 画像中の特徴のy-座標. .. attribute:: laplacian -1, 0 または +1.特徴点のラプラシアンの符号.ラプラシアン符号の異なる特徴同士はマッチしないので,特徴同士の比較を高速化するために利用されます. .. attribute:: size 特徴のサイズ. .. attribute:: dir 特徴の方向:0...360 度. .. attribute:: hessian ヘッシアンの値(特徴の強さを大まかに推定するのに利用できます.params.hessianThreshold も参照してください). .. index:: ExtractSURF .. _ExtractSURF: ExtractSURF ----------- `id=0.972047969014 Comments from the Wiki `__ .. function:: ExtractSURF(image,mask,storage,params)-> (keypoints,descriptors) 画像から SURF 特徴を抽出します. :param image: 8 ビット,グレースケールの入力画像. :type image: :class:`CvArr` :param mask: オプション.8 ビットの入力マスク.0以外のマスクピクセルが50 % 以上を占める領域の特徴のみが計算されます. :type mask: :class:`CvArr` :param keypoints: キーポイントのシーケンス. :type keypoints: :class:`CvSeq` of :class:`CvSURFPoint` :param descriptors: ディスクリプタのシーケンス.それぞれの SURF ディスクリプタは,長さが 64 または 128 の float のリストです. :type descriptors: :class:`CvSeq` of list of float :param storage: キーポイントとディスクリプタが格納されるメモリストレージ. :type storage: :class:`CvMemStorage` :param params: タプル ``(extended, hessianThreshold, nOctaves, nOctaveLayers)`` 形式の,様々なアルゴリズムパラメータ: * **extended** 0 の場合,基本ディスクリプタを意味し( 64 要素),1 の場合,拡張ディスクリプタを意味します( 128 要素). * **hessianThreshold** これよりも大きいヘッシアン値を持つ特徴だけが抽出されます.適切なデフォルト値は,約 300-500 です(これは,画像の局所的なコントラストとシャープネスに依存します).ユーザは,ヘッシアン値やその他の特徴に基づいて,さらに特徴を除外する事ができます. * **nOctaves** 抽出に利用されるオクターブ数.オクターブが 1 階上がる毎に,特徴サイズは 2 倍になります(デフォルトは 3 ). * **nOctaveLayers** 各オクターブ内のレイヤ数(デフォルトは 4 ). :type params: :class:`CvSURFParams` 関数 cvExtractSURF は, Bay06 で述べられたロバストな特徴を画像から検出します.各特徴は,それ自身の位置,サイズ,姿勢に加え,オプションとして(基本または拡張)ディスクリプタ,を返します. この関数は,物体追跡や位置同定,画像スティッチングに利用できます. 画像から,強い SURF 特徴を抽出する方法を示します. .. doctest:: >>> 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 .. .. index:: GetStarKeypoints .. _GetStarKeypoints: GetStarKeypoints ---------------- `id=0.51775881436 Comments from the Wiki `__ .. function:: GetStarKeypoints(image,storage,params)-> keypoints StarDetector アルゴリズムを用いて,キーポイントを抽出します. :param image: 8 ビット,グレースケールの入力画像. :type image: :class:`CvArr` :param storage: キーポイントが格納されるメモリストレージ. :type storage: :class:`CvMemStorage` :param params: タプル ``(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 で利用されます. :type params: :class:`CvStarDetectorParams` 関数 GetStarKeypoints は,スケール-空間における極大値であるキーポイントを抽出します. スケール-空間は,各ピクセルに対して,異なるシグマのラプラシアンを近似値計算することで作成されます. 画像ピラミッドは計算時間を削減する有名な方法ですが,それを利用する代わりに,元の高解像度画像のピクセル毎に,すべてのラプラシアンを計算します. しかし,それぞれの近似ラプラシアン値は,積分画像を利用することで,シグマに関係なく O(1) 時間で計算できます. このアルゴリズムは,Agrawal08 の論文に基づいていますが,矩形や六角形,八角形の代わりに,直立した矩形と45度回転した矩形を重ね合わせた八頂点の星型形状を利用しており,これが名前の由来になっています. 各キーポイントは,タプル ``((x, y), size, response)`` で表現されます: * **x, y** キーポイントのスクリーン座標. * **size** 特徴のサイズ. ``maxSize`` 以下. * **response** キーポイントの,近似されたラプラシアン値.