当前位置:   article > 正文

关键点平滑算法笔记

关键点平滑算法笔记

目录

Peppa_Pig_Face_Landmark

这个也有:

splev平滑

关键点卡尔曼滤波和低通滤波

alpahpose 是跟踪box的


Peppa_Pig_Face_Landmark

这个算法有关键点跟踪,关键点比较稳,模型60M

self.trace = GroupTrack(cfg['Skps']['Trace'])

这个也有:

https://github.com/ostadabbas/3d-facial-landmark-detection-and-tracking/blob/a1f3453d0e454f5f08a6e90ff354cb69b4be0152/landmark_detection_video.py

splev平滑

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from scipy.interpolate import splrep, splev
  4. def nihe():
  5. # 创建一组数据点以模拟原始数据
  6. x = np.linspace(0, 20, 100)
  7. y = np.sin(x) + np.random.normal(scale=0.1, size=x.shape)
  8. # 使用 splrep 计算这些数据点的 B-样条曲线的系数
  9. spl = splrep(x, y)
  10. # 在一个更密集的点集上评估 B-样条曲线
  11. x_dense = np.linspace(0, 20, 200)
  12. y_spline = splev(x_dense, spl)
  13. # 绘制原始数据点
  14. plt.scatter(x, y, label='Original Data', color='red')
  15. # 绘制 B-样条曲线
  16. plt.plot(x_dense, y_spline, label='B-Spline Curve', color='blue')
  17. plt.legend()
  18. plt.title('B-Spline Interpolation')
  19. plt.xlabel('X')
  20. plt.ylabel('Y')
  21. plt.show()
  22. def smooth():
  23. import numpy as np
  24. from scipy.interpolate import splrep, splev
  25. import matplotlib.pyplot as plt
  26. # 创建一组带有噪声的数据点
  27. x = np.linspace(0, 10, 100)
  28. y = np.sin(x) + np.random.normal(scale=0.1, size=x.shape)
  29. # 计算 B-样条曲线的系数,调整平滑参数 s 控制平滑程度
  30. spl = splrep(x, y, s=1) # 增加 s 值以增加平滑程度
  31. # 在原始数据点上评估 B-样条曲线,实现平滑
  32. y_smooth = splev(x, spl)
  33. # 绘制原始数据和平滑后的曲线
  34. plt.scatter(x, y, label='Original Data', color='red', s=10)
  35. plt.plot(x, y_smooth, label='Smoothed Curve', color='blue')
  36. plt.legend()
  37. plt.title('Data Smoothing with B-Spline')
  38. plt.show()

关键点卡尔曼滤波和低通滤波

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. # rShldrBend 0, rForearmBend 1, rHand 2, rThumb2 3, rMid1 4,
  4. # lShldrBend 5, lForearmBend 6, lHand 7, lThumb2 8, lMid1 9,
  5. # lEar 10, lEye 11, rEar 12, rEye 13, Nose 14,
  6. # rThighBend 15, rShin 16, rFoot 17, rToe 18,
  7. # lThighBend 19, lShin 20, lFoot 21, lToe 22,
  8. # abdomenUpper 23, hip 24, head 25, neck 26, spine 27
  9. parent =[26,0,1,2,2, 26,5,6,7,7, 11,14,13,14,25, 24,15,16,17, 24,19,20,21, 24,-1,26,27,23]
  10. jointnum = 28
  11. dataOri = np.reshape(np.loadtxt("./unity_data/record.txt"),(-1,jointnum,3))
  12. framenum = dataOri.shape[0]
  13. datakalman = np.zeros_like(dataOri)
  14. datafinal = np.zeros_like(dataOri)
  15. # kalman filter parameters
  16. KalmanParamQ = 0.001
  17. KalmanParamR = 0.0015
  18. K = np.zeros((jointnum,3),dtype=np.float32)
  19. P = np.zeros((jointnum,3),dtype=np.float32)
  20. X = np.zeros((jointnum,3),dtype=np.float32)
  21. # low pass filter parameters
  22. PrevPose3D = np.zeros((6,jointnum,3),dtype=np.float32)
  23. for idx in range(framenum):
  24. currdata = np.squeeze(dataOri[idx])
  25. smooth_kps = np.zeros((jointnum,3),dtype=np.float32)
  26. '''
  27. kalman filter
  28. '''
  29. for i in range(jointnum):
  30. K[i] = (P[i] + KalmanParamQ) / (P[i] + KalmanParamQ + KalmanParamR)
  31. P[i] = KalmanParamR * (P[i] + KalmanParamQ) / (P[i] + KalmanParamQ + KalmanParamR)
  32. for i in range(jointnum):
  33. smooth_kps[i] = X[i] + (currdata[i] - X[i])*K[i]
  34. X[i] = smooth_kps[i]
  35. datakalman[idx] = smooth_kps # record kalman result
  36. '''
  37. low pass filter
  38. '''
  39. LowPassParam = 0.1
  40. PrevPose3D[0] = smooth_kps
  41. for j in range(1,6):
  42. PrevPose3D[j] = PrevPose3D[j] * LowPassParam + PrevPose3D[j - 1] * (1.0 - LowPassParam)
  43. datafinal[idx] = PrevPose3D[5] # record kalman+low pass result.
  44. '''
  45. visualization
  46. '''
  47. # visualize original/pythonsmooth/unitysmooth z coordinates for the joint 17
  48. dataSmooth = np.reshape(np.loadtxt("./unity_data/recordSmooth.txt"),(-1,28,3))
  49. x1 = np.arange(0,framenum,1)
  50. y1 = np.squeeze(dataOri[:,17,1])
  51. x2 = np.arange(0,dataSmooth.shape[0],1)
  52. y2 = np.squeeze(dataSmooth[:,17,1])
  53. plt.plot(x1,y1)
  54. plt.plot(x2,y2,linewidth = 1)
  55. plt.plot(x1,datakalman[:,17,1],linewidth=2,linestyle=":")
  56. plt.plot(x1,datafinal[:,17,1],linewidth=1,linestyle="-.")
  57. plt.legend(["original","unitySmooth","kalman","kalman+lowpass"])
  58. plt.show()
  59. # visualize the skeleton animation
  60. fig = plt.figure()
  61. plt.ion()
  62. data = datafinal#dataOri
  63. for i in range(framenum):
  64. fig.clf()
  65. kps = np.squeeze(data[i,...])
  66. ax = fig.gca(projection='3d')
  67. ax.xaxis.set_label_text(label="x")
  68. ax.yaxis.set_label_text(label="y")
  69. ax.zaxis.set_label_text(label="z")
  70. ax.set_xlim(np.min(data[...,0]),np.max(data[...,0]))
  71. ax.set_ylim(np.min(data[...,2]),np.max(data[...,2]))
  72. ax.set_zlim(np.min(data[...,1]),np.max(data[...,1]))
  73. ax.view_init(elev=26., azim=70)
  74. ax.scatter3D(kps[:,0],-kps[:,2],kps[:,1],'red')
  75. for i in range(28):
  76. if(parent[i]!=-1):
  77. ax.plot3D(kps[[i,parent[i]],0], -kps[[i,parent[i]],2], kps[[i,parent[i]],1], 'gray')
  78. plt.pause(0.02)
  79. plt.ioff()
  80. plt.show()

alpahpose 是跟踪box的

https://github.com/MVIG-SJTU/AlphaPose/blob/c60106d19afb443e964df6f06ed1842962f5f1f7/trackers/tracker_api.py

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/59515
推荐阅读
相关标签
  

闽ICP备14008679号