SLAM中的關鍵幀是什么?有什么用?如何選擇關鍵幀?


關鍵幀目前是一種非常常用的方法,可以減少待優化的幀數,並且可以代表其附近的幀。可以理解為一個學校里有100個班級,每個班的班長就是一個關鍵幀,他可以代表他班里的人,那么如何選取關鍵幀呢?

選取的指標主要有:

(1)距離上一關鍵幀的幀數是否足夠多(時間)。比如我每隔固定幀數選擇一個關鍵幀,這樣編程簡單但效果不好。比如運動很慢的時候,就會選擇大量相似的關鍵幀,冗余,運動快的時候又丟失了很多重要的幀。

(2)距離最近關鍵幀的距離是否足夠遠(空間)/運動

比如相鄰幀我根據pose計算運動的相對大小,可以是位移也可以是旋轉或者兩個都考慮,運動足夠大(超過一定閾值)就新建一個關鍵幀,這種方法比第一種好。但問題是如果對着同一個物體來回掃就會出現大量相似關鍵幀。

(3)跟蹤質量(主要根據跟蹤過程中搜索到的點數和搜索的點數比例)/共視特征點

這種方法就是記錄當前視角下的特征點數,或者視角,當相機離開當前場景時才會新建關鍵幀,避免了第2種方法的問題。缺點是比較復雜。

打個比方,關鍵幀相當於slam的骨架,是在局部一系列普通幀中選出一幀作為局部幀的代表,記錄局部信息。舉例來說,攝像頭放在原處不動,普通幀還是要記錄的,但關鍵幀因為總看到原場景,所以不會增加。
三角化需要一定程度的共視區域,所以普通幀每2幀之間會存在大量的信息冗余,如果所有幀全部參與計算,不僅浪費了算力,對內存也是極大的考驗,這一點在前端vo遞歸處理方式中表現不明顯,但在后端優化里是一個大問題,所以關鍵幀主要作用是面向后端優化的算力與精度的折中。此外,關鍵幀選擇時還會對圖片質量、特征點質量等進行考察,一定程度上也發揮了濾波的作用,防止無用的或錯誤的信息進入優化過程而破壞定位建圖的准確性。
選擇關鍵幀主要從關鍵幀自身和關鍵幀與其他關鍵幀的關系2方面來考慮。一方面,關鍵幀自身質量要好,例如不能是非常模糊的圖像、特征點數量要充足、特征點分布要盡量均勻等等;另一方面,關鍵幀與其他關鍵幀之間的關系,需要和局部地圖中的其他關鍵幀有少量的共視關系,但大部分特征點是新特征點,以達到既存在約束,又盡量少的信息冗余的效果,例如局部地圖點投影到此幀的點數低於一個閾值或前一個關鍵幀的特征點在此幀里已經有90%觀測不到等等。
在關鍵幀的運用上,orbslam做的非常好,尤其是在回環檢測中使用了以關鍵幀為代表的幀“簇”的概念,回環篩選中有一步將關鍵幀前后10幀為一組,計算組內總分,以最高分的組的0.75為閾值,濾除一些組,再在剩下的組內各自找最高分的一幀作為備選幀,這個方法非常好地詮釋了“關鍵幀代表局部”的這個理念。

轉自https://www.cnblogs.com/CV-life/p/11159820.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM