论文阅读——《Online Photometric Calibration of Auto Exposure Video for Realtime Visual Odometry and SLAM》
論文閱讀——《Online Photometric Calibration of Auto Exposure Video for Realtime Visual Odometry and SLAM》
- 《Online Photometric Calibration of Auto Exposure Video for Realtime Visual Odometry and SLAM》
- 1. 成像過程建模
- 2. 光度標定原理
- 3. KLT光流法
- 4. 實驗結果
《Online Photometric Calibration of Auto Exposure Video for Realtime Visual Odometry and SLAM》
前幾天讀了很多篇和自動曝光控制相關的paper,那些paper講主要是如何定義曝光程度的評價標準以及如何根據評價標準實現自動曝光控制;
圖像傳感器與信號處理——自動曝光算法
論文閱讀——《Exposure Control using Bayesian Optimization based on Entropy Weighted Image Gradient》
對于SLAM來講,尤其是直接法,通常需要滿足光度不變性這個條件。而自動曝光雖然能夠使得輸入圖像信息最大化,但是卻破壞了光度不變形這個條件,因此,對于SLAM系統來說,對自動曝光的信息流進行光度標定是非常必要,本文就是關于這個問題的一篇paper,發表于2018年的ICRA,如下所示,上圖是未經過光度標定的圖像序列,下圖是經過光度標定并進行恢復后的圖像序列。
1. 成像過程建模
對于一個場景點,反射的光量稱為輻射度LLL。本文假定所有場景點都滿足朗伯反射特性,即移動的傳感器接收到的輻射與傳感器的視角無關。傳感器上位置xxx接收到該場景點的輻射總量為輻照度I(x)I(x)I(x)。在相機中,由于鏡頭對光線造成遮擋等原因,傳感器對輻射的接收程度從中心到邊緣呈現由強到弱的趨勢,這種現象成為漸暈效應,用公式表示如下:I(x)=V(x)LI(x)=V(x) L I(x)=V(x)L其中V:Ω→[0,1]V: \Omega \rightarrow[0,1]V:Ω→[0,1]為漸暈效應因子,其大小取決于傳感器上的空間位置。經過曝光時間eee后,我們就可以獲得累計輻照值:Iacc(x)=eI(x)I_{a c c}(x)=e I(x) Iacc?(x)=eI(x)最后累計輻照值通過相機響應函數f:R→[0,255]f: \mathbb{R} \rightarrow[0,255]f:R→[0,255]就可以將累計輻照值轉化為圖片光照強度OOO:O=f(eV(x)L)O=f(e V(x) L) O=f(eV(x)L)以上就是整個成像過程的建模,那么我們對光度進行標定,主要標定的對象就是:
(1)漸暈效應因子V(x)V(x)V(x)
本文中,漸暈效應因子建模為六階多項式函數:V(x)=1+v1R(x)2+v2R(x)4+v3R(x)6V(x)=1+v_{1} R(x)^{2}+v_{2} R(x)^{4}+v_{3} R(x)^{6} V(x)=1+v1?R(x)2+v2?R(x)4+v3?R(x)6其中,R(x)R(x)R(x)為圖像點xxx相對圖像中心的歸一化距離,v1v_1v1?,v2v_2v2?和v3v_3v3?為我們需要標定的函數。
(2)曝光時間eee
曝光時間就直接建模為一個標量。
(3)相機響應函數f(x)f(x)f(x)
本文中,相機響應函數f(x)f(x)f(x)由平均響應函數f0(x)f_0(x)f0?(x)和基函數hk(x)h_k(x)hk?(x)組成:fG(x)=f0(x)+∑k=1nckhk(x)f_{G}(x)=f_{0}(x)+\sum_{k=1}^{n} c_{k} h_{k}(x) fG?(x)=f0?(x)+k=1∑n?ck?hk?(x)其中,ckc_kck?為我們需要標定的參數,本文中kkk取4。
下面就就介紹這三個對象的標定過程。
2. 光度標定原理
這篇文章光度標定的原理其實非常直接,就是通過KLT光流法對圖像中進行關鍵點追蹤,然后利用追蹤到的關鍵點構建光度誤差的代價函數,然后對代價函數進行非線性優化就可以獲得各個標定對象的標定結果。其實如果了解SLAM的同學對上面這個原理應該是非常清楚的,因為Bundle Adjustment或者直接法也都是這么做的,不同的是優化的變量不同。對KLT光流法最后做塔倫,下面直接討論代價函數及優化過程進行分析:E=∑p∈P∑i∈Fpwip∥Oip?f(eiV(xip)Lp)?r(f,V,ei,Lp)∥hE=\sum_{p \in P} \sum_{i \in F_{p}} w_{i}^{p}\|\underbrace{O_{i}^{p}-f\left(e_{i} V\left(x_{i}^{p}\right) L^{p}\right)}_{r\left(f, V, e_{i}, L^{p}\right)}\|_{h} E=p∈P∑?i∈Fp?∑?wip?∥r(f,V,ei?,Lp)Oip??f(ei?V(xip?)Lp)??∥h?其中PPP為被多幀追蹤到的場景點集,ppp是場景點被圖像幀集FpF_pFp?觀察到的圖像點,OipO_{i}^{p}Oip?是第iii幀上圖像點ppp的光度。wipw_{i}^{p}wip?為每個光度誤差rrr定義了權重,代價函數使用Hube范數∥?∥h\|\cdot\|_{h}∥?∥h?作為魯棒估計。
根據代價函數的定義和各個優化對象的建模,本文采用LM法進行非線性優化:(JTWJ+λdiag?(JTWJ))Δx=JTWr\left(\boldsymbol{J}^{T} \boldsymbol{W} \boldsymbol{J}+\lambda \operatorname{diag}\left(\boldsymbol{J}^{T} \boldsymbol{W} \boldsymbol{J}\right)\right) \Delta \boldsymbol{x}=\boldsymbol{J}^{T} \boldsymbol{W} \boldsymbol{r} (JTWJ+λdiag(JTWJ))Δx=JTWr其中J=(?r?c,?r?v,?r?ei)\boldsymbol{J}=\left(\frac{\partial r}{\partial \boldsymbol{c}}, \frac{\partial r}{\partial \boldsymbol{v}}, \frac{\partial r}{\partial e_{i}}\right) J=(?c?r?,?v?r?,?ei??r?)其中c=(c1,c2,c3,c4)\boldsymbol{c}=\left(c_{1}, c_{2}, c_{3}, c_{4}\right)c=(c1?,c2?,c3?,c4?),v=(v1,v2,v3)\boldsymbol{v}=\left(v_{1}, v_{2}, v_{3}\right)v=(v1?,v2?,v3?),e\boldsymbol{e}e為所有曝光時間組成的向量。權重矩陣W\boldsymbol{W}W由兩部分組成,第一部分就是由Hube范數引入的權重wr(1)w_{r}^{(1)}wr(1)?,第二部分是為了降低高幅值梯度像素誤匹配影響的權重wr(2)w_{r}^{(2)}wr(2)?,其定義如下:wr=μμ+∥?Fi(xip)∥22w_{r}=\frac{\mu}{\mu+\left\|\nabla F_{i}\left(x_{i}^{p}\right)\right\|_{2}^{2}} wr?=μ+∥?Fi?(xip?)∥22?μ?其中μ∈R+\mu \in \mathbb{R}^{+}μ∈R+,∥?Fi(xip)∥22\left\|\nabla F_{i}\left(x_{i}^{p}\right)\right\|_{2}^{2}∥?Fi?(xip?)∥22?圖像點xipx_{i}^{p}xip?處的梯度的L2L2L2范數。最后的誤差權重就是由這兩個權重相乘。
以上就完成了對相機的光度的標定,這個標定過程是假設場景點的輻射度不變,在完成標定后我們接著需要對場景點的輻射度進行更新,這就好比SLAM中需要對相機位姿進行調整的同時也需要對空間點進行調整,代價函數對輻射度的雅克比矩陣定義為:Jp=(?r?Lp)\boldsymbol{J}^{p}=\left(\frac{\partial r}{\partial L^{p}}\right) Jp=(?Lp?r?)同樣采用LMLMLM法進行更新,那么更新量為:ΔL=JpTWprp(1+λ)JpTWpJp\Delta L=\frac{\boldsymbol{J}_{p}^{T} \boldsymbol{W}_{p} \boldsymbol{r}_{p}}{(1+\lambda) \boldsymbol{J}_{p}^{T} \boldsymbol{W}_{p} \boldsymbol{J}_{p}} ΔL=(1+λ)JpT?Wp?Jp?JpT?Wp?rp??那整個光度標定的流程就是不斷進行上述優化過程的迭代。
文中還提到,在實際應用的過程中,算法分為離線模式和在線模式:
在離線模式中,對于大的圖像序列比較工程的一個解決方案是可以圖像序列劃分為多個子序列,分別對子序列進行標定后再進行融合。
在在線模式中,由于漸暈效應因子和相機響應函數需要多幀圖像才能進行魯棒標定,而曝光時間可以逐幀標定,因此,在在線模式標定過程中,我們將曝光時間這個變量進行解耦:E=∑i=1M∑p∈Piwip(f?1(Oip)V(xip)?eiLp?r(ei,Lp))2E=\sum_{i=1}^{M} \sum_{p \in P_{i}} w_{i}^{p}(\underbrace{\frac{f^{-1}\left(O_{i}^{p}\right)}{V\left(x_{i}^{p}\right)}-e_{i} L^{p}}_{r\left(e_{i}, L^{p}\right)})^{2} E=i=1∑M?p∈Pi?∑?wip?(r(ei?,Lp)V(xip?)f?1(Oip?)??ei?Lp??)2其中f?1f^{-1}f?1和VVV分別是當前幀相機轉換函數的逆函數和漸暈效應因子(已知的),而且上式退化成一個線性方程,可以非??焖俚那蠼狻?/p>
3. KLT光流法
其實這里我有疑問,光流法的基礎也是光度不變形,在沒有進行光度標定的時候利用光流法進行追蹤,再利用追蹤到的關鍵點進行光度標定,有點類似于先有雞還是先有蛋的問題。不過實驗表明這樣做效果是好的。
上述光度標定效果如何很大程度上取決關鍵點是否追蹤成功,因此本文提出的KLT光流法其實就是在基礎的KLT上進行了多方面魯棒性的提升:
(1)聯合優化跟蹤更新和幀間增益比
這種方法可以使用Schur補碼有效地完成優化,參考《Joint Radiometric Calibration and Feature Tracking for an Adaptive Stereo System,2010》,效果如下圖所示:
上面兩張圖是在原始的KLT算法下跟蹤的效果,下面兩張圖是添加聯合優化后的跟蹤效果。
(2)均勻采樣關鍵點
為了能夠有效恢復漸暈效應因子,需要實現關鍵點的均勻分布,采用的方式是將圖片劃分為網格,每個網格中采樣固定數量的關鍵點。
(3)錯誤跟蹤濾波器
通過前后向跟蹤誤差對跟蹤的關鍵點進行濾波,具體實現參考《Forward-Backward Error: Automatic Detection of Tracking Failures,2010》,效果如下圖所示:
左圖是沒有進行濾波的,右圖是進行過濾波的
(4)提取圖像塊
在跟蹤的關鍵點周圍提取圖像塊,這樣做的好處一方面是可以提供足夠多的場景點但不需要增加圖像特征,另一方面是獲得較小的跟蹤誤差。
4. 實驗結果
下圖(a)(b)(c)分別是相機響應函數,漸暈效應因子以及曝光時間的標定和真值對比,這效果也太好了吧…圖(d)是優化過程中代價函數的變化趨勢。
下圖是分別是沒標定和標定后再同一個數據集上運行的效果,牛逼…
最直觀的還是看實驗視頻就好了,那么這篇文章總結就到這兒了,方法很明了,效果很牛逼,或許這就是大佬吧,有問題歡迎交流~
總結
以上是生活随笔為你收集整理的论文阅读——《Online Photometric Calibration of Auto Exposure Video for Realtime Visual Odometry and SLAM》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文阅读——《Exposure Cont
- 下一篇: 图像传感器与信号处理——SFR算法/IS