2016-04-08 18 views
10

Emgu CVの使用道路ネットワークの画像内の輪郭から閉じたポリゴンのセットを抽出しました。ポリゴンは道路のアウトラインを表します。 OpenStreetMapsマップ(Emgu CVからの 'pixel'フォームのポリゴンがプロットされる緯度/経度フォームに変換されている)上にプロットされた結果は以下のとおりです。道路を表すポリゴンのEmgu CV(またはOpenCV)のポリゴンセットからのボロノイグラフ

セット概説:私は今、私は、道路の中心線を見つけましょうポリゴン、このセットのボロノイ図を計算したい

enter image description here

。しかし、エムCVで私はのセットのボロノイの図を得る方法を見つけることができます。これは、(Subdiv2Dクラスを使用して)点のセットのDelaunay三角測量を見つけ、GetVoronoiFacetsでボロノイファセットを計算することによって行われます。

私はセット内のすべてのポリゴン(各ポリゴンは点のリストである)によって定義されたポイントのボロノイ図を計算しようとしたが、1想像のとおり、これは、私に非常に複雑なボロノイ図を与える:

点のセットのボロノイ図:

enter image description here

この画像(そのように入り組んでいるため、明確にするために)最初の画像の小さな部分を示しています。実際、図の線の一部は道路の中心線を表しているようですが、他の線が非常に多いので、「良い」線を抽出する基準を見つけるのは難しいでしょう。

私が直面しているもう1つの潜在的な問題は、最初の画像から分かるように、いくつかのポリゴンが他のものの内部にあることです。disjointの標準的な状況にはありません閉じたポリゴン。つまり、道路があるポリゴンの外側の境界と別のポリゴンの内側の境界の間にある場合があります。

Emgu CV(またはOpen CV)を使ってポリゴンセットのボロノイグラフを計算する方法についての提案を探しています。私が概説したこの2番目の問題を克服してください。私はEmgu CVを使わずにこれを達成するための他の提案もしています。

+0

したがって、_pixel form_(簡単)または2)ポイント座標lat、lngを使用して、1)画像から始まる通りの「中心」を計算する必要がありますか? 1)では、塗りつぶされたポリゴンを描き、距離変換を使うことができます。通りの中心には最大距離値があります。非最大値の抑制はあなたに結果を与えるでしょう – Miki

+0

画像から私が必要なものです。距離変換を使用することは素晴らしいアイデアです、ありがとう。実際に私は元のバイナリイメージに距離変換を適用することができます。これは最初に輪郭を見つけてポリゴンを計算した場所です!これは、他のポリゴンを含むポリゴンの問題に対処する必要がないため、素晴らしいことです。あなたは非最大限の抑圧で私を助けることができます - 私はエグCVでこれをどのように達成するでしょうか?検索で最も近いのはハリスエッジ検出です。 – mchristos

+0

しかし、私が必要とする最終的な結果は、道路の中心線を表す緯度/経度のグラフです...中心線のピクセルからは原則的に見つけることができますが、それはおそらく最良の方法ではありません。おそらくボロノイグラフはまだまだ良いアプローチです。 – mchristos

答えて

0

すでにポリゴンがある場合は、Straight Skeletonを計算してみてください。

私はそれを試していませんが、CGALはimplementationです。この特定の関数licenseはGPLです。

可能性の問題があることも

このCGALパッケージの現在のバージョンは唯一 は、それが一般的な多角形を処理しないとすると、穴のあるシンプルな多角形の内部に ストレート骨格を構築することができます飛行機の中の数字。

恐らく回避策があります。たとえば、すべてのポリゴンをより大きな矩形に含めることができます(元のポリゴンは新しい矩形の穴になります)。元のポリゴンに穴がある場合、これはうまく動作しないことがあります。これを解決するには、穴があるポリゴンごとにアルゴリズムを実行し、すべてのポリゴンを四角形に置き、すべての穴を削除してアルゴリズムを再実行します。

関連する問題