Python 估计点列表中缺少的点
我通过在视频中检测球的飞行来生成一个x,y坐标的列表。我的问题是在视频的中间几帧不能检测到球,对于这些帧,列表追加- 1,- 1。 有没有办法估计这些点的球的真实x,y坐标 例如,跟踪点列表为: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
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: