Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 估计点列表中缺少的点_Python_Interpolation_Point - Fatal编程技术网

Python 估计点列表中缺少的点

Python 估计点列表中缺少的点,python,interpolation,point,Python,Interpolation,Point,我通过在视频中检测球的飞行来生成一个x,y坐标的列表。我的问题是在视频的中间几帧不能检测到球,对于这些帧,列表追加- 1,- 1。 有没有办法估计这些点的球的真实x,y坐标 例如,跟踪点列表为: pointList = [(60, 40), (55, 42), (53, 43), (-1, -1), (-1, -1), (-1, -1), (35, 55), (30, 60)] 然后将3-1,-1缺失坐标的估计值与上下文一起返回到保留曲线的舍入点。您可以使用scipys样条插值缺失值: 将nu

我通过在视频中检测球的飞行来生成一个x,y坐标的列表。我的问题是在视频的中间几帧不能检测到球,对于这些帧,列表追加- 1,- 1。 有没有办法估计这些点的球的真实x,y坐标

例如,跟踪点列表为:

pointList = [(60, 40), (55, 42), (53, 43), (-1, -1), (-1, -1), (-1, -1), (35, 55), (30, 60)]
然后将3-1,-1缺失坐标的估计值与上下文一起返回到保留曲线的舍入点。

您可以使用scipys样条插值缺失值:

将numpy作为np导入 将matplotlib.pyplot作为plt导入 从scipy.interpolate导入splprep,splev 点列表=[60,40,55,42,53,43, -1, -1, -1, -1, -1, -1, 35, 55, 30, 60] 删除缺少的值 pointList=np.arraypointList 点列表=点列表[点列表[:,0]!=-1,:] def splinex,n,k=2: tck=splprepx.T,s=0,k=k[0] u=np.linspace0.0,1.0,n 返回np.column\u stacksplevx=u,tck=tck 在100点处使用二次样条插值点 点列表\插值=样条点列表,n=100,k=2 plt.plot*pointList.T,c='r',ls=,marker='o',zorder=10 plt.plot*pointList_插值.T,c='b' 可以使用scipys样条线插值缺少的值:

将numpy作为np导入 将matplotlib.pyplot作为plt导入 从scipy.interpolate导入splprep,splev 点列表=[60,40,55,42,53,43, -1, -1, -1, -1, -1, -1, 35, 55, 30, 60] 删除缺少的值 pointList=np.arraypointList 点列表=点列表[点列表[:,0]!=-1,:] def splinex,n,k=2: tck=splprepx.T,s=0,k=k[0] u=np.linspace0.0,1.0,n 返回np.column\u stacksplevx=u,tck=tck 在100点处使用二次样条插值点 点列表\插值=样条点列表,n=100,k=2 plt.plot*pointList.T,c='r',ls=,marker='o',zorder=10 plt.plot*pointList_插值.T,c='b'
如果它是一个球,那么理论上它应该有一条抛物线路径,你可以尝试拟合一条曲线,忽略-1,-1,然后替换缺少的值

类似于

import numpy as np

pointList = [(60, 40), (55, 42), (53, 43), (-1, -1), (-1, -1), (-1, -1), (35, 55), (30, 60)]

x, y = list(zip(*[(x, y) for (x, y) in pointList if x>0]))

fit = np.polyfit(x, y, 2)
polynome = np.poly1d(fit)

# call your polynome for missing data, e.g.
missing = (55 - i*(55-35)/4 for i in range(3))
print([(m, polynome(m)) for m in missing])
给予

[(55.0, 41.971982486554325), (50.0, 44.426515896714186), (45.0, 47.44514924300471)]

如果它是一个球,那么理论上它应该有一条抛物线路径,你可以尝试拟合一条曲线,忽略-1,-1,然后替换缺少的值

类似于

import numpy as np

pointList = [(60, 40), (55, 42), (53, 43), (-1, -1), (-1, -1), (-1, -1), (35, 55), (30, 60)]

x, y = list(zip(*[(x, y) for (x, y) in pointList if x>0]))

fit = np.polyfit(x, y, 2)
polynome = np.poly1d(fit)

# call your polynome for missing data, e.g.
missing = (55 - i*(55-35)/4 for i in range(3))
print([(m, polynome(m)) for m in missing])
给予

[(55.0, 41.971982486554325), (50.0, 44.426515896714186), (45.0, 47.44514924300471)]

如果相机不移动——只移动球,而忽略风,则轨迹为抛物线。见:

在这种情况下,将二次函数拟合到您知道的点,您将得到缺少的点。还将未知区域点53、43和35、55附近边界点的误差设置为0或接近0无误差,拟合时插值权重较大,因此插值将通过这些点

有一些用于多项式拟合的库。例如numpy.polyfit:

如果相机不移动-只移动球,而忽略风,则轨迹为抛物线。见:

在这种情况下,将二次函数拟合到您知道的点,您将得到缺少的点。还将未知区域点53、43和35、55附近边界点的误差设置为0或接近0无误差,拟合时插值权重较大,因此插值将通过这些点

有一些用于多项式拟合的库。例如numpy.polyfit: