1. 程式人生 > >非濾波單目視覺slam筆記1

非濾波單目視覺slam筆記1

非濾波單目視覺slam

主要分為以下8部分

  • 資料型別
  • 資料關聯
  • 初始化
  • 位姿估計
  • 地圖維護
  • 地圖生成
  • 失效恢復
  • 迴環檢測

資料型別

  • 直接法(稠密,半稠密)

基本原理是亮度一致性約束,\(J(x,y) = I(x + u(x,y)+ v(x,y))\) ,x,y是影象的畫素座標,u,v是同一場景下的兩幅影象I,J的對應點的畫素偏移。

起源是光流法,由於使用了影象中大部分的資訊,對紋理差的部分魯棒性比直接法好,但是計算量也加大,要並行化計算。

  • 間接法

就是特徵點匹配,一般要考慮到特徵點的魯棒性,對光照,尺度,視角的變化有很好的魯棒性,還要考慮實時性的。大部分系統使用的是Fast作為特徵提取器,

描述子可以是BRIEF,BRISK,SURF,SIFT,也可以是影象塊

  • 雜交法

上面兩個的結合,直接法用於構建特徵匹配,間接法用於優化相機的位姿。

資料關聯

資料關聯就是在不同影象的觀測之間建立匹配關係,這裡主要討論間接法的資料關聯,直接法本身攝像頭位姿估計就是一種資料關聯.間接法有以下幾種關聯

  • 2D --> 2D

沒有地圖,沒有相機之間的變換,只能做2d--2d的資料關聯。對於描述子描述的特徵,進行描述子距離的L1範數,L2範數,漢明距離等,

對於區域影象塊描述子,通常使用模板匹配中差值平方和(SSD,ZMSSD)

  • 3D --> 2D

前一時刻的位姿估計和3D結構已知,就是pnp的過程,

  • 3D --> 3D

在迴環檢測的時候,兩幅影象中觀察到的3D點可以用來求兩幅影象之間的相似變換

初始化

一般的初始化流程:

主要是為找到跟第一幅影象有足夠數量的特徵匹配點,視差足夠大的第二幅影象

PTAM初始化要求使用者兩次輸入,來獲取地圖中的前2個關鍵幀;需要使用者在第一個和第二個關鍵幀之間,做與場景平行的、緩慢平滑相對明顯的平移運動。

SVO使用單應進行初始化,但SVO不需要使用者輸入,演算法使用系統啟動時的第一個關鍵幀;提取FAST特徵,用影象間的KLT演算法跟蹤特徵,視差足夠的時候就選擇作為第二幅影象,然後計算單應矩陣,只能是2維平面

LSD-SLAM從第1個影象隨機初始化場景的深度,通過隨後的影象進行優化。LSD-SLAM初始化方法不需要使用兩檢視幾何。不像其他SLAM系統跟蹤兩視
圖特徵,LSD-SLAM只用單個影象進行初始化

ORB-SLAM 平行計算基本矩陣和單應矩陣,根據對稱轉移誤差(多檢視幾何)懲罰不同的模型,最終選擇最合適的模型

不同的系統使用的初始化方法如下:

位姿估計

通用的位姿估計流程

因為資料關聯計算量巨大,大部分SLAM系統都有一個先決條件,即對於每個新影象的位姿,用於資料關聯工作都有具體要求和限制。

這個先驗資訊可能是恆速運動模型,可能是假設運動量不大,使用上一時刻的位姿。

PTAM,DT-SLAM,ORB-SLAM,DPPTAM都假設相機做平滑運動採用恆定速度運動模型,用跟蹤到的之前兩幅影象的位姿變化估計作為當前影象的先驗知識(用於資料關聯的影象位姿的要求和限制)。但是,在相機運動方向上有猛烈移動時,這樣的模型就容易失效

LSD-SLAM和SVO都假設在隨後的影象,相機位姿沒有明顯改變,因此,這種情況下都是用高幀率相機。

直接和間接方式都是通過最小化影象間的測量誤差估計相機位姿;

直接方法測量光度誤差(畫素值),間接方法通過最小化從影象上一位姿的地圖中獲得的路標的重投影到當前幀的重投影誤差(幾何位置)。

地圖生成

地圖生成的一般流程

地圖生成模組將世界表示成稠密(直接)或稀疏(間接)的點雲。

系統將2D興趣點三角化成3D路標,並持續跟蹤3D座標,然後定位相機,這就是量度地圖(pose + point)。但是,相機在大場景執行時,量度地圖的大小就會無限增大,最終導致系統失效

拓撲地圖(pose-graph)可以減少這一弊端,它儘量將地圖中的量度資訊最小化,減少幾何資訊(尺度,距離和方向)而採用連線資訊。視覺SLAM中,拓撲地圖是一個無向圖,節點通常表示關鍵幀,關鍵幀通過邊連線,節點之間存在相同的資料關聯

拓撲地圖與大場景的尺度比較吻合,為了估計相機位姿,也需要量度資訊;從拓撲地圖到量度地圖的變化並不是一件容易的事情,因此,最近的視覺 SLAM 系統都採用混合地圖,區域性量度地圖和全域性拓撲地圖。

