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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

粒子滤波 演示与opencv代码

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

粒子濾波的理論實在是太美妙了,用一組不同權重的隨機狀態來逼近復雜的概率密度函數。其再非線性、非高斯系統中具有優良的特性。opencv給出了一個實現,但是沒有給出范例,學習過程中發現網絡上也找不到。learning opencv一書中有介紹,但距離直接使用還是有些距離。在經過一番坎坷后,終于可以用了,希望對你有幫助。

?

?本文中給出的例子跟 我的另一篇博文是同一個應用例子,都是對二維坐標進行平滑、預測

使用方法:


1.創建并初始化

const int stateNum=4;//狀態數
?const int measureNum=2;//測量變量數
?const int sampleNum=2000;//粒子數

?CvConDensation* condens = cvCreateConDensation(stateNum,measureNum,sampleNum);

在不影響性能的情況下,粒子數量越大,系統表現的越穩定

其他初始化內容請參考learning opencv


2.預測
3.更新例子可信度,也就是權重。本例中更新方法與learning opencv中有所不同,想看代碼?
4.更新CvConDensation

?

代碼:

[cpp]?view plain?copy
  • #include?<cv.h>??
  • #include?<cxcore.h>??
  • #include?<highgui.h>??
  • #include?<cvaux.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.condensation?setup??
  • ????const?int?stateNum=4;??
  • ????const?int?measureNum=2;??
  • ????const?int?sampleNum=2000;??
  • ??
  • ????CvConDensation*?condens?=?cvCreateConDensation(stateNum,measureNum,sampleNum);??
  • ????CvMat*?lowerBound;??
  • ????CvMat*?upperBound;??
  • ????lowerBound?=?cvCreateMat(stateNum,?1,?CV_32F);??
  • ????upperBound?=?cvCreateMat(stateNum,?1,?CV_32F);??
  • ????cvmSet(lowerBound,0,0,0.0?);???
  • ????cvmSet(upperBound,0,0,winWidth?);??
  • ????cvmSet(lowerBound,1,0,0.0?);???
  • ????cvmSet(upperBound,1,0,winHeight?);??
  • ????cvmSet(lowerBound,2,0,0.0?);???
  • ????cvmSet(upperBound,2,0,0.0?);??
  • ????cvmSet(lowerBound,3,0,0.0?);???
  • ????cvmSet(upperBound,3,0,0.0?);??
  • ????float?A[stateNum][stateNum]?={??
  • ????????1,0,1,0,??
  • ????????0,1,0,1,??
  • ????????0,0,1,0,??
  • ????????0,0,0,1??
  • ????};??
  • ????memcpy(condens->DynamMatr,A,sizeof(A));??
  • ????cvConDensInitSampleSet(condens,?lowerBound,?upperBound);??
  • ??
  • ????CvRNG?rng_state?=?cvRNG(0xffffffff);??
  • ????for(int?i=0;?i?<?sampleNum;?i++){??
  • ????????condens->flSamples[i][0]?=?float(cvRandInt(?&rng_state?)?%?winWidth);?//width??
  • ????????condens->flSamples[i][1]?=?float(cvRandInt(?&rng_state?)?%?winHeight);//height??
  • ????}??
  • ??
  • ????CvFont?font;??
  • ????cvInitFont(&font,CV_FONT_HERSHEY_SCRIPT_COMPLEX,1,1);??
  • ??
  • ????char*?winName="condensation";??
  • ????cvNamedWindow(winName);??
  • ????cvSetMouseCallback(winName,mouseEvent);??
  • ????IplImage*?img=cvCreateImage(cvSize(winWidth,winHeight),8,3);??
  • ????bool?isPredictOnly=false;//trigger?for?prediction?only,press?SPACEBAR??
  • ????while?(1){??
  • ????????//2.condensation?prediction??
  • ????????CvPoint?predict_pt=cvPoint((int)condens->State[0],(int)condens->State[1]);??
  • ??
  • ????????float?variance[measureNum]={0};???????
  • ????????//get?variance/standard?deviation?of?each?state??
  • ????????for?(int?i=0;i<measureNum;i++)?{??
  • ????????????//sum??
  • ????????????float?sumState=0;??
  • ????????????for?(int?j=0;j<condens->SamplesNum;j++)?{??
  • ????????????????sumState+=condens->flSamples[i][j];??
  • ????????????}??
  • ????????????//average??
  • ????????????sumState/=sampleNum;??
  • ????????????//variance??
  • ????????????for?(int?j=0;j<condens->SamplesNum;j++)?{??
  • ????????????????variance[i]+=(condens->flSamples[i][j]-sumState)*??
  • ????????????????????(condens->flSamples[i][j]-sumState);??
  • ????????????}??
  • ????????????variance[i]/=sampleNum-1;??
  • ????????}??
  • ????????//3.update?particals?confidence??
  • ????????CvPoint?pt;??
  • ????????if?(isPredictOnly)?{??
  • ????????????pt=predict_pt;??
  • ????????}else{??
  • ????????????pt=mousePosition;??
  • ????????}??
  • ????????for?(int?i=0;i<condens->SamplesNum;i++)?{??
  • ????????????float?probX=(float)exp(-1*(pt.x-condens->flSamples[i][0])??
  • ????????????????*(pt.x-condens->flSamples[i][0])/(2*variance[0]));??
  • ????????????float?probY=(float)exp(-1*(pt.y-condens->flSamples[i][1])??
  • ????????????????*(pt.y-condens->flSamples[i][1])/(2*variance[1]));??
  • ????????????condens->flConfidence[i]=probX*probY;??
  • ????????}??
  • ????????//4.update?condensation??
  • ????????cvConDensUpdateByTime(condens);??
  • ??????????
  • ????????//draw???
  • ????????cvSet(img,cvScalar(255,255,255,0));??
  • ????????cvCircle(img,predict_pt,5,CV_RGB(0,255,0),3);//predicted?point?with?green??
  • ????????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));??
  • ????????if?(!isPredictOnly)?{??
  • ????????????cvCircle(img,mousePosition,5,CV_RGB(255,0,0),3);//current?position?with?red??
  • ????????????sprintf_s(buf,256,"real?position?:(%3d,%3d)",mousePosition.x,mousePosition.y);??
  • ????????????cvPutText(img,buf,cvPoint(10,60),&font,CV_RGB(0,0,0));??
  • ????????}??
  • ??????????
  • ????????cvShowImage(winName,?img);??
  • ????????int?key=cvWaitKey(30);??
  • ????????if?(key==27){//esc?????
  • ????????????break;??
  • ????????}else?if?(key=='?')?{//trigger?for?prediction??
  • ????????????//isPredict=!isPredict;??
  • ????????????if?(isPredictOnly)?{??
  • ????????????????isPredictOnly=false;??
  • ????????????}else{??
  • ????????????????isPredictOnly=true;??
  • ????????????}??
  • ????????}??
  • ????}????????
  • ??
  • ????cvReleaseImage(&img);??
  • ????cvReleaseConDensation(&condens);??
  • ????return?0;??
  • }??
  • ?

    kalman filter 視頻演示:

    演示中粒子數分別為100,200,2000

    請仔細觀測效果

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

    demo snapshot:

    總結

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

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

    主站蜘蛛池模板: www.欧美色图 | 日韩黄色一区二区 | 欧美一区二区在线观看视频 | 免费性情网站 | 伊人色影院| 久久久久九九九九 | 日韩高清在线观看 | 臭脚猛1s民工调教奴粗口视频 | 五月婷婷色丁香 | 免费成人结看片 | 国产男女无遮挡猛进猛出 | av成人在线看 | 91理论片午午伦夜理片久久 | 亚洲第一视频在线 | 一区二区三区欧美视频 | 青青草成人免费在线视频 | 男插女动态图 | 毛片免费在线观看视频 | 午夜久久久久久 | 国产伦视频| 四季av日韩精品一区 | 自拍在线视频 | 蜜桃精品视频在线观看 | 希岛婚前侵犯中文字幕在线 | 亚洲天堂视频在线播放 | 午夜精品偷拍 | 男人天堂网在线视频 | 日韩天堂视频 | 欧美一区二区三区四区在线观看 | 国产亚洲精品久久久久久久久动漫 | 成人久久久 | 全黄一级播放 | 拍摄av现场失控高潮数次 | 国产一级片麻豆 | 黄页在线观看 | 欧美黄色一级网站 | 日日人人 | 日本艳妇 | 国产一区二区观看 | 中国免费毛片 | 伊人色播 | 日韩亚洲精品中文字幕 | 欧美日韩在线视频观看 | 男人的天堂狠狠干 | 男女xx网站| 黑帮大佬和我的365日第二部 | 国产偷v国产偷v亚洲高清 | 天天躁夜夜躁 | 天堂成人av | 国产乱淫片视频 | 成人精品免费网站 | 久插网 | 青青草污视频 | 人妻熟女一区二区三区 | 国产精品久久久久久久久久久新郎 | 成人福利av | 西西444www大胆无视频 | 久久久久一区 | 一起操在线观看 | 综合激情在线 | 丝袜 中出 制服 人妻 美腿 | 无码aⅴ精品一区二区三区 精品久久在线 | 一区二区三区美女 | 欧美波霸影院 | 欧美精选一区二区 | 亚洲国产精品久久久久爰性色 | 男人天堂2024 | 免费操人视频 | 九九在线观看高清免费 | 国产精品视频一二三区 | 一区二区三区四区免费 | 亚洲av乱码久久精品蜜桃 | 美女大bxxxxn内射 | 国产性生活| 欧美另类自拍 | 久久一区精品 | 成人自拍视频网站 | 一级aaaa毛片 | 在线观看国产精品一区 | 777四色| 亚洲第一精品网站 | 国内视频一区二区三区 | 高清一区二区三区四区五区 | 亚洲一级电影 | 国产人妖一区二区三区 | 一级黄色短视频 | 成人手机在线视频 | 91漂亮少妇露脸在线播放 | 国产精品网站在线 | 久久艹免费视频 | 欧美熟妇精品一区二区蜜桃视频 | 天天干夜夜夜夜 | 丝袜美腿亚洲综合 | 亚洲精品一区二区18漫画 | 超碰按摩| 国产男女自拍 | 波多野结衣激情视频 | 老司机精品在线 | 国产精品成人一区二区 |