具有非常大的y值的scipy三次样条

时间:2017-06-14 19:28:35

标签: scipy spline

我正在做一些车道检测作为一个有趣的项目,我正在尝试创建一个三次样条来表示车道。但是,当我使用scipy CubicSpline函数时,我得到了一些荒谬的大值。

这是我的代码:

T myT = new T();

这是输出:

plotted cubic spline

以下是绘制控制点的原始图像:

original image with control points

我不明白为什么样条算法为这样一个简单的样条线提供了如此大的值。那么,这里的问题是什么?坏的价值?三次样条的使用不正确?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

问题是样条曲线在此图像中是垂直的,这意味着x值不是总是递增的顺序(例如,第二控制>第一控制点)。因此,当我对列表进行排序时,可能会出现类似情况(2,1,3)。然后,scipy必须使用一些巨大的系数来拟合这个样条。

修复是翻转轴,使y现在是x轴。现在排序不会导致控制点的任何奇怪的排序。

cx = [particle[0], particle[1], particle[2]]
cy = [y_values[0], y_values[1], y_values[2]]

# Sort particles in increasing x order
points = zip(cx, cy)
points = sorted(points, key=lambda point: point[1])
x1, y1 = zip(*points)

x1 = np.asarray(x1)
y1 = np.asarray(y1)
s = CubicSpline(y1, x1)

new_x = np.arange(min(y1), max(y1), 0.1)
new_y = s(new_x)
plt.plot(new_y, new_x)
plt.plot(cx, cy, '.')