画像上の一連の点が与えられた場合、図に示すように、整列した点のグループを検出したいと考えています。
これどうやってするの?どんな助けでも大歓迎です。
画像上の一連の点が与えられた場合、図に示すように、整列した点のグループを検出したいと考えています。
これどうやってするの?どんな助けでも大歓迎です。
これは、ハフ変換の優れた潜在的なアプリケーションです。線のハフ空間は (r, \theta) です。ここで、r は原点から線上の最も近い点までの距離であり、\theta はその向きです。
Wiki の記事に示されているように、xy 空間の各点はハフ空間の正弦波になります。
すべての正弦波が交差する場所は、すべての点を通る 1 本の線に対応します。ポイントが完全に同一線上にない場合、交点は「あいまい」になります。
線を点に合わせる最も簡単なアルゴリズムは、長方形の (r, \theta) アキュムレータ配列を最初にゼロに設定することです。次に、各ポイントの正弦波をこの離散 (r, \theta) 空間にトレースし、各アキュムレータ要素を固定量だけインクリメントします。大きな配列要素を探して、予想される線の適合を見つけます。要素の座標は、フィットのために (r, \theta) を与えます。
正弦波のトレースは簡単です。\theta 軸に T アキュムレータ ビンがある場合、それぞれが 0 <= k < T の角度 k(\pi)/N に対応します。したがって、この範囲内の k について、原点から最も近い点までの距離を計算します。点を通るこの向きの線の。これにより r 値が得られます。R 軸に R ビンがあり、Rmax が r の最大値である場合、ビン (floor(r/rMax*R), k) をインクリメントします。
まず、これを試すことができます:
これらの点のうちの任意の 2 つを選択することによって形成できるすべての線をリストします (点は 1 つn(n-1)/2
) n
。
これらの線のいずれか 2 つについて、それらが整列しているかどうかを確認します (つまり、勾配差が 10 度以内)。
整列されたペア ラインごとに、これらのライン上に他のポイントも整列されているかどうかを簡単に確認できます。そして、これらのポイントは、必要な整列ポイントになります。