修改文件夹名字

This commit is contained in:
2025-11-05 17:08:18 +08:00
parent d752c7e008
commit 6c00d1d0aa
9 changed files with 1 additions and 1 deletions

View File

@@ -0,0 +1,56 @@
import cv2
import numpy as np
from 新建文件夹.config import KF_PROCESS_NOISE, KF_MEASUREMENT_NOISE
class KalmanFilter:
"""卡尔曼滤波器:平滑并预测装甲板位置"""
def __init__(self):
self.kf = cv2.KalmanFilter(4, 2) # 4状态(x,y,dx,dy)2测量(x,y)
self._init_params()
self.initialized = False
self.last_measurement = None
self.last_prediction = None
def _init_params(self):
"""初始化卡尔曼参数"""
self.kf.transitionMatrix = np.array([
[1, 0, 1, 0],
[0, 1, 0, 1],
[0, 0, 1, 0],
[0, 0, 0, 1]
], np.float32)
self.kf.measurementMatrix = np.array([
[1, 0, 0, 0],
[0, 1, 0, 0]
], np.float32)
self.kf.processNoiseCov = np.eye(4, dtype=np.float32) * KF_PROCESS_NOISE
self.kf.measurementNoiseCov = np.eye(2, dtype=np.float32) * KF_MEASUREMENT_NOISE
self.kf.errorCovPost = np.eye(4, dtype=np.float32)
def update(self, measurement):
"""用测量值更新滤波器"""
measurement = np.array([[np.float32(measurement[0])], [np.float32(measurement[1])]])
if not self.initialized:
self.kf.statePost = np.array([
[measurement[0, 0]],
[measurement[1, 0]],
[0.0],
[0.0]
], np.float32)
self.initialized = True
else:
self.kf.correct(measurement)
self.last_measurement = (measurement[0, 0], measurement[1, 0])
def predict(self):
"""预测下一帧位置"""
if not self.initialized:
return None
prediction = self.kf.predict()
self.last_prediction = (prediction[0, 0], prediction[1, 0])
return self.last_prediction