日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

kalman 滤波 演示与opencv代码

發布時間:2025/7/25 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kalman 滤波 演示与opencv代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在機器視覺中追蹤時常會用到預測算法,kalman是你一定知道的。它可以用來預測各種狀態,比如說位置,速度等。關于它的理論有很多很好的文獻可以參考。opencv給出了kalman filter的一個實現,而且有范例,但估計不少人對它的使用并不清楚,因為我也是其中一個。本文的應用是對二維坐標進行預測和平滑

?

使用方法:

1、初始化

const int stateNum=4;//狀態數,包括(x,y,dx,dy)坐標及速度(每次移動的距離)
const int measureNum=2;//觀測量,能看到的是坐標值,當然也可以自己計算速度,但沒必要
Kalman* kalman = cvCreateKalman( stateNum, measureNum, 0 );//state(x,y,detaX,detaY)


轉移矩陣或者說增益矩陣的值好像有點莫名其妙

[cpp]?view plain?copy
  • float?A[stateNum][stateNum]?={//transition?matrix??
  • ????????1,0,1,0,??
  • ????????0,1,0,1,??
  • ????????0,0,1,0,??
  • ????????0,0,0,1??
  • ????};??
  • 看下圖就清楚了

    X1=X+dx,依次類推
    所以這個矩陣還是很容易卻確定的,可以根據自己的實際情況定制轉移矩陣

    同樣的方法,三維坐標的轉移矩陣可以如下

    [cpp]?view plain?copy
  • float?A[stateNum][stateNum]?={//transition?matrix??
  • ????????1,0,0,1,0,0,??
  • ????????0,1,0,0,1,0,??
  • ????????0,0,1,0,0,1,??
  • ????????0,0,0,1,0,0,??
  • ????????0,0,0,0,1,0,??
  • ????????0,0,0,0,0,1??
  • ????};??
  • 當然并不一定得是1和0


    2.預測cvKalmanPredict,然后讀出自己需要的值
    3.更新觀測矩陣?
    4.更新CvKalman

    ?只有第一步麻煩些。上述這幾步跟代碼中的序號對應

    ?如果你在做tracking,下面的例子或許更有用些。

    ?

    [cpp]?view plain?copy
  • #include?<cv.h>??
  • #include?<cxcore.h>??
  • #include?<highgui.h>??
  • ??
  • #include?<cmath>??
  • #include?<vector>??
  • #include?<iostream>??
  • using?namespace?std;??
  • ??
  • const?int?winHeight=600;??
  • const?int?winWidth=800;??
  • ??
  • ??
  • CvPoint?mousePosition=cvPoint(winWidth>>1,winHeight>>1);??
  • ??
  • //mouse?event?callback??
  • void?mouseEvent(int?event,?int?x,?int?y,?int?flags,?void?*param?)??
  • {??
  • ????if?(event==CV_EVENT_MOUSEMOVE)?{??
  • ????????mousePosition=cvPoint(x,y);??
  • ????}??
  • }??
  • ??
  • int?main?(void)??
  • {??
  • ????//1.kalman?filter?setup??
  • ????const?int?stateNum=4;??
  • ????const?int?measureNum=2;??
  • ????CvKalman*?kalman?=?cvCreateKalman(?stateNum,?measureNum,?0?);//state(x,y,detaX,detaY)??
  • ????CvMat*?process_noise?=?cvCreateMat(?stateNum,?1,?CV_32FC1?);??
  • ????CvMat*?measurement?=?cvCreateMat(?measureNum,?1,?CV_32FC1?);//measurement(x,y)??
  • ????CvRNG?rng?=?cvRNG(-1);??
  • ????float?A[stateNum][stateNum]?={//transition?matrix??
  • ????????1,0,1,0,??
  • ????????0,1,0,1,??
  • ????????0,0,1,0,??
  • ????????0,0,0,1??
  • ????};??
  • ??
  • ????memcpy(?kalman->transition_matrix->data.fl,A,sizeof(A));??
  • ????cvSetIdentity(kalman->measurement_matrix,cvRealScalar(1)?);??
  • ????cvSetIdentity(kalman->process_noise_cov,cvRealScalar(1e-5));??
  • ????cvSetIdentity(kalman->measurement_noise_cov,cvRealScalar(1e-1));??
  • ????cvSetIdentity(kalman->error_cov_post,cvRealScalar(1));??
  • ????//initialize?post?state?of?kalman?filter?at?random??
  • ????cvRandArr(&rng,kalman->state_post,CV_RAND_UNI,cvRealScalar(0),cvRealScalar(winHeight>winWidth?winWidth:winHeight));??
  • ??
  • ????CvFont?font;??
  • ????cvInitFont(&font,CV_FONT_HERSHEY_SCRIPT_COMPLEX,1,1);??
  • ??
  • ????cvNamedWindow("kalman");??
  • ????cvSetMouseCallback("kalman",mouseEvent);??
  • ????IplImage*?img=cvCreateImage(cvSize(winWidth,winHeight),8,3);??
  • ????while?(1){??
  • ????????//2.kalman?prediction??
  • ????????const?CvMat*?prediction=cvKalmanPredict(kalman,0);??
  • ????????CvPoint?predict_pt=cvPoint((int)prediction->data.fl[0],(int)prediction->data.fl[1]);??
  • ??
  • ????????//3.update?measurement??
  • ????????measurement->data.fl[0]=(float)mousePosition.x;??
  • ????????measurement->data.fl[1]=(float)mousePosition.y;??
  • ??
  • ????????//4.update??
  • ????????cvKalmanCorrect(?kalman,?measurement?);???????
  • ??
  • ????????//draw???
  • ????????cvSet(img,cvScalar(255,255,255,0));??
  • ????????cvCircle(img,predict_pt,5,CV_RGB(0,255,0),3);//predicted?point?with?green??
  • ????????cvCircle(img,mousePosition,5,CV_RGB(255,0,0),3);//current?position?with?red??
  • ????????char?buf[256];??
  • ????????sprintf_s(buf,256,"predicted?position:(%3d,%3d)",predict_pt.x,predict_pt.y);??
  • ????????cvPutText(img,buf,cvPoint(10,30),&font,CV_RGB(0,0,0));??
  • ????????sprintf_s(buf,256,"current?position?:(%3d,%3d)",mousePosition.x,mousePosition.y);??
  • ????????cvPutText(img,buf,cvPoint(10,60),&font,CV_RGB(0,0,0));??
  • ??????????
  • ????????cvShowImage("kalman",?img);??
  • ????????int?key=cvWaitKey(3);??
  • ????????if?(key==27){//esc?????
  • ????????????break;?????
  • ????????}??
  • ????}????????
  • ??
  • ????cvReleaseImage(&img);??
  • ????cvReleaseKalman(&kalman);??
  • ????return?0;??
  • }??
  • ?

    kalman filter 視頻演示:

    http://v.youku.com/v_show/id_XMjU4MzEyODky.html

    ?

    demo snapshot:

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的kalman 滤波 演示与opencv代码的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲av永久无码精品一区二区国产 | 欧美激情综合五月色丁香 | 精品久久福利 | 国产日日操 | 久久精品国产电影 | 亚洲久久久 | 99视频在线精品免费观看2 | www.四虎.com | av在线一 | 草草视频在线播放 | 国产成人亚洲精品 | 日本人毛片 | 亚洲欧洲综合在线 | 成人黄色短片 | 国产美女操 | 天堂素人约啪 | 日韩一区二区免费视频 | 尤物视频最新网址 | 久久99日| 亲切的金子餐桌片段的金子 | 96在线视频 | 成人亚洲综合 | 理论片91| 亚洲www视频| 色网站免费看 | 在线观看亚洲av每日更新 | 久久99精品久久久久 | 日韩精品伦理 | 国产在线欧美日韩 | 成人在线免费看片 | 茄子av在线 | av免费网页 | 日本aⅴ在线观看 | 少妇饥渴放荡91麻豆 | xxxwww18| 成人特级片 | 国产一区激情 | 欧美在线视频你懂的 | 亚洲欧美一区二区三区在线 | 99久久国产宗和精品1上映 | 高清在线一区 | h片观看 | 精精国产xxxx视频在线 | 亚洲国产日韩欧美一区二区三区 | 丝袜脚交免费网站xx | av基地网| 夜夜天天操 | 丁香花高清视频完整电影 | 好紧好爽再浪一点视频 | 国产资源视频 | 欧美又大粗又爽又黄大片视频 | 免费的黄色片 | 中文视频在线观看 | 中文av免费 | 91精品国产综合久 | 午夜影院试看 | 欧美区二区三区 | 可以免费看av的网址 | 色综合久久五月 | 国产亚洲精品久久久久婷婷瑜伽 | 看全黄大色黄大片美女人 | 久久久久久久久久免费视频 | 亚洲一区二区三区午夜 | 中文字幕观看 | 国产精品香蕉国产 | 久久无码视频网站 | 一区二区少妇 | 午夜整容室 | 一二三av | 久热精品在线观看视频 | 国产美女免费观看 | 日韩精品乱码 | 老司机午夜视频 | 妖精视频一区二区三区 | 国产人妻黑人一区二区三区 | 97超碰人人模人人人爽人人爱 | 国产亚洲av在线 | 荫道bbwbbb高潮潮喷 | 日本一级淫片1000部 | 亚洲免费观看高清完整 | 日本三级影院 | 久操视频在线 | 国产免费一区二区三区在线播放 | 美味的客房沙龙服务 | 国产chinesehd精品露脸 | 少妇逼逼| 国产麻豆一精品一男同 | 欧美日韩精品综合 | 最新超碰在线 | 黄色污在线观看 | 久久yy| 国产精品国语自产拍在线观看 | 久久经典 | 羞羞涩涩视频 | 一级全黄裸体免费视频 | 色综合激情网 | 日韩无码专区 | 午夜天堂精品久久久久 | 国产精品高潮av |