Como una alternativa ligeramente más directa a la respuesta de @Anil, matplotlib tiene matplotlib.nxutils.points_inside_poly
que se puede usar para rasterizar rápidamente un polígono arbitrario. P.ej.
import numpy as np
from matplotlib.nxutils import points_inside_poly
nx, ny = 10, 10
poly_verts = [(1,1), (5,1), (5,9),(3,2),(1,1)]
# Create vertex coordinates for each grid cell...
# (<0,0> is at the top left of the grid in this system)
x, y = np.meshgrid(np.arange(nx), np.arange(ny))
x, y = x.flatten(), y.flatten()
points = np.vstack((x,y)).T
grid = points_inside_poly(points, poly_verts)
grid = grid.reshape((ny,nx))
print grid
que produce (una matriz numpy boolean):
[[False False False False False False False False False False]
[False True True True True False False False False False]
[False False False True True False False False False False]
[False False False False True False False False False False]
[False False False False True False False False False False]
[False False False False True False False False False False]
[False False False False False False False False False False]
[False False False False False False False False False False]
[False False False False False False False False False False]
[False False False False False False False False False False]]
Usted debe ser capaz de pasar grid
a cualquiera de las funciones scipy.ndimage.morphology bastante bien.
uso el modo de imagen 'L', no '1', porque Numpy-1.5.0/PIL-1.1.7 no es compatible con 'numpy.array (img) 'conversión muy bien para imágenes bivalue. La parte superior de la matriz contiene 8 pequeñas subimágenes 1/8 del tamaño de máscara esperado, y las 7/8 restantes de la matriz están llenas de basura. Tal vez la conversión no descomprime los datos binarios correctamente? –
Creo que este método solo funciona con coordenadas enteras (es decir, las coordenadas de la cuadrícula). Si las coordenadas de los vértices son flotantes, la otra solución aún funciona. –
de: @jmetz "Solo FYI: Hice una prueba de tiempo simple y el enfoque PIL es ~ 70 veces más rápido que la versión matplotlib !!!" – Jakobovski