2012-06-28 2 views
1

Я пытаюсь получить заполненную двоичную маску контура этого изображения. The contour of the imageУ меня есть набор точек вдоль овала. Как создать заполненную двоичную маску

Я взглянул на этот вопрос 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 

Интересно, есть ли другой способ, что я могу попытаться вернуть двоичную маску или кто-то, чтобы объяснить ограничения points_inside_poly

, потому что, кажется, в конечном итоге что-то вроде этого badMaskScatter

+0

Что вы замышляете? – user545424

+0

изображение выше. Овальная штука. Если вы хотите, я бы отредактировал, разместив все код и изображения, но я хотел бы сделать этот вопрос коротким, как я мог. – user1462442

+0

Похоже, вы только что неправильно изменили свою сетку (например, 'data.reshape ((a , b)) 'vs' data.reshape ((b, a)) '. –

ответ

2

I не уверен, что вы черчения в конце, но ваш пример работает для меня:

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

+0

Я использую контур этого изображения выше. Пример кода просто копирует и вставляет это здесь, так как люди не всегда чувствуют, что нажимают ссылки. Я действительно не понимаю, почему я получил этот снимок ниже. Хммммм. Думаю, мне нужно попытаться настроить мои данные снова, потому что поведение points_inside_poly. Если вы хотите, я могу опубликовать остальная часть моего кода, но его kidda embrassed, потому что я пытаюсь изучить эти библиотеки. – user1462442

+0

Nevermind это работает. Я использовал неправильную графику apis – user1462442

 Смежные вопросы

  • Нет связанных вопросов^_^