2012-02-17 4 views
0

によってスムージング:は、ポリゴンは私がフォロールールを適用する必要があり ポイントシーケンスによって与えられたポリゴン持っ条件

  • 角度は180,90,45度でなければなりませんが。
  • もしそれと平行に線が離れていれば、より大きな線よりも大きな線が得られるでしょう。
  • ポリゴンの向きは水平方向と垂直方向です。

(特定の問題に最も近いが、その後、私はOpenCVの内のオブジェクトの輪郭を見つけた場合は、その後、彼らは描くのはいいはずです)

私はこのように気にいらを実行する必要があります。 Example

+0

だからあなたの質問は何ですか? –

+0

どうすればいいですか?それとも私はどこで答えを見つけることができますか? – Famos

答えて

0

あなたが求めていることは、自明ではないように見えます。より多くのコンテキストが必要です。

私は2つのアプローチしようとするだろう:

  • は、ポリゴン上の正方形のグリッドをオーバーレイし、十分に充填されている正方形を維持します。

  • 形状をスケルトン化(http://en.wikipedia.org/wiki/Topological_skeleton)、クリーンアップし、スケルトンをほとんど水平/垂直セグメントに分割します。これらのセグメントを真横のストロークで置き換えます。

+0

私はskelettonizeについて考えますが、私は今どのようにそれを呼び出すのですか?ありがとうございます – Famos

2

DPポイント削減を使用してこの問題にアプローチします。このルーチンにはいくつかの種類がありますが、最も一般的なのはあなたがやろうとしていることには最適ではありませんが、最終的にはこの方法が最良の品質になります。

古典的なDP操作では、ポリラインを形成する点の配列を取り、特定の要素を超えて形状を破損しない点を削除します。この係数はデータに基づいた測定単位ですので、おそらくピクセル単位になります。ご想像のように、簡単に数量化できるポイントを削除しない限り、DPを使うのが最も難しいです。

あなたのケースでは、多くの時間を費やして、少なくともポリゴンの形状に寄与するポイントを削除したいと考えています。あなたはDPの典型的な再帰的な例を取り、ポイントを通した最初の反復後に壊れて、一度に1つのポイントを削除することができます。あなたはあなたが持っている要件を満たしているかどうかを確認するためにあなたの形を得点するでしょう。完璧なスコアを出していない場合は、別のポイントを削除し、それが達成されるまでスコアを付け直すか、3ポイントしか残されません。完璧なスコアがない場合は、最高のスコアでシェイプを取ることができ、おそらくそれが要件を満たすようにする第2のアルゴリズムを持つことができます。

http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm

+0

ありがとう、私はこのalgotithmを知りませんでした – Famos

関連する問題