0

外縁の周りにポリオンを描きたい画像がいくつかあります。画像自体は透明な背景上にあり、点を含み、透明(または白)ではないピクセルの配列を画像に作成しました。

さて、私の質問は、外側のエッジポイントの周りに正確なポリゴンを描画するにはどうすればよいですか?エッジの周りに凸包を作成するために読んだグラハムスキャンアルゴリズムを使用しましたが、これは凹みのあるオブジェクトでは機能しないようです。例えば:

http://i48.tinypic.com/4s0lna.png

左側の画像は、この方法を使用して右側の画像で塗りつぶされます。ご覧のとおり、「塗りつぶし」が少し多すぎます。

これを解決するために使用できる他のアルゴリズムまたはアプローチが必要だと思いますが、どこを見ればよいのか、それが何と呼ばれるのかわかりません。誰かが私を正しい方向に向けることができますか?私はC#/。netを使用していますが、これらの線に沿って機能する可能性のあるものがすでに存在する可能性があります。

4

2 に答える 2

2

2D「アルファ形状」アルゴリズムがあなたにとって正しい選択だと思います。

http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Alpha_shapes_2/Chapter_main.html

アルファ形状は、より一般的な形状の生成を可能にする「凸包」アルゴリズムの一般化と見なすことができます。

アルファ形状を使用することにより、アルファパラメータ値を変更することにより、結果の形状によってキャプチャされる詳細のレベルを制御できます。

ここでJavaアプレットを試すことができます:http://cgm.cs.mcgill.ca/~godfried/teaching/projects97/belair/alpha.html

このアルゴリズムが行うことについてよりよく理解するために。

于 2012-10-27T10:41:45.303 に答える
1

フラッドフィルアプローチを使用して、ピクセルごとに開始できます。

Start in the corner, checking that it does have zero alpha.
Check the neighbours for zero alpha and iterate until we have no unchecked neighhours.

これにより、内部と外部の2つの単純に接続された領域で構成される画像のマスクが得られます。

次に、求めるセットは次のもので構成されます。

   all the points in the exterior which are on the boundary of the interior.

次に、次の方法でそれをポリゴンに変換できます。

Take an initial polygon that consists of all the points in the edge set
Remove redundant vertices that lie along straight edges.
于 2012-06-19T04:44:20.143 に答える