フリーマンチェーンを,折れ線で近似します.
パラメタ: |
|
---|
これは,単独動作可能な近似ルーチンです.関数 cvApproxChains は,これに相当する近似フラグを引数として与えた場合の FindContours と全く同じように動作します.この関数は,結果として得られる最初の輪郭へのポインタを返します.もしその他の近似輪郭が存在するならば,返された構造体のフィールド v_next と h_next を辿って取得できます.
ApproxPoly(src_seq, storage, method, parameter=0, parameter2=0) -> sequence
折れ線(カーブ)を指定された精度で近似します.
param src_seq: 座標点配列のシーケンス param storage: 似された折れ線を保存するストレージ.これがNULLの場合,入力シーケンスのストレージが利用されます param method: 近似手法.Douglas-Peuckerアルゴリズムに相当する CV_POLY_APPROX_DP のみがサポートされます param parameter: 近似手法のパラメータ. CV_POLY_APPROX_DP の場合は,要求する近似精度を意味します param parameter2: src_seq がシーケンスの場合,この値は,1つ のシーケンスを近似するのか, src_seq と同レベル,およびそれより下のレベルに存在する全てのシーケンスを近似するのか,を決定します(階層的輪郭構造体については FindContours の説明を参照してください).また, src_seq が 点座標の配列 CvMat* である場合,この値は折れ線が閉じている( parameter2 !=0 )か,開いている( parameter2 =0 ),を決定します
この関数は,1つあるいは複数の折れ線(カーブ)を近似し,その近似結果を返します.折れ線が複数の場合,結果の木構造は入力のそれと同じ構造になります(1対1に対応します).
輪郭線の周囲長,あるいは曲線の長さを求めます.
パラメタ: |
|
---|
この関数は,曲線上の連続する2点間の線分距離の総和として,曲線の長さを求めます.
点群を包含する傾いていない矩形を求めます.
パラメタ: |
---|
この関数は,2次元点の集合に対する傾いていないバウンディングボックスを返します. 以下に,取り得る points の種類とフラグの組み合わせを示します:
update | points | action |
---|---|---|
0 | CvContour* | バウンディングボックスを計算せず,輪郭ヘッダのフィールド rect から取得します. |
1 | CvContour* | バウンディングボックスを計算し,輪郭ヘッダのフィールド rect に書き込みます. |
0 | CvSeq* or CvMat* | バウンディングボックスが計算され,それが返されます. |
1 | CvSeq* or CvMat* | ランタイムエラーが発生します. |
箱形状の頂点を求めます.
パラメタ: |
|
---|
この関数は,入力された2次元の箱形状の頂点を求めます.
輪郭のペアワイズ幾何ヒストグラムを求めます.
パラメタ: |
|
---|
この関数は, Iivarinen97 で提唱された,輪郭に対する2次元のペアワイズ幾何ヒストグラム(PGH)を計算します.このアルゴリズムでは,輪郭を構成する辺同士の全ての組み合わせ(ペア)が考慮されます.各ペアに対して,辺同士が成す角度と,辺同士の最小/最大距離が求められます.そのために,一つ一つの辺を順番に基準辺として,それ以外の辺との関係を全て調べます.基準辺とそれ以外の辺を考える場合,基準辺ではない方の辺上にある点から,基準辺の直線までの最小距離と最大距離が選択されます.この辺同士の角度がヒストグラムの行を定義します.ヒストグラムでは,計算された最小・最大距離の範囲内に含まれる距離に対応する全てのビンが,その値を増加させます(つまり,このヒストグラムは Iivarninen97 での定義に対して,転置されています).このヒストグラムは,輪郭同士のマッチングに利用できます.
2つの重み付き点群間の「最小コスト」距離を求めます.
パラメタ: |
|
---|
この関数は,EMDと2つの重み付き点群間の距離の下限値のどちらか片方,あるいは両方を計算します.これの RubnerSept98 で述べられている応用例の1つが,画像抽出のための多次元ヒストグラム比較です.EMDは,修正シンプレックス法で解くことができる輸送問題なので,最悪の場合は計算量が指数関数的に増加するが,平均的には十分高速に計算できます.実際は,(線形時間アルゴリズムを利用して)下限値をより高速に求めることが可能で,2つのシグネチャが十分に離れており,同一物体に関連するものではないと判断するのに利用できます.
輪郭形状が凸であるかを調べます.
Parameter: | contour (CvArr or CvSeq) – 対象となる輪郭(座標点のシーケンス,または配列) |
---|
この関数は,入力輪郭が凸であるか否かを調べます.この輪郭は,自己交差しないような単純なものでなければいけません.
タプル (start, end, depthpoint, depth) で表現される,一つの輪郭凹状欠損.
- start¶
- 輪郭の凹状欠損の始点 (x, y)
- end¶
- 輪郭の凹状欠損の終点 (x, y)
- depthpoint¶
- 凹状欠損の中で凸包から最も遠い点 (x, y)
- depth¶
- 最も遠い点と凸包間の距離
全輪郭,あるい輪郭の一部が囲む領域面積を求めます.
パラメタ: |
---|
この関数は,全輪郭,あるい輪郭の一部が囲む領域面積を求めます.後者の場合,以下の図のように,輪郭の弧と2点を結ぶ弦によって区切られた総面積が求められます:
輪郭の姿勢によっては, 負の 値を返すことがあります.面積の絶対値を得るには,C言語の fabs() を利用してください.
木構造から輪郭を復元します.
パラメタ: |
|
---|
この関数は,その二分木表現から輪郭を復元します.パラメータ criteria は,精度と復元に利用する木のレベル数のどちらか片方,あるいは両方を決めます.これにより,近似された輪郭を作成することができます.また,この関数は,復元された輪郭を返します.
点集合に対する凸包を求めます.
パラメタ: |
|
---|
この関数は,Sklanskyのアルゴリズムを用いて2次元点集合の凸包を求めます. storage がメモリストレージならば,この関数は,凸包を構成する点,あるいはその点へのポインタを含むシーケンスを作成します.これは return_points の値によって決まり,出力としてこのシーケンスが返されます. storage が CvMat ならば,この関数はNULLを返します.
輪郭の凹状欠損を見つけます.
パラメタ: |
|
---|
この関数は,入力輪郭の全ての凹状欠損を見つけて,構造体 CvConvexityDefect のシーケンスを返します.
輪郭の階層表現を作成します.
パラメタ: |
|
---|
この関数は,入力輪郭 contour の二分木表現を作成し,その根へのポインタを返します.パラメータ threshold が0以下の場合,この関数は全二分木表現を作成します.また,0よりも大きい場合は,精度 threshold の表現を作成します:これは,近似線によって切り取られる元輪郭線上の頂点数が threshold よりも少なくなると,それ以上木を作成しません.また,この関数は,作成された木構造を返します.
2値画像中の輪郭を抽出します.
パラメタ: |
|
---|
この関数は, Suzuki85 のアルゴリズムを用いて,2値画像から輪郭を抽出します.その輪郭は,形状解析や物体検出,物体認識に役立ちます.
この関数は,2値画像から輪郭を抽出し,その輪郭数を返します.また,ポインタ first_contour に,結果が出力されます.これは,最も外側にある最初の輪郭へのポインタを表し,輪郭が全く抽出されなかった場合(画像が完全に真っ黒の場合)は,戻り値が NULL になります.それ以外の輪郭へは,リンクである h_next と v_next を利用して, first_contour から辿ることができます.関数 DrawContours の説明にあるサンプルは,輪郭を利用して連結成分を抽出する方法について述べています.輪郭は,形状解析や物体認識などにも用いられます - OpenCVサンプルディレクトリにある
squares.py を参照してください.
注意: 元の image は,この関数によって書き換えられます.
この関数は,2次元点の集合に最もフィットする(二乗誤差が最小になる)楕円を求めます.返される構造体のフィールドは, size が,楕円軸の半分の長さではなく全長を表していることを除けば, Ellipse のそれと同様です..
2次元あるいは3次元の点集合に直線をフィッティングします.
パラメタ: |
|
---|
この関数は, を最小化することで,2次元あるいは3次元の点集合に直線をフィッティングします.ここで, は 番目の点と直線の距離, は距離関数(以下の内の1つ)を表します:
dist_type=CV_DIST_L2
dist_type=CV_DIST_L1
dist_type=CV_DIST_L12
dist_type=CV_DIST_FAIR
dist_type=CV_DIST_WELSCH
dist_type=CV_DIST_HUBER
画像モーメント構造体から,中心モーメントを取得します.
パラメタ: |
|
---|
この関数は,中心モーメント,つまり,画像モーメントの場合は次のように定義される値,を取り出します:
ここで, は重心の座標です:
7つの Hu モーメント不変量を求めます.
パラメタ: |
|
---|
この関数は,次のように定義される 7つの Hu モーメント不変量を求めます. http://en.wikipedia.org/wiki/Image_moment も参照してください.
ここで は,正規化された中心モーメントを表します.
反転によって符号が逆転してしまう7番目のHuモーメントを除いて,これらの値は,画像のスケール変化,回転,および反転に対して不変であることが分かっています.この不変量は,もちろん画像解像度が有限であるという仮定の元に成り立っています.ラスタ画像の場合は,元画像に対する Hu 不変量と変形した画像に対するものとは多少異なります.
>>> import cv
>>> original = cv.LoadImageM("building.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE)
>>> print cv.GetHuMoments(cv.Moments(original))
(0.0010620951868446141, 1.7962726159653835e-07, 1.4932744974469421e-11, 4.4832441315737963e-12, -1.0819359198251739e-23, -9.5726503811945833e-16, -3.5050592804744648e-23)
>>> flipped = cv.CloneMat(original)
>>> cv.Flip(original, flipped)
>>> print cv.GetHuMoments(cv.Moments(flipped))
(0.0010620951868446141, 1.796272615965384e-07, 1.4932744974469935e-11, 4.4832441315740249e-12, -1.0819359198259393e-23, -9.572650381193327e-16, 3.5050592804745877e-23)
画像モーメント構造体から,正規化された中心モーメントを取得します.
パラメタ: |
|
---|
この関数は, 次のように正規化された中心モーメントを取得します:
画像モーメント構造体から,空間モーメントを取得します.
パラメタ: |
|
---|
この関数は,空間モーメント,つまり,画像モーメントの場合は次のように定義される値,を取り出します:
ここで, は,ピクセル の輝度値です.
2つの輪郭を,その二分木表現によって比較します.
パラメタ: |
|
---|
この関数は,2つの輪郭(木)の類似度を求めます.この類似度は,二分木の根から順に,それぞれのレベル毎に計算されます.あるレベルにおいて,輪郭間の差が threshold よりも小さくなった場合,復元処理が中断され,その時点での差が返されます.
2つの形状を比較します.
パラメタ: |
---|
この関数は,2つの形状を比較します.実装されている3つの手法は,いずれもHuモーメント( GetHuMoments の説明を参照してください)を利用します( は object1 , は object2 を表します):
method=CV_CONTOUR_MATCH_I1
method=CV_CONTOUR_MATCH_I2
method=CV_CONTOUR_MATCH_I3
ここで,
です. また, は, と それぞれのHuモーメントを表します.
与えられた2次元点集合を囲む最小の矩形を求めます.
パラメタ: |
|
---|
この関数は,点集合に対する凸包を作成し,その凸包に対して rotating calipers 法を適用することにより,与えられた2次元点集合を囲む最小の矩形を求めます.
図.輪郭を囲む最小面積の矩形
与えられた2次元点集合を囲む最小の円を求めます.
パラメタ: |
|
---|
この関数は,反復アルゴリズムを用いて,与えられた2次元点集合を囲む最小の円を求めます.そして,結果として得られる円が全ての入力点を囲んでいる場合は0以外の値を返し,そうでない場合(つまり,アルゴリズムが失敗した場合)は0を返します.
ポリゴンあるいはラスタライズされた形状の,3次までのモーメントを求めます.
パラメタ: |
---|
この関数は,3次までの空間モーメントあるいは中心モーメントを計算し,それらを moments に書き込みます.そしてこれらのモーメントは,形状の重心,面積,主軸,そして7つのHuモーメント不変量を含む各種の形状特徴を計算するために利用されます.
点と輪郭の位置関係を調べます.
パラメタ: |
|
---|
この関数は,与えられた点が輪郭の内側,外側,あるいは輪郭の辺上(あるいは,頂点上)のどこにあるかを判定します.そして,その結果に応じて,正,負,0のいずれかの値が返されます. の場合,戻り値はそれぞれ +1,-1,0です.また, の場合,入力点とそれに最も近い輪郭の辺までの符号付き距離が返されます.
ここでは,この関数の出力例として,各画像ピクセルが輪郭に対してテストされる様子を示します.