地圖製作過程會處理新路標將其新增到地圖中,還檢測和處理離群點。圖示點的新增可以通過三角化,或者濾波實現的位置估計(一般是逆深度,加上一個概率分佈),收斂到一定的程度就可以加入到地圖中。

地圖維護

地圖維護通過捆集調整(Bundle Adjustment)或位姿圖優化(Pose-Graph)來優化地圖。地圖擴充套件的過程中,新的3D路標基於相機位姿估計進行三角化。經過一段時間的執行,由於相
機累積誤差增加,相機位姿錯誤,系統出現漂移(scale-drift)。

位姿圖優化相比全域性捆集調整返回較差的結果。原因是位姿圖優化只用於關鍵幀位姿優化,(要是路標相對於的是關鍵幀表示,而不是世界下的表示,會相應地調整路標的3D結構);全域性捆集調整都優化關鍵幀位姿和3D結構。

地圖維護也負責檢測和刪除地圖中的由於噪聲和錯誤特徵匹配的離群點。

失效恢復

不管是錯誤的使用者運動(相機位姿的劇烈改變和運動模糊),或者相機觀測無特徵的區域,還是無法匹配足夠的特徵,或者其他原因,視覺SLAM系統都會track lost.

一般是視覺詞帶,pnp

閉環檢測

想法

感覺一般的slam按照上面的8個部分,想一遍要能想通,原理上面一般就算是可以了。就剩下程式碼實踐了。

系統有沒有特定的要求,大範圍的可以嗎,室內還是室外,是直接法還是間接法,對應的就是稀疏地圖還是(半)稠密地圖,優化的是幾何誤差還是光度誤差。

需不需要初始化,需要人工的干預,非2維平面可以嗎,對應的就是計算本徵矩陣還是單應矩陣。還是基於濾波的方法,不需要初始化,後續優化就可以。

然後就是tracking,因為視覺slam是一個非凸函式,需要一個初始值,對應的就是你的prior是什麼,恆速運動模型還是高速相機,把前一幀的位姿當做初始值。

追蹤的過程的優化函式是什麼,是光度不變,還是幾何誤差,就是g2o中邊,頂點的構造。

當然還要維護地圖,地圖中的點是怎麼表示,基於逆深度,還是歐式幾何表示,camera-anchor的表示。地圖維護中要進行BA,還是Pose-Graph的優化,還是雜交。

然後就是閉環的檢測,基於視覺詞帶,還是隨機取一些幀進行Image Alignment。

當然這其中還有無數細節,運動快,模糊是怎麼處理的(加大搜索範圍,從金字塔coarse-fine的搜尋),Tracking lost在什麼情況下發生,怎麼進行重定位。

最小二乘法要做幾次,怎麼時候收斂,要不要給他設個時間約束,權重怎麼設定等等。

文獻

有一箇中文版的 《非濾波方法的單目視覺SLAM系統綜述》

下一篇我會把SVO,ORB-SLAM,LSD-SLAM的主要程式碼學習一下

相關推薦

濾波視覺slam筆記1

非濾波單目視覺slam 主要分為以下8部分 資料型別 資料關聯 初始化 位姿估計 地圖維護 地圖生成 失效恢復 迴環檢測 資料型別 直接法(稠密,半稠密) 基本原理是亮度一致性約束,\(J(x,y) = I(x + u(x,y)+ v(x,y))\) ,x,y是影象的畫素座標,u,v是同一場景下的兩幅

視覺SLAM:采用逆深度參數化的方法求取深度信息的過程

ive 魯棒性 圖片 lte 有著 研究 tla 一次 攝像機 一種實時的單目視覺SLAM改進算法 該算法采用一個攝像頭作為外部傳感器來提取機器人行進過程中周圍環境的特征信息,用實時性良好的FAST提取環境特征點,結合逆深度參數化進行特征點非延時初始化,用壓縮擴展卡爾曼濾波

OpenCV學習筆記(二十一)——簡單的視覺測距嘗試

    前言:         視覺測距作為機器視覺領域內基礎技術之一而受到廣泛的關注,其在機器人領域內佔有重要的地位,廣泛應用於機器視覺定位、目標跟蹤、視覺避障等。機器視覺測量主要分為:單目視覺測量、雙目視覺測量、結構光視覺測量等。結構光由於光源的限制,應用的場合比較固定;

基於視覺的四旋翼定點降落——如何搭建基於gazebo的pixhawk模擬環境(三)-1

    搭建模擬環境是相當重要的,因為我們的程式碼如果直接放到飛機上去跑,那麼很容易炸機。通過模擬環境,我們至少可以保證程式碼邏輯的正確性。這篇文章還是要感謝我的隊友舒仔仔的幫助,話不多說,上正文。1 安裝gazebo一般安裝的ROS就已經自己安裝了gazebo,如果已經安裝

python 視覺測距

# import the necessary packages import numpy as np  import cv2 import sys reload(sys) sys.setdefaultencoding('utf8') cap = cv2.VideoCaptu

