稀疏光流跟蹤(KLT)詳解
在視頻移動對象跟蹤中,稀疏光流跟蹤是一種經(jīng)典的對象跟蹤算法,可以繪制運動對象的跟蹤軌跡與運行方向,是一種簡單、實時高效的跟蹤算法,這個算法最早是有Bruce D. Lucas and Takeo Kanade兩位作者提出來的,所以又被稱為KLT。KLT算法工作有三個假設(shè)前提條件:
亮度恒定
短距離移動
空間一致性
亮度恒定
對象中任意像素點p(x,y)亮度值,在t-1時候的值,在t時刻移動(u, v)之后亮度值保持不變

空間一致性
假設(shè)對像素點p(x, y)來說,周圍的像素點都保持相同的移動距離(u, v) 假設(shè)窗口大小為5x5,則對于25個窗口內(nèi)的像素點來說,就會如下等式成立:

得到下面的過約束等式,根據(jù)最小二乘可以求解(u, v):

這樣我們就得到了KLT光流等式與該窗口的的Hessian矩陣


空間尺度不變性
通過建立每一幀的圖像金字塔,實現(xiàn)尺度空間窗口目標對象搜索

OpenCV中KLT演示代碼實現(xiàn)
OpenCV中KLT算法API及其參數(shù)解釋如下:
voidcv::calcOpticalFlowPyrLK( InputArrayprevImg,//前一幀圖像 InputArraynextImg,//后一幀圖像 InputArrayprevPts,//前一幀的稀疏光流點 InputOutputArraynextPts,//后一幀光流點 OutputArraystatus,//輸出狀態(tài),1表示正常該點保留,否則丟棄 OutputArrayerr,//表示錯誤 SizewinSize=Size(21,21),//光流法對象窗口大小 intmaxLevel=3,//金字塔層數(shù),0表示只檢測當前圖像,不構(gòu)建金字塔圖像 TermCriteriacriteria=TermCriteria(TermCriteria::EPS,30,0.01),//窗口搜索時候停止條件 intflags=0,//操作標志 doubleminEigThreshold=1e-4//最小特征值響應,低于最小值不做處理 )
特征點檢測與繪制的代碼實現(xiàn)如下:
//detectfirstframeandfindcornersinit Matold_frame,old_gray; capture.read(old_frame); cvtColor(old_frame,old_gray,COLOR_BGR2GRAY); goodFeaturesToTrack(old_gray,featurePoints,maxCorners,qualityLevel,minDistance,Mat(),blockSize,useHarrisDetector,k);
特征點繪制
voiddraw_goodFeatures(Mat&image,vectorgoodFeatures){ for(size_tt=0;t
KLT跟蹤代碼如下
TermCriteriacriteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS,30,0.01); doublederivlambda=0.5; intflags=0; boolret=capture.read(frame); if(!ret)break; imshow("frame",frame); roi.x=0; frame.copyTo(result(roi)); cvtColor(frame,gray,COLOR_BGR2GRAY); //calculateopticalflow calcOpticalFlowPyrLK(old_gray,gray,pts[0],pts[1],status,err,Size(31,31),3,criteria,derivlambda,flags);
特征點狀態(tài)檢查與匹配的代碼如下
size_ti,k; for(i=k=0;i2){ pts[0][k]=pts[0][i]; initPoints[k]=initPoints[i]; pts[1][k++]=pts[1][i]; circle(frame,pts[1][i],3,Scalar(0,255,0),-1,8); } } //resize有用特征點 pts[1].resize(k); pts[0].resize(k); initPoints.resize(k);
繪制跟蹤軌跡的代碼如下
//繪制跟蹤軌跡 draw_lines(frame,initPoints,pts[1]);
該方法實現(xiàn)如下:
voiddraw_lines(Mat&image,vectorpt1,vector pt2){ if(color_lut.size()
運行效果:
左側(cè)是視頻的原始每一幀、右側(cè)視頻是每一幀中KLT算法實時軌跡繪制
車輛運行軌跡跟蹤
審核編輯:劉清
-
跟蹤算法
+關(guān)注
關(guān)注
0文章
41瀏覽量
13245 -
OpenCV
+關(guān)注
關(guān)注
33文章
652瀏覽量
44827 -
KLT
+關(guān)注
關(guān)注
0文章
5瀏覽量
7596
原文標題:干貨 | OpenCV中KLT光流跟蹤原理詳解與代碼演示
文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
MAX20800 MPP跟蹤DC - DC轉(zhuǎn)換器:光伏系統(tǒng)的高效解決方案
LED補光燈3.7V降3V線性恒流調(diào)光方案H7304A
天合跟蹤位列全球光伏跟蹤支架制造商排名第二
天合跟蹤與西班牙EPC達成戰(zhàn)略合作
實用!智能空開過流調(diào)整步驟詳解:從原理到實操,精準守護用電安全
炎核開源開放平臺上架推出OpenSparseBlas高性能稀疏計算庫
DLPC3478顯示和光控制器:技術(shù)詳解與應用指南
基于FD-SST 的無人機目標跟蹤系統(tǒng)的設(shè)計與實現(xiàn)|技術(shù)集結(jié)
天合跟蹤攜手Elmya打造西班牙Mirabal光伏電站項目
自動駕駛中如何將稀疏地圖與視覺SLAM相結(jié)合?
天合跟蹤再獲烏茲別克斯坦納沃伊363MW光伏支架訂單
【開發(fā)實例】基于GM-3568JHF開發(fā)板安裝OpenCV并使用視頻目標跟蹤 ( CamShift)
稀疏光流跟蹤(KLT)算法詳解

評論