計算機視覺CV 之 CMT跟蹤演算法分析二

2021-07-04 16:40:22 字數 1986 閱讀 1761

這裡先說明一下,作者關於cmt演算法寫了兩篇文章:

consensus-based matching and tracking of keypoints for object tracking (wacv2014 best ***** reward)

clustering of static-adaptive correspondences for deformable object tracking (cvpr 2015)

其中wacv的文章從更工程的角度來分析cmt的演算法,寫出來其詳細的流程,比較推薦閱讀。

這裡我直接擷取了文章中的原圖。

我把它翻譯一下:

下面結合**及**分析每一步

在cmt.cpp的**中可以比較清晰的理解,就是使用opencv的fast或者brisk特徵檢測及特徵描述。然後關鍵是儲存有效的資料在資料庫用於之後的匹配,主要在以下兩個**

//initialize matcher 初始化匹配器

matcher.initialize(points_normalized, descs_fg, classes_fg, descs_bg, center);

//initialize consensus 初始化一致器

consensus.initialize(points_normalized);

進去看一下細節:

void matcher::initialize(const

vector

& pts_fg_norm, const mat desc_fg, const

vector

& classes_fg,

const mat desc_bg, const point2f center)

void consensus::initialize(const

vector

& points_normalized)}}

那麼特徵的角度距離是按下圖意思計算的,我想對應一下**還是很好理解的:

接下來分析step 3,4,5,6.

關鍵是跟蹤和匹配

在processframe函式中可以看到。

跟蹤使用:

//track keypoints

vector

points_tracked;

vector

char> status;

// 利用光流法計算關鍵點的當前位置。

tracker.track(im_prev, im_gray, points_active, points_tracked, status);

深入檢視**發現作者使用了雙向的跟蹤:

void tracker::track(const mat im_prev, const mat im_gray, const

vector

& points_prev,

vector

& points_tracked, vector

char> & status)}}

}

基本的思路就是先使用上一幀的特徵點points_prev通過光流計算這一幀的對應位置points_tracked,然後反過來使用points_tracked計算對應的上一幀的位置points_back,然後對比points_prev和points_back之間的距離,按道理應該是接近0才對,但是因為光流計算有誤差,因此,有的可能比較大,因此作者設定了乙個閾值thr_fb 30,如果大於該閾值,表示得到的資料有誤,刪掉該點。

這麼做的目的是為了使跟蹤得到的結果更可靠。

計算機視覺基礎之質心跟蹤演算法1

步驟1 接受邊界框座標並計算質心 步驟2 計算新邊界框與現有物件之間的歐幾里得距離 步驟3 更新 x,y 現有物件的座標 步驟4 註冊新物件 步驟5 登出舊物件 初始化下乙個唯一的物件id和兩個有序的用於跟蹤對映給定物件的字典 id到它的質心和它擁有的連續幀數分別被標記為 消失 儲存給定的最大連續幀...

小白入門 計算機視覺CV課程

課程目錄 任務100 道路行車道檢測 講解.mp4 任務102 專案介紹.mp4 任務103 交通指示牌識別的簡介.mp4 任務104 交通指示牌識別課程的程式設計任務.mp4 任務105 如何分析資料 util.py 的詳細介紹 mp4 任務106 如何預處理影象資料 建立神經網路模型 訓練網路模...

計算機視覺演算法

講了乙個最小二乘法問題 存在四個不在一條直線上點,擬合一條直線,使這條直線能夠 誤差最小的穿過這四個點 雖然還不知道具體怎麼解。引申到矩陣的最小二乘法 有三個矩陣a,b,c,a為4 2,c為4 1,a b c.求b矩陣 求b,a矩陣是乙個非奇異矩陣,不可逆,所以讓a轉置左乘a構成滿秩矩陣c,可得b等...