Python opencv:如何使用卡尔曼滤波器

Posted

技术标签:

【中文标题】Python opencv:如何使用卡尔曼滤波器【英文标题】:Python opencv: How to use Kalman filter 【发布时间】:2017-09-19 15:39:25 【问题描述】:

我正在使用 Python 进行人脸识别。

我有以下代码:

from sklearn.externals import joblib
clf = joblib.load('model/svm.pkl')
pca = joblib.load('model/pca.pkl')
face_cascade = cv2.CascadeClassifier("classifier/haarcascade_frontalface_alt.xml")
webcam = cv2.VideoCapture(0)
ret, frame = webcam.read()
while ret:
    start = time()
    origin = frame
    gray = cv2.cvtColor(origin, cv2.COLOR_BGR2GRAY)
    cv2.equalizeHist(gray,gray)

    faces = face_cascade.detectMultiScale(
        origin,
        scaleFactor=1.1,
        minNeighbors=5,
        minSize=(30, 30),
        flags=cv2.cv.CV_HAAR_SCALE_IMAGE
    )
    for (x, y, w, h) in faces:
        cv2.rectangle(origin, (x, y), (x+w, y+h), (0, 255, 0), 2)
        face = gray[y:y+h , x:x+w]
        cv2.equalizeHist(face,face)

        face_to_predict = cv2.resize(face,(100, 100),interpolation = cv2.INTER_AREA)

        img = face_to_predict.ravel()
        principle_components = pca.transform(img)
        proba = clf.predict_proba(principle_components) # probability
        pred = clf.predict(principle_components)
        if proba[0][pred]>0.4:
            name = face_profile_names[pred[0]]

所以,这段代码运行良好,并且不时能像我预期的那样识别人脸。但是这里也有很多弱点:如果我在扭头,那么准确度对我来说太低了。 我找到了卡尔曼滤波器来提高我的面部识别能力,但我没有意识到如何将它与我现有的代码一起使用。

我发现了一些使用卡尔曼滤波器的帖子,但在当前情况下如何使用它还不够清楚。一些帖子在这里: Is there any example of cv2.KalmanFilter implementation?

OpenCV Kalman Filter python

所以,我的principle_components 是一个值矩阵,希望它可以用于初始化我的卡尔曼滤波器,但我不确定这一点以及之后如何使用这个滤波器..

有什么想法吗?

【问题讨论】:

这条线对我来说似乎很可疑Kalman's filter to improve my face recognition,卡尔曼滤波器可用于平滑数据中的小差异,它无助于提高准确性,它不是图像滤波器,而是需要一些随机点作为输入并尝试用它们制作平滑曲线,google.co.in/…: @ZdaR,正如我所写,我正在从图像中获取数字矩阵,这就是为什么我希望有一些“更好”的值 我在这里找到的最佳答案可以轻松使用卡尔曼滤波器。 ***.com/a/53017661/7060530 【参考方案1】:

关于卡尔曼滤波器的 Opencv Python 文档很糟糕。 可以在此处找到一个很好的实现示例: https://raw.githubusercontent.com/tobybreckon/python-examples-cv/master/kalman_tracking_live.py

让很多人感到困惑的一个方面是卡尔曼滤波器没有初始化函数,这简直是蹩脚。所以过滤器是一个“delta”。我的意思是你总是需要用一个初始值进行标准化。测量值应修正为测量值 = 测量值 - 初始值,预测值 = 预测值 + 初始值。

希望能给你一些帮助。

【讨论】:

以上是关于Python opencv:如何使用卡尔曼滤波器的主要内容,如果未能解决你的问题,请参考以下文章

Opencv Python卡尔曼滤波器预测结果查询

OpenCV卡尔曼滤波器的实际实现与python?

使用 Opencv C++ 中给定对象的 X,Y 进行卡尔曼滤波器跟踪

我对 openCV 卡尔曼滤波器的使用已关闭,但无法正常工作

opencv卡尔曼滤波器多目标跟踪错误

OpenCV 中卡尔曼滤波器的参数