基於視覺的移動機器人室內定位與運動目標跟蹤

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

2.視覺演算法

演算法流程 建立影象塊 → 根據相機光心確定搜尋極線 → 極線搜尋演算法 → 深度濾波器進行濾波 → 得到對應畫素後,進行三角測量 → 得到深度資訊 如何匹配? 極線搜尋和塊匹配 匹配結果優化? 深度濾波器技術 三角測

無人駕駛視覺-視覺里程計

対極幾何 通過兩幀影象的運動,利用匹配點,求解相機的位姿變換。(就是得到R,t)步驟: 1. 根據配對點的畫素位置,求出 E 或者 F ; 2. 根據 E 或者 F ,求出 R, t。   問題 單目視覺的尺度不確定性(Scale Ambiguity)。例如,程式中

Python 三維視覺筆記1 -- TVTK庫

Python 三維視覺化筆記1 – TVTK庫 Python 三維視覺化系列筆記是筆者在學習黃天羽老師的《Python科學計算三維視覺化》課程及筆者實踐三維視覺化的筆記。 課程連結: Python科學計算三維視覺化 參考文件: VTK 官方文件 環境:

乾貨 | Matlab實現視覺里程計基於SURF特徵(程式碼類)

博主github:https://github.com/MichaelBeechan    博主CSDN:https://blog.csdn.net/u011344545  SURF特徵提取參考:https://blog.csdn.net/u01134454

視覺標定:世界座標系、相機座標系、影象座標系、畫素座標系——簡單粗暴,粗暴

1.正文 影象處理、立體視覺等等方向常常涉及到四個座標系:世界座標系、相機座標系、影象座標系、畫素座標系。例如下圖: 構建世界座標系只是為了更好的描述相機的位置在哪裡,在雙目視覺中一般將世界座標系原點定在左相機或者右相機或者二者X軸方向的中點。 接下來的重點,就是關於

視覺定位測距的兩種方式

  單目定位和雙目定位的選擇,我覺得主要還是成本和時間的考慮。之前也嘗試過雙目定位,感覺要更精準些,但雙目測距需要對兩幅影象進行影象變換和極線匹配,稍微耗時了一些。這幾天嘗試了一下單攝像頭進行測距定位,主要有兩個思路:   1.定位測量插值得到每個畫素的實際

OpenCV Using Python——視覺三維重建

import cv2 import numpy as np import glob ################################################################################ print 'criteria and object poin

基於視覺的智慧車輛視覺導航系統設計

基於計算機視覺的高速公路防撞系統是當前智慧交通管理系統研究的熱點之一。如何在多變的環境下快速準確地從視訊影象裡檢測到車道和前方車輛是實現這類系統面臨的最關鍵問題。近20年來,國內外很多研究人員對這個問題進行了大量研究,提出了多種多樣的實用演算法併成功開發了一些視覺系統。這

OpenCV Using Python——基於SURF特徵提取和金字塔LK光流法的視覺三維重建

基於SURF特徵提取和金字塔LK光流法的單目視覺三維重建 1. 單目視覺三維重建問題         在前面的文章中,筆者用SIFT提取特徵後用radio測試剔除了匹配中異常的特徵點,然後根據匹配合格的特徵點計算基礎矩陣和本徵矩陣,對本徵矩陣SVD分解來估計和構造透視矩陣,

OpenCV視覺定位(測量)系統(新增 含程式碼)

OpenCV單目視覺定位(測量)系統 The System of Vision Location with Signal Camera Abstract:This passage mainly describes how to locate with signalcame

雙目視覺SLAM講解1

視覺SLAM漫談 1.    前言   開始做SLAM(機器人同時定位與建圖)研究已經近一年了。從一年級開始對這個方向產生興趣,到現在為止,也算是對這個領域有了大致的瞭解。然而越瞭解,越覺得這個方向難度很大。總體來講有以下幾個原因: 入門資料很少。雖然國內也有不少人在

視覺(5):SFM之特徵點匹配(四)

SFM之特徵點匹配(四) 引入 在經過對每幅影象進行特徵提取之後,可以發現在一幅影象中存在非常多的特徵點(特殊情況下可能特徵點很少)。那麼如何去找出不同影象中的哪些特徵點反應在現實世界中是同一個物理座標呢?這需要做的工作就是對兩幅影象中的特徵點

slam基礎 特點匹配 光流匹配 應變換恢復變換矩陣 本質矩陣恢復變換矩陣 深度濾波

非濾波單目slam基礎 直接法 特徵點法 混合法區別與聯絡 按照 2D−2D 資料關聯方式的不同 ,視覺定位方法可以分為直接法、非直接法和混合法 1. 直接法假設幀間光度值具有不變性 , 即相機運動前後特徵點的灰度值是相同的 .

SLAM學習筆記 - 視覺SLAM方法資源匯總

paper icc 筆記 richard 倫敦 pap 資源 lob sla PTAM - ISMAR2007 英國牛津 Georg Klein 主頁及代碼 PTAM-GPL DTAM - ICCV2011 倫敦帝國理工學院 Richard paper O