1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        我竟然用OpenCV實(shí)現(xiàn)了卡爾曼濾波

        共 7672字,需瀏覽 16分鐘

         ·

        2021-09-19 07:02

        點(diǎn)擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

        重磅干貨,第一時間送達(dá)

        本文轉(zhuǎn)載自:OpenCV學(xué)堂(CVSCHOOL)

        卡爾曼濾波原理


        卡爾曼濾波最早可以追溯到Wiener濾波,不同的是卡爾曼采用狀態(tài)空間來描述它的濾波器,卡爾曼濾波器同時具有模糊/平滑與預(yù)測功能,特別是后者在視頻分析與對象跟蹤應(yīng)用場景中被發(fā)揚(yáng)光大,在離散空間(圖像或者視頻幀)使用卡爾曼濾波器相對簡單。假設(shè)我們根據(jù)一個處理想知道一個變量值如下:

        最終卡爾曼濾波完整的評估與空間預(yù)測模型工作流程如下:

        OpenCV API


        cv::KalmanFilter::KalmanFilter(
            int dynamParams, 
            int measureParams,
            int controlParams = 0,
            int type = CV_32F 
        )
        # dynamParams表示state的維度
        # measureParams表示測量維度
        # controlParams表示控制向量
        # type表示創(chuàng)建的matrices


        代碼演示


        import cv2
        from math import cossinsqrt
        import numpy as np

        if __name__ == "__main__":

            img_height = 500
            img_width = 500
            kalman = cv2.KalmanFilter(210)

            cv2.namedWindow("Kalman", cv2.WINDOW_AUTOSIZE)

            while True:
                state = 0.1 * np.random.randn(21)

                # 初始化
                kalman.transitionMatrix = np.array([[1., 1.], [0., 1.]])
                kalman.measurementMatrix = 1. * np.ones((12))
                kalman.processNoiseCov = 1e-5 * np.eye(2)
                kalman.measurementNoiseCov = 1e-1 * np.ones((11))
                kalman.errorCovPost = 1. * np.ones((22))
                kalman.statePost = 0.1 * np.random.randn(21)

                while True:
                    def calc_point(angle):
                        return (np.around(img_width/2 + img_width/3*cos(angle), 0).astype(int),
                                np.around(img_height/2 - img_width/3*sin(angle), 1).astype(int))

                    state_angle = state[00]
                    state_pt = calc_point(state_angle)
                    # 預(yù)測
                    prediction = kalman.predict()
                    predict_angle = prediction[00]
                    predict_pt = calc_point(predict_angle)

                    measurement = kalman.measurementNoiseCov * np.random.randn(11)

                    # 生成測量
                    measurement = np.dot(kalman.measurementMatrix, state) + measurement
                    measurement_angle = measurement[00]
                    measurement_pt = calc_point(measurement_angle)

                    # plot points
                    def draw_cross(center, color, d):
                        cv2.line(img,
                                 (center[0] - d, center[1] - d), (center[0] + d, center[1] + d),
                                 color, 1, cv2.LINE_AA, 0)
                        cv2.line(img,
                                 (center[0] + d, center[1] - d), (center[0] - d, center[1] + d),
                                 color, 1, cv2.LINE_AA, 0)

                    img = np.zeros((img_height, img_width, 3), np.uint8)

                    cv2.line(img, state_pt, measurement_pt, (00255), 3, cv2.LINE_AA, 0)
                    cv2.line(img, state_pt, predict_pt, (25500), 3, cv2.LINE_AA, 0)

                    # 校正預(yù)測與測量值差異
                    kalman.correct(measurement)

                    # 更新noise矩陣與狀態(tài)
                    process_noise = sqrt(kalman.processNoiseCov[0,0]) * np.random.randn(21)
                    state = np.dot(kalman.transitionMatrix, state) + process_noise

                    cv2.imshow("Kalman", img)

                    code = cv2.waitKey(100)
                    if code != -1:
                        break

                if code in [27ord('q'), ord('Q')]:
                    break

            cv2.destroyWindow("Kalman")


        好消息,小白學(xué)視覺團(tuán)隊(duì)的知識星球開通啦,為了感謝大家的支持與厚愛,團(tuán)隊(duì)決定將價值149元的知識星球現(xiàn)時免費(fèi)加入。各位小伙伴們要抓住機(jī)會哦!


        下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
        在「小白學(xué)視覺」公眾號后臺回復(fù):擴(kuò)展模塊中文教程即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

        下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講
        小白學(xué)視覺公眾號后臺回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計算機(jī)視覺。

        下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
        小白學(xué)視覺公眾號后臺回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個基于OpenCV實(shí)現(xiàn)20個實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

        交流群


        歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~



        瀏覽 63
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            麻豆成人久久 | 黄羞羞视频 | 日韩免费精品一区二区三区色欲AV | 小受被用各种姿势进入np唐棠 | 爱啪啪导航| 骚虎com最新地址导航 | 91视频蝌蚪 | 午夜小福利| 五月丁香婷婷基地 | 无码精品毛片免费视频 |