2016-06-18 7 views
1

부울 배열에 연결된 하나의 연결 구성 요소가 True이고 폴리곤으로 변환하려는 테두리가 있습니다. 매끈하게.파이썬 : 부울 배열을 다각형

가정 내 배열 내가이

import numpy as np 
from skimage.morphology binary_erosion 

border_indices = np.transpose(np.nonzero(np.logical_xor(binary_erosion(img), img))) 

하지만 바로 포인트가 경계를 따라 정렬되지 않기 때문에 작동하지 않습니다 shapely.Polygon 객체로 사람들을 먹이 만에 증가 x 같은 경계 인덱스를 얻을 수 img입니다 및 y 값.

이 문제를 해결하기 위해 알파 모양을 사용할 수도 있지만 (볼록 선체를 찾고 있지는 않지만), 누군가가 바운딩 폴리곤에 도달하는 더 간단한 방법을 제안 할 수 있습니다. 정렬.

+0

동일한 곳에 있었다 당신은 더 나은 질문을 이해하기 위해'border_indices'의 구체적인 예제를 추가하십시오. – eguaio

답변

0

rasterio.features.shapes은 (는) 찾고있는 소리입니다. 절차를 도시한다 간단한 예 :

import rasterio.features 
import shapely.geometry 
import numpy as np 

im = np.zeros([5, 5], dtype=np.uint8) 
im[1:-1, 1:-1] = 1 

shapes = rasterio.features.shapes(im) 

shapes은 (형상, 값) 쌍과 함께 발생한다. 1 값이 동일한 위치로 대응하는 형상을 얻으려면이 어레이의 영역에 대응 shapely 다각형의리스트가 생성

polygons = [shapely.geometry.Polygon(shape[0]["coordinates"][0]) for shape in shapes if shape[1] == 1] 

값이 1

print(polygons) 
[<shapely.geometry.polygon.Polygon object at 0x7f64bf9ac9e8>]