2017-02-17 4 views
0

ポリゴンのリストが与えられているので、重複しないすべての領域の境界を見つけようとしています。交差するポリゴンの非重複領域の境界

polygon_lst = [] 
for xyloc in xylocs: 
    polygon_lst.append(Polygon(xyloc)) 

thisと同様の問題です。しかし、私はunary_union操作を実行すると、私はエラーを取得する:

from shapely.geometry import LineString 
layer = polygon_lst 
rings = [LineString(list(pol.exterior.coords)) for pol in layer] 
from shapely.ops import unary_union, polygonize 

ERROR:shapely.geos:TopologyException: found non-noded intersection between LINESTRING (103.333 327.917, 103 328) and LINESTRING (104.2 327.2, 103 328) at 103.00000000000006 328

私は、互いの上に重ねすべてのポリゴンのマスクを作成する別の方法を試してみました。次に、opencvでCanny検出器とfindContour関数で別の領域を抽出しようとします。しかし、このメソッドによって生成された境界は接続されており(別の領域ごとに1つの境界ではない)、閉じられていません。私はこれらの非重複領域とその境界を見つけることについて行くことができる良い方法だろう何

enter image description here enter image description here

答えて

0

任意のポリゴンのブール演算は、主に縮退問題のために、最初に現れるよりはるかに困難な問題です。

ポリゴンをバッファにレンダリングし、余白を埋めるようにして輪郭を描くと、目的が達成されます。

バイナリイメージライブラリ で、これを行うためのすべてのビットと部分が利用できます(polbを描画してflood fillを行うにはdrawbinary.cが必要です。また、flood fillを行うにはbinaryutils.cやchaincodes.cが必要です)あなたはそれらを望んでいる(xysのリストとして、または上への左下のコマンドの連鎖として)

https://github.com/MalcolmMcLean/binaryimagelibrary

関連する問題