如何连接两个对象的路径?

时间:2019-05-15 18:52:53

标签: python opencv scipy signals

我有两个对象位置的时间序列数据。第二个对象大致遵循第一个对象的路径。我想用最能代表两个对象组合路径的曲线来连接两个对象。这是后处理,所以我已经知道两个对象的将来路径。我可以使用有关第二个对象将在哪里计算路径的信息。 Link to .csv file of source data in Google Drive - blue is columns 0,1 and yellow is columns 3,4.

我的源数据如下:

yellow following blue

对象的间距相当相等。对象2在大约50帧中到达对象1的位置。我最初的方法是拍摄蓝色物体的过去25帧,黄色物体的未来25帧。我用signal.savgol()使结果平滑(粉红色显示)。

positions = leading_object[frame_number - 25: frame_number]
positions += trailing_object[frame_number: frame_number + 25
x,y = zip(*positions)
window_length = int(len(x)*.5)
if window_length//2 == window_length/2: window_length -= 1
x = signal.savgol_filter(x, window_length, polyorder)
y = signal.savgol_filter(y, window_length, polyorder)
positions = list(zip(x,y))

path

这行得通,但是从一条路径到另一条路径的平滑线 jogs 。我希望道路通畅。

actual vs desired

Link to complete code used to generate animations.

1 个答案:

答案 0 :(得分:0)

您实质上是在尝试对连接两个位置并插入两条线的某些点的曲线进行曲线拟合。就目前情况而言,这个问题有点过分确定,因为您有太多要点。这导致曲线“扭结”。

也许选择较少的点,例如每个局部轨迹的第5,第10,第15位给出6分,加上固定的端点会更好。

然后我将选择一种曲线拟合策略,以使导数具有良好的连续性,例如非均匀有理B样条(NURB)或Chebyshev多项式。