1

この画像の輪郭の塗りつぶされたバイナリ マスクを取得しようとしています。画像の輪郭

この質問を見てみましたSciPy Create 2D Polygon Mask ; ただし、私のデータセットが気に入らないようです。

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

ポイント_インサイド_ポリの制限を説明するために、バイナリマスクまたは誰かを返すことを試みることができる別の方法があるのだろうか

こんな仕上がりになりそうだから悪いマスク散乱

4

1 に答える 1

2

最後に何をプロットしているのかわかりませんが、あなたの例は私にとってはうまくいきます:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.nxutils import points_inside_poly
from itertools import product, compress

pv = [(1,1),(5,1),(5,9),(3,2),(1,1)]

x, y = np.meshgrid(np.arange(10),np.arange(10))
x, y = x.flatten(), y.flatten()

xy = np.vstack((x,y)).T

grid = points_inside_poly(xy,pv)

xv, yv = zip(*pv)
xp, yp = zip(*compress(xy,grid))

plt.plot(xp,yp,'o',color='red',label='points')
plt.plot(xv,yv,'o',color='blue',label='vertices')
plt.xlim((0,10))
plt.ylim((0,10))
plt.legend()
plt.show()

points_inside_poly

于 2012-06-28T04:15:39.860 に答える