У меня есть большое количество точек, представляющих контуры изображения, они создаются с помощью scikit-изображения и выглядят так:
Source-image
Контуры
Я бы хотел разместить 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 , чтобы обозначить, что фигура должна быть закрыта
Попытка встроенного сплайна
Я ищу какое-то направление в том, как достичь желаемого результата, используются ли мои точки в качестве контрольных точек, а не совпадают?важен ли порядок расположения точек вокруг?
Любое направление или помощь будут с благодарностью