0

多くの 3D 線分があります。それらの一部はほぼ平行で、一部は異なる方向を向いています。外れ値を避け、指定された 3D 線分を表すために最適な 3D 線を取得したいと考えています。

この場合、RANSAC メソッドがどのように適用されるのか少し混乱しています...

最初にランダムな線を見つける必要がありますか、それともこれを特定の 3D 点の問題と見なす必要がありますか?

これをC ++で実装するときに従うべき構造を誰かが私に投稿できますか。ありがとう

4

1 に答える 1

1

RANSAC は、データをモデルに適合させるための優れたツールです。セグメントのコレクションに 1 つの 3D ラインがある場合、RANSAC を実行し、インライアの量を最大化したラインを選択するだけで十分です。ただし、コレクションには多くの行があるため、別のアプローチを試す必要があります (後で説明するように、RANSAC 以外のアプローチでも構いません)。

たとえば、最初に RANSAC を実行して、できるだけ多くのセグメントに一致する行を見つけようとすることができます。その行を見つけたら、コレクションからインライア セグメントを削除し、RANSAC を再度実行します。

ラインを作成するには、セグメントのみが必要なので、ライン モデルの構築は非常に簡単です。

線分が線分に適合するかどうかを判断するには、内積 (0 に近いほど良い) と線分の中間点から線分までの距離の間の角度を計算できます。

また、最初のステップとして非常に小さなセグメントを除外できることにも注意してください。後でいくつかの反復を保存して、ノイズの多い結果を避けることができます。

ハフ変換のアプローチも考えられます。各セグメントから線を作成できるため、その線のパラメーター (法線または方向ベクトルと原点までの距離) を取得し、それらを許容可能なビンサイズに量子化し、マトリックス内のそれらのパラメーターに投票を追加できます。最後に、あなたの線は投票行列の頂点にあります。

于 2013-06-16T12:14:57.993 に答える