Подгонка B-сплайна вокруг точек - PullRequest
2 голосов
/ 11 мая 2019

У меня есть большое количество точек, представляющих контуры изображения, они создаются с помощью scikit-изображения и выглядят так:

Source-image

Source-image

Контуры

Contours

Я бы хотел разместить B-сплайн вокруг этих точек так, чтобы результирующая линия наилучшим образом приближалась к контурам изображения

c_sample = cts.sample(50)

tck, u = si.splprep(c_sample.values.T, u=None, s=1.0, per=1) 
u_new = np.linspace(u.min(), u.max(), 1000)
x_new, y_new = si.splev(u_new, tck, der=0)

plt.plot(c_sample.values[:,0], c_sample.values[:,1], 'ro')
plt.plot(x_new, y_new, 'b--')
plt.show()

Мой процесссейчас берется выборка точек вдоль контура и используется scipy splprep и splev для подготовки и оценки кривых.Но результирующий сплайн смещается вокруг облака точек и не заполняет их аккуратно замкнутой формой. Я использовал аргумент ключевого слова per , чтобы обозначить, что фигура должна быть закрыта

Попытка встроенного сплайна

Fitted spline attempt

Я ищу какое-то направление в том, как достичь желаемого результата, используются ли мои точки в качестве контрольных точек, а не совпадают?важен ли порядок расположения точек вокруг?

Любое направление или помощь будут с благодарностью

...