Là một thay thế trực tiếp hơn một chút cho câu trả lời của @ Anil, matplotlib có matplotlib.nxutils.points_inside_poly
có thể được sử dụng để nhanh chóng rasterize một đa giác tùy ý. Ví dụ.
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
nào mang lại (một mảng 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]]
Bạn sẽ có thể vượt qua grid
với bất kỳ chức năng scipy.ndimage.morphology khá độc đáo.
Nguồn
2010-09-07 03:34:49
Tôi sử dụng chế độ hình ảnh 'L', không phải '1', vì Numpy-1.5.0/PIL-1.1.7 không hỗ trợ 'numpy.array (img) 'chuyển đổi độc đáo cho hình ảnh bivalue. Phần trên cùng của mảng chứa 8 subimages nhỏ 1/8 kích thước mặt nạ dự kiến, với 7/8 còn lại của mảng chứa đầy rác. Có lẽ việc chuyển đổi không giải nén dữ liệu nhị phân đúng cách? –
Tôi nghĩ rằng phương pháp này chỉ hoạt động với các tọa độ nguyên mặc dù (tức là tọa độ lưới). Nếu tọa độ đỉnh là nổi, thì giải pháp kia vẫn hoạt động. –
từ: @jmetz "Chỉ cần FYI: Tôi đã làm một thử nghiệm thời gian đơn giản và cách tiếp cận PIL là ~ 70 lần nhanh hơn so với phiên bản matplotlib !!!" – Jakobovski