2

画像から2D線分を抽出しました。だから私はそれらの終点座標を知っています。また、いくつかの参照2D線分があります。これで、両方の線分がベクトル形式になりました。参照線分と抽出線分を比較すると、抽出線分が大量にあります。

私がやりたいのは、抽出から各参照線の共役線分を見つけることです。つまり、線分を一致させたいのです。ただし、検索領域を縮小するために、参照線セグメントの周囲にバッファゾーンを定義することにより、検索領域を制限したいと思います。

(1)私の最初の質問は、幾何学理論が不足しているので、c++でこのバッファーケースをどのように実装できるかです。

注:バウンディングボックスを使用して、参照線に沿って方向付けられる長方形のバッファーを探したくありません。

(2)2番目の質問は、長方形のバッファー制限を知っている場合、線分の不要な検索を回避するためにどのタイプの概念を使用する必要があるかということです。

実は、幾何学的なベース法を探しています

これを宿題とは思わないでください。数学が苦手なため、本当に苦労しています。前もって感謝します。

例を見てください。バウンディングボックス(青いボックス)を使用すると、不要な線が表示されます。メインの参照線(濃い黒)に向けられたバッファ長方形(赤)の場合、数本の線が表示されます。

黒い線は-参照線と破線は画像ベースの抽出された線です

ここに画像の説明を入力してください

4

1 に答える 1

1

最初の提案

KD-TreeR- Treeを見てください。 それらは、いくつかの計算を減らすためにスペースを分割するためのものです。libkdtreeと同様に、それらのクラスライブラリとして多くの実装があります。私は以前、KD-Tree を使用して、2D 空間で最も近い近傍を見つける比較を減らしました。単純ではありませんでしたが、効果的でした。

2番目の提案

方向付けられた長方形 (点がその中にあるかどうかをテストするため) について考える代わりに、線分から点までの距離について考えることができます。

ここに画像の説明を入力

抽出されたセグメントの 2 つの始点と終点がセグメントを参照するのに十分に近いかどうかを確認します。灰色の領域は、方向を定められた長方形の適切な近似値です。

灰色のカプセル内のこれらのセグメントは、参照セグメントと一致するのに適しているため、他のセグメントは無視できます。(抽出されたセグメントの 2 つのポイントが灰色の領域にある場合、参照セグメントに一致する適切な候補となる可能性があります。それ以外の場合は、そのセグメントを無視できます。)

線分には始点と終点の 2 つの点があり、各点には X と Y の 2 つのコンポーネントがあります。

Segment ref(r.start, r.end);

foreach(seg : extracted segments)
{
  if (DistancePointSegment(seg.start, ref)<D &&
      DistancePointSegment(seg.end  , ref)<D )
  {
    // Mark seg as a search candidate
  }
}

セグメントからポイントまでの距離を確認するには、ポイントとライン セグメント間の最短距離を参照してください。

于 2013-01-16T16:34:44.653 に答える