[英]Kalman filter for multiple object : identification problems
我想使用我附加的卡尔曼滤波器实现来跟踪视频中流动的对象。 在视频中,物体在运动,一些物体从视频边界出来,一些物体进入视频边界。 该算法不是跟踪新元素,而是将轨迹从旧对象移动到新对象。 我怎么解决这个问题?
如果我不够清楚,这里有一个示例图像可以更好地解释
class KalmanFilter(object):
def __init__(self):
self.dt = 0.005 # delta time
self.A = np.array([[1, 0], [0, 1]]) # matrix in observation equations
self.u = np.zeros((2, 1)) # previous state vector
# (x,y) tracking object center
self.b = np.array([[0], [255]]) # vector of observations
self.P = np.diag((3.0, 3.0)) # covariance matrix
self.F = np.array([[1.0, self.dt], [0.0, 1.0]]) # state transition mat
self.Q = np.eye(self.u.shape[0]) # process noise matrix
self.R = np.eye(self.b.shape[0]) # observation noise matrix
self.lastResult = np.array([[0], [255]])
def predict(self):
# Predicted state estimate
self.u = np.round(np.dot(self.F, self.u))
# Predicted estimate covariance
self.P = np.dot(self.F, np.dot(self.P, self.F.T)) + self.Q
self.lastResult = self.u # same last predicted result
return self.u
def correct(self, b, flag):
if not flag: # update using prediction
self.b = self.lastResult
else: # update using detection
self.b = b
C = np.dot(self.A, np.dot(self.P, self.A.T)) + self.R
K = np.dot(self.P, np.dot(self.A.T, np.linalg.inv(C)))
self.u = np.round(self.u + np.dot(K, (self.b - np.dot(self.A,
self.u))))
self.P = self.P - np.dot(K, np.dot(C, K.T))
self.lastResult = self.u
return self.u
如果您未绑定卡尔曼滤波器,则此问题还有另一种解决方案。 通常使用图像序列中特征的光流来解决此类问题。
可以在此处找到 OpenCV 中的示例。
这个想法是在你的图像中找到要跟踪的重要特征(圆、角等)。 这可以使用方便的 function 来完成,您可能不知道该使用什么:
p0 = cv2.goodFeaturesToTrack(old_gray, mask = None, **feature_params)
然后将特征传递给光流 function,连同两个连续的图像,它会发挥一些作用:
p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, p0, None, **lk_params)
在您的情况下,您提到您想使用 ID。 我不知道您的数据是什么样子,但我建议您在图像上使用goodFeaturesToTrack
function 并查看返回的内容。 然后,您会了解可以用来跟踪的内容。
之后,您可以使用特定的 function 来提取您喜欢的特征。 假设您找到一个 function 从图像中提取奇异果特征,可能是椭圆。 每个猕猴桃说一个椭圆。 然后您将该列表放入跟踪 function 中,它会告诉您他们在下一张图像中去了哪里。 该列表具有可用作 ID 的固定顺序。
可以在cv2.calcOpticalFlowPyrLK()找到 function 的 OpenCV 文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.