OpenCV C++卡尔曼滤波迭代1200次后出现异常预测求助
卡尔曼滤波常加速度模型后期输出极端值问题
我使用OpenCV C++实现了基于x、y方向常加速度模型的卡尔曼滤波,滤波器在前1200帧左右表现良好,但之后开始输出极端预测结果。
以下图表展示了Frame 1050之后x、y坐标的预测值与测量值对比,异常点清晰可见:


每帧运行的核心代码如下:
TrackingResult KalmanFilter::Process(TrackingInput& input) { cv::Mat prediction = _kalmanFilter.predict(); Point2 predictPt(prediction.at<float>(0), prediction.at<float>(1)); cv::Mat_<float> measurement(2, 1, CV_32F); if (input.DetectionResult.FoundBall) { measurement(0) = input.DetectionResult.BallPosition.x; measurement(1) = input.DetectionResult.BallPosition.y; cv::Mat estimated = _kalmanFilter.correct(measurement); _ballPosition = Point2(estimated.at<float>(0), estimated.at<float>(1)); return TrackingResult(_ballPosition, predictPt, input); } else { return TrackingResult(predictPt, predictPt, input); } }
相关补充信息:
- 代码参考OpenCV官方卡尔曼滤波示例,已按照常加速度模型的要求正确初始化转移矩阵。
- 测试输入常量测量值时,滤波器始终保持稳定;使用相机输入的视频本身无异常。
- 因复现问题需要完整的1200帧位置数据,无法提供最小复现示例,可通过上述图表观察输入数据的异常表现。
恳请各位提供排查思路或解决方案。
内容的提问来源于stack exchange,提问作者Shrey Dixit
相关产品推荐
相关产品推荐

