這是我在組會上講的文章,當時跟着論文的行文思路來講的,可惜沒能講得很清楚。現在打算用我自己的思路來介紹這篇文章,希望用儘可能易懂的方法來講解清楚。也希望通過博客總結,來進一步提升自己的理解。
——致我的第一次組會報告
Image-Based Localization
首先介紹一下什麼是Image-Based Localization。隨着計算機視覺的發展,現在人們可以利用 SfM(structure from motion) 技術利用場景的圖片集合來進行三維重建,得到場景的點雲模型。這類軟件有幾種開源實現,比如 Bundler, VisualSfM。基於圖像的定位系統就是利用已知的場景三維模型,通常是點雲模型,來對新的圖像進行定位,得到拍攝這副圖像的相機在三維空間中的位置和朝向。
圖1. Imaged-based Localization Standard Pipeline
如上圖所示,右邊是場景的點雲模型的一部分,左上角是查詢圖像,基於圖像的定位就是要求得對應的相機的位置和姿態(點雲中紅色錐形表示了相機的位置和朝向)。
通常這種定位系統需要離線建立好場景的點雲模型,定位的時候,對查詢對象首先提取局部特徵,通常是 SIFT, 然後需要建立圖像的2D特徵和點雲模型中3D點的對應關係,在得到足夠多的2D-3D Matches 之後,利用RANSAC和Pnp 算法,就可以求得相機六個自由度的位置和姿態。
這裏的關鍵是如何尋找到合適的2D-3D匹配關係,通常點雲模型中每一個3D還會包含有重建出這個3D點所對應的所有的2D圖像特徵,一般是通過3D點所包含的2D特徵和特性的2D特徵的匹配關係,來得到3D點和特性的2D特徵的匹配關係,但是在具體尋找匹配關係時,會有很多種思路和策略。
Voting-Based Camera Pose Estimation
介紹了什麼是image-based localization之後,下面就開始介紹這篇論文中提到的定位策略。
上圖是本文中提出的定位流程圖,對查詢圖像,首先得到每個特徵一對多的匹配關係,然後把所有這些匹配關係通過一系列的幾何濾波,濾除掉大部分錯誤的匹配關係,然後再構建文章中提出的 Voting Shape,如果有位置先驗信息(比如GPS位置),可以進一步約束 Voting Shape。這裏對每一個2D-3D匹配關係都可以構建出一個 Voting Shape,類似於Hough voting,對區域進行一個投票,最後票數最多的區域所表示的姿態就認爲是真實的相機姿態,然後得到內點,最後對這些內點通過RANSAC和PnP算法,求得最終的姿態。
Find Reliable 2D-to-single-3D Matches VS Find Extended 2D-to-many-3D Matches
傳統尋找2D-3D匹配的方法中,需要在數據庫2D描述子中尋找查詢圖像的2D描述子的最近鄰(Nearest Neighbor ),一般會找到最近鄰和次近鄰,然後通過 Iowe’s Ratio Test 來判斷這樣的匹配是否是一個正確的匹配。Ratio Test 在計算機視覺中特徵匹配時用得很多,也很有效。
我把這種策略稱爲 Find Reliable 2D-to-single-3D Matches ,也就是對於一個查詢2D特徵,來找到一個可靠的3D點來得到一個2D-3D匹配關係。這是因爲後面再計算姿態時是使用的RANSAC來隨機採樣,如果你的內點率不高的話,RANSAC採樣方法很難得到正確的結果。
但是這種 ratio test 有其內在的缺陷性,當場景變得越來越大時,那麼數據庫中就會有越來越多的三維點和描述子,也就是說描述子空間中的描述子的密度會越來越大。
如上圖所示,假設對於查詢特徵(紅色五角星)在數據中真實匹配時紅色球,但是數據庫中還有很多特徵也和查詢特徵很相似,那麼這種情況下還使用 ratio test 的話,並不能得到一個理想的匹配結果(要麼得不到一個匹配,要麼得到錯誤的匹配關係)。
所以爲了解決隨着場景增大,使用 ratio test 得不到正確匹配的問題,論文提出要爲查詢圖像的每一個2D特徵來找 N 個匹配關係,也就是一對多的匹配關係,然後通過一些幾何約束關係來濾除掉明顯錯誤的匹配,通過投票的方式得到相機的位置和姿態。
Assumptions
首先,論文做出了一些必要的假設。
- Assumption 1: The 3D scene model is gravity aligned, and the ground plane is approximated.
- Assumption 2: Given the camera intrinsic calibration K and gravity direction.
- Assumption 3: The height of query camera is close to ground plane within certain interval.
假設2中要求知道相機的內參,同時能知道相機的重力方向,文章中重力方向的獲取是通過計算圖片的垂直消隱點來得到的。同樣假設2中,也要知道重力方向,這樣就可以把整個模型的座標系和重力方向對齊,地平面是通過數據庫中相機的位置插值得到的。
這篇論文中提出的這種模型之所以能夠work,很大程度上就是因爲對場景有很強的先驗,對查詢相機也有很強的約束在裏面。
Reformulate the Pose Estimation Problem
有了上面的假設了之後,就可以把相機姿態估計這個問題進行簡化了。
首先假設我們經過第一步已經得到了所有特徵一對多匹配的結果了(後面會再說如何得到一對多匹配關係的具體方法)。
現在就有很多個2D-3D匹配關係了,同時3D點在空間中的位置是已經知道的。先考慮最簡單的情況,假設已經相機的高度爲
如圖所示,假設2D特徵點的圖像像素座標爲
那麼如果這個2D-3D匹配關係是正確的話,相機觀察到這樣一個匹配關係,那麼相機可能的位置在
那麼,對每一個這樣的2D-3D匹配,都可以在
如上圖所示,假如有三個正確的2D-3D對應關係,那麼可以得到三個圓,三個圓相交的位置就是相機的位置。
當然實際的匹配關係中會有很多錯誤的匹配,但是可以採用類似 Hough Tranform 中的方法,對區域進行劃分,然後投票,得到票數最多的區域,就是得到的相機位置。
Accounting for uncertainty
上一章節是假設了已知準確的相機高度,是理想情況,實際上並不知道相機的準確高度,假設2 中只是假設了相機的高度是在地平面附近的一個區間中。同時2D-3D對應關係中,3D點反投影到像平面上面也會有一定的誤差。所以需要把這些不確定性都考慮進來。
首先,對於一個2D-3D匹配關係,光心、2D像點、3D點並不能同時準確地在一條直線上,考慮到一定的誤差,可以認爲把3D點反投影到像平面上,會和2D像點的誤差在
注意這裏的高度是在全局座標系下描述的。如果相機的高度準確知道,那麼可以進一步,把error cone 和 相對光心的高度爲
因爲在空間中,3D點的位置是已經確定了的,所以就把上面說的error shape轉換到相機的位置上,這樣的話相機可能的位置就不再是隻在一個圓的邊上了,而應該是在一個圓環內(Error Ring),如下圖10.中所示,藍色的圓環表示相機所有可能的位置,注意和圖5.相對比,圖5.中高度是固定的,而這裏高度是不確定的,只知道一個大致的區間。
同樣的,對於每一個2D-3D匹配對,都可以構建出這樣一個圓環區域表示相機可能的位置,自然地,和上圖6類似,如果把所有2D-3D匹配關係都考慮進來,就得到了如下圖11.所示的結果,相交最多的位置就是相機最有可能的位置了。
理解了幾何上的原理之後,後面的事情就是要計算每個圓環的位置,然後通過對平面進行劃分,對每一個小區域投票,得到投票計數最多的區域就是相機的位置了,最後可以通過此時的內點再進行一個RACSAC+PnP的操作,得到更精確的位置和姿態。
Efficient Voting Shape Computation
要計算上面說的圓環,需要分幾步來操作。首先要在相機座標系下得到圖8.中藍色區域表示的 Error Shape ,接着通過圖9.中所示把這個Error Shape轉換到相機的位置上,然後再轉換到全局座標系裏,最後再考慮旋轉角度的問題,得到圖10.所示的 Error Ring。
Local Error Shape Computation
首先來計算在相機座標系下Error Shape的表達式。這裏是用一個四邊形來擬合Error Shape,需要得到Error Shape距離光心(相機座標系原點)的最近距離
現在我們來看和一個圖像2D特徵點對應的3D點在像平面上的反投影的四個極致位置,即垂直和水平方向上的極值點。連接光心和這四個極值點將得到四條射線,紅藍黃綠分別對應圖12.中的
但是要考慮到相機座標的
這裏我們引入前面說 error cone 的表達式:
令上式中
對於射線
對於射線
另外,需要說明的是還需要考慮重力方向的不確定度,因爲重力方向是通過垂直消隱線計算出來的,會有一定的不確定性,論文中3.1節專門討論了這個問題。這裏就不再詳述了,感興趣的話參考原文把。
Convert Local Error Shape into Global Camera Error Shape
得到了相機座標系下的 Error Shape 表達式,還需要將其轉化的全局座標系裏面去。
考慮對於一個2D-3D匹配關係
把旋轉角度考慮進去,得到
同樣,對於多個匹配對,都這樣構建一個Voting Shape,所有的這些Voting Shape 重疊部分最多的就是相機最有可能的位置。由於對每個匹配對只需要操作一次,所以這個算法時線性時間複雜的的。
至此,應該說是把文中最重要的內容給介紹清楚了。
Filtering Based On Geometry Constraints
因爲是對所有的特徵進行一對多的匹配,那麼必然就會產生很多對匹配對,而且這裏面只有一小部分是內點。可以通過一些幾何上的約束來剔除一部分外點。論文中主要提出了三種幾何濾波器,下面一一介紹。
1. Relative feature orientation。提取局部特徵描述子的時候,會有一個方向信息,既然已經知道了重力方向,那麼就可以得到所有特徵的方向相對於重力方向的夾角。對於一個3D點包含的所有2D特徵,描述子相對於重力方向的夾角應該比較一致,可以利用此信息濾波一些明顯錯誤的匹配對。
2. 3D Point Visibility from SfM Model。同樣,對於一個3D點,數據庫中觀測到這個點的相機的位置是已知的,那麼查詢相機如果也能看到這個3D點,那麼視角應該也保持一定的一致性。這就是圖11.出現的invisible area的原因,因爲可以判斷這些視角是不可能觀測到該3D點的。
3. Feature Scale。論文中提出了scale of 3D point 這麼一個概念,其實就是用投影的三角形比例關係,由2D特徵的尺度,和焦距,深度來得到一個3D點的尺度,
4. Positional Prior。另外,如果有GPS這種先驗位置的信息,可以直接限制投票區域。
論文中稱這些濾波器可以濾除掉85%的初始匹配對。可見效果還是挺好的。
Experiments and Results
前面說對特徵進行一對多的匹配,那麼該怎麼一對多匹配呢?
文章中提出了四種思路在近鄰搜索時來找到N個匹配。
1. Ratio test. For 1:N matches the ratio test is performed wrt. the N+1th neighbor.
2. Constant number of nearest neighbors.
3. Absolute thresholding.
4. A variable radius search.
另外每一策略都可以加上 back-matching來反向驗證,對此2D-3D匹配關係,驗證3D在查詢圖像的特徵空間中的最近鄰就是該2D特徵。
實驗採用的數據主要是紅色框中的兩個。SF-0是一個大場景的城市街景數據集。下面開始來說實驗結果吧。
從上圖中可以看到,濾波操作效果明顯,在95%精度處,召回率從藍色的Baseline(不到50%) 可以提升到65%,甚至70%(with GPS)。不同的匹配策略效果也不同,可以看到策略4(variable radius search),N=3 效果最好。後面實驗都採用這個設置。
紅色框中爲相機最後的6 DoF 姿態,相比較之前的方法,召回率大大提高了。並且可以看到,最後的P3P算法並沒有提高定位的性能,但是可以得到更精確的相機的姿態。
在較小的數據集Dubrovnik上也達到了state-of-the-art的性能。尤其是在進行了Bundle Adjustment之後,相機位置的誤差中值只有0.47m,這時迄今爲止所有方法中取得的最好的結果。
Reference
Zeisl, Bernhard, Torsten Sattler, and Marc Pollefeys. Camera Pose Voting for Large-Scale Image-Based Localization. Proceedings of the IEEE International Conference on Computer Vision. 2015.