軌跡跟蹤 二維軌跡跟蹤

2021-07-11 10:18:33 字數 3944 閱讀 4201

----------

注意:3、注意光線,不要太暗了,也不要太刺眼,有光圈亮點。

前景跟蹤演算法過程

首先都是檢視文獻來著,大概看了20多篇文獻資料。其實起指導作用的文獻還是只有那麼幾篇。我就列出來:

[1].zhang z.a flexible new technique for camera calibration[j].transactions on pattern analysis and machine intelligence,2000(11):1330-1334.

[2]olivier barnich, marc van droogenbroeck. vibe: a universal background subtraction algorithm for video sequences[j]. ieee transactions on image processing, 20(6):1709-1724, june 2011.

[3]robust fragments-based tracking using the integral histogram.

還有很多文獻,就不一一列出來了。對我用c++來實現這些演算法的啟蒙文獻應該是文獻[3]:

第[3]篇文獻:是一種改進的模板匹配方法,把模板和目標都分成多個字塊,然後分別匹配,這樣可以避免部分被遮擋就丟失目標的情況。(有原始碼可以檢視)

文獻[1]很經典,我是直接用的,用來消除攝像頭的扭曲形變。

文獻[2]是我們方法的基礎,我直接將它的原始碼移植過來了。

我的工作

1、主要是從前景檢測的結果中用一種更優的方法找出魚類所在的位置。能夠更加精確、實時的提取魚類軌跡。

2、將軌跡做平滑處理,使用了基於平方的方法,效果很不錯。

3、開發二維軌跡跟蹤軟體,確實只是小軟體,我只用了3個星期不到的時間做完,當然還有很多需要完善的地方。其實也有之前做三維魚類軌跡跟蹤系統的基礎。很多復用了之前的**。

二維估計跟蹤演算法:原始幀->去失真->vibe->區域性搜尋->二維軌跡

vibe演算法不是我的原創,是已經很成熟的演算法,故不詳細說明。貼出它的原始碼吧,希望大家可以直接借鑑學習。

二次封裝之後的vibe.hxx:

#ifndef _vibe_hxx_

#define _vibe_hxx_

class vibe

inline

void setsegmentmap( unsigned

char* i )

inline

void setframewidth( int w )

inline

void setframeheight( int h )

inline

void setframewidthstrip( int s )

inline

bool isinitilized()

private:

int getrandomsample();

int getrandomsubsample();

int getrandomneightxcoordinate( int x );

int getrandomneightycoordinate( int y );

private:

int _framewidth;

int _frameheight;

int _framewidthstrip;

int _sphereradius;

int _pixelsamples;

int _backgroundthreshold;

int _subsampling;

int _borderwidth;

unsigned

char* _image;

unsigned

char* _segmap;

unsigned

char** _samples;

};#endif

#include "stdafx.h"

#include

#include

#include

#include

#include "vibe.hxx"

#define n 25

#define r 15

#define zmin 3

#define phi 16

vibe::vibe()

vibe::~vibe()

delete _samples;

_samples = 0;

}}void vibe::initialize()}}

}void vibe::update()

while( count < _backgroundthreshold && index

< _pixelsamples )

if( count >= _backgroundthreshold )

rand = getrandomsubsample();

//if( rand == 0 )

if( rand

< 6 )

}else}}

}int vibe::getrandomsample()

int vibe::getrandomsubsample()

int vibe::getrandomneightxcoordinate( int

x )int vibe::getrandomneightycoordinate( int

y )

呼叫這個vibe這個類的方法:

vibe vibe;

vibe.setframewidth(image->width);

vibe.setframeheight(image->height);

vibe.setframewidthstrip(segimage->widthstep);

vibe.setsegmentmap( (unsigned char*)(segimage->imagedata));

vibe.setcurrentframe((unsigned char*)grayimage->imagedata);

vibe.initialize();

……//更新

vibe.setcurrentframe( (unsigned char*)grayimage->imagedata );

vibe.update();

不會用多看看類的原始碼吧。「不要怕難,多折騰!」,我導師的名言。

區域性搜尋以及平滑處理

設k為幀數,r為搜尋半徑,p(x,y)為在 (x,y)處的畫素值。設第 幀的座標為(xk,yk) ,可以得到第k+1 幀的位置為 :

平滑處理過程:

設平滑視窗的寬度為w1,視窗中每一幀的權重為:

原理為每一位局當前位置距離的平方,最遠處為1^2,……,當前最大2^k

平滑結果:

效果展示:

vibe結果:

如有疑問,可以聯絡我。

等我的**錄用後,再深入討論三維軌跡跟蹤方法。

matlab,機械臂軌跡規劃,跟蹤軌跡。

clear l1 link 0 0 0 0 0 modified l2 link pi 2 0 70 pi 2 0 modified l3 link 0 20 100 0 modified l4 link pi 70 0 pi 2 modified l5 link 0 0 0 pi 2 0 modi...

軌跡跟蹤主要方法 RocketMQ訊息軌跡 設計篇

rocketmq 訊息軌跡主要包含兩篇文章 設計篇與原始碼分析篇,本節將詳細介紹rocketmq訊息軌跡 設計相關。rocketmq訊息軌跡,主要跟蹤訊息傳送 訊息消費的軌跡,即詳細記錄訊息各個處理環節的日誌,從設計上至少需要解決如下三個核心問題 1 訊息軌跡資料格式 rocketmq4.5版本訊息...

路徑與軌跡 路徑規劃與軌跡規劃 路徑跟蹤與軌跡跟蹤

對於無人車輛來說,全域性路徑點只要包含空間位置資訊即可,也可以包含姿態資訊,而不需要與時間相關,但區域性規劃時,則可以考慮時間資訊。這裡規定軌跡點也是一種路徑點,即當路徑點資訊中加入時間約束,就可以被稱為軌跡點。從這個角度理解,軌跡規劃就是一種路徑規劃,當路徑規劃過程要滿足無人車輛的縱向和橫向動力學...