DSO之光度標定


光度標定(Photometric Camera Calibration)是DSO(Direct Sparse Odometry)論文中比較特別的一部分。常規的vSLAM不太考慮光度標定的問題。比如基於特征點的vSLAM,由於特征描述一般會有光照不變性,對圖像的亮度值並不敏感。而在直接法(direct method)中,由於姿態估計以圖像的亮度值為出發點,亮度值的准確度會影響算法的精度和穩定性。因此,作者引入了光度標定的概念,利用精細的相機成像模型,標定成像過程中的光度參數,並用這些參數校正圖像亮度值。

由於本人不是光學專業,文中難免有不准確的地方,還望大家不吝賜教。

參考文獻

  1. Direct Sparse Odometry
  2. A Photometrically Calibrated Benchmark For Monocular Visual Odometry
  3. Recovering High Dynamic Range Radiance Maps fromPhotographs
  4. What is the Space of Camera Response Functions?
  5. Wikipedia

相機成像原理

一般而言,相機測量的是場景中的光的輻射度(radiance)。成像過程如下圖[3]。

radiance用來描述物體表面單位面積上的能量分布,和方向有關。

In radiometry, radiance is the radiant flux emitted, reflected, transmitted or received by a surface, per unit solid angle per unit projected area. For example, radiance in direction of the optical axis of a LED is higher than it's radiance at an angle of 15°.

irradiance用來描述物體表面單位面積總的入射能量,和方向無關。比如,用來描述傳感器像元的入射光強(來自於不同方向的環境光的累加)。

In radiometry, irradiance is the radiant flux (power) received by a surface per unit area. Irradiance commonly is used referring to power incident on a surface.

下面詳細分析一下各個模塊的影響。

光學(鏡頭和光圈)

除了大家熟悉的小孔成像模型和畸變模型,還會有暈影(vignetting)。以下摘自wiki。

光學暈影是由一個或多個透鏡的實際尺寸造成的,后方的元件遮蔽了前方的,導致前端透鏡離軸的有效入射光減少,結果是光的強度由圖像中心向周圍逐漸減弱。光學暈影對鏡頭的開口相當敏感,只要適當的調整光圈就可以消除,通常縮小2至3格就可以完全消除。

也就是說,假如拍攝一個亮度非常均勻的物體,圖像中心和邊緣的亮度值並不一致。
如果這些因素都沒有影響,那么從scene radiance到sensor irradiance的轉化是線性的。

快門

快門影響的是曝光時間。自動曝光模式下,不同場景曝光時間並不一樣,會導致同一物體在不同場景下的灰度值產生差異。另外還想提到的是全局快門(global shutter)和卷簾快門(rolling shutter)。全局快門保證所有感光元件的曝光起始時間和間隔是一樣的,卷簾快門並不能保證。因此文獻中一般推薦使用全局快門。

傳感器

傳感器(CCD/CMOS)將每個像元接收到的光子通過一系列處理轉化為亮度值。這里面涉及到光電效應、ADC、DSP等過程。輸入的曝光量和輸出的亮度值之間的關系稱為響應函數(response function)。響應函數一般來說是非線性的,甚至包含人為調整的成分,比如伽馬校正、白平衡、色調、飽和度等。為圖像進行伽馬編碼的目的是用來對人類視覺的特性進行補償,從而根據人類對光線或者黑白的感知,最大化地利用表示黑白的數據位或帶寬。人眼對暗部比較敏感,因此一般選擇提高暗部的分辨率。這些因素會非線性地修正曝光量,因此作者希望通過光度標定來補償它們的影響。

論文解析

下面我們來看看作者在DSO中如何排除這些因素的影響。作者采用的數據集中有兩個鏡頭,一個魚眼一個廣角。上一節提到的三個因素都有影響。

  • 用函數V來表示光學模塊的影響。V是光學模塊的固有屬性,作者用一個權重矩陣(和圖像一樣大)來表示其對每個像元的影響。
  • 用t來表示曝光時間。相機有開啟自動曝光時,每一幀的t都不相同。
  • 用函數G來表示響應函數,其值域是離散的(比如0~255)。G是傳感器的固有屬性。

用B表示不受光學模塊影響的sensor irradiance圖像,I表示輸出的圖像,作者提出的成像模型為(參考文獻1式(2))

標定響應函數

響應函數有幾種常見的參數模型,比如線性、伽馬和基函數。而作者用非參數估計的方法來標定。具體而言,在固定場景下,相機在不同曝光時間下,重復拍照得到一系列圖像。由於場景不變,B在不同圖像中是一樣的,圖像亮度值的差異來源於曝光時間和響應函數。因此,作者構建了一個能量誤差函數,用迭代的方法求解U=G^{-1}。其中待求解變量為B和U。每步迭代中,先用估計的U求解B,然后用更新的B求解U。具體細節參見文獻2第2.3.1節。

實驗中,作者采集了1000幅不同曝光的圖像,其中的5幅見下圖。

文獻2圖3提供了作者標定出的gamma校正曲線。藍色是有gamma校正的結果,綠色是沒有gamma校正的結果。

標定暈影

假設響應函數G已經標定好了。作者通過大量圖像數據,迭代估計V的值。具體而言,從不同角度重復拍攝一個 Lambertian surface,得到一系列圖像。作者選擇了白牆作為Lambertian surface。理想光照下,牆上的每個點在不同角度下的radiance是均勻的,因此B在不同圖像中是一樣的。作者並不要求白牆的亮度均勻,因此B中每個點的值是不一樣的。場景見下圖

利用響應函數的逆得到B'=V*B。作者構建了一個能量誤差函數,用迭代的方法求解V。其中待求解變量為B和V。每步迭代中,先用估計的V求解B,然后用更新的B求解V。具體細節參見文獻2第2.3.2節。

從不同角度拍攝時,白牆上不同位置的三維點相對於鏡頭的位置是不一樣的,暈影的影響也不一樣。因此需要將白牆變換到相機坐標系,引入了姿態估計的問題。作者用了一個AR marker來估計姿態。

文獻2中,作者采集了700幅圖像,其中的4幅見下圖。

文獻2圖4給出了兩個不同鏡頭模組的暈影。

有光度標定時的處理

通過標定V和G,就可以反解出B(參考文獻1式(3))。使用B去做直接法當然要比I准確地多。當然,場景的亮度在不同視角下有差異,這是無法避免的。

一般情形

對於做過光度標定的相機,我們可以用上面的方法處理。對於一般的相機怎么辦呢?作者在估計姿態的同時,還估計圖像校正參數,用於粗略去除響應函數的影響。具體做法是加入一個affine brightness transfer function。個人理解,這個affine brightness transfer function其實是線性響應函數的逆函數。(似乎也可看做是一種歸一化的方式)

這個函數可以校正曝光時間(正比於e^{-a_i})和圖像亮度基底(b_i)的影響。暈影不太好建模,作者暫時沒有考慮。

因此,總的姿態估計的目標函數為

這里的I指的是校正過的亮度值。當沒有光度標定時,G=V=t=1,因此I就是輸出圖像本身。有光度標定時,I=t*B。

作者還加入正則項來平衡有無光度標定的影響。

當有光度標定時,a_i和b_i可以設為0,也可以不為0(相當於額外的校正,正則項限制了它們不會很大)。當沒有光度標定時,lambda_a和lambda_b均為0,也就是說,a_i和b_i不做任何限制,均作為待求參數參與優化。另外,當lambda_a和lambda_b均為無窮時,a_i和b_i必須為0,因此不會優化圖像校正的參數(即參考文獻1圖14中的brightness constancy)。光度標定參數的影響見參考文獻1第4.2小結。

思考:一般情形下,是否可以用伽瑪響應函數代替線性響應函數?只需要一個額外的參數就可以模擬非線性的情形。

小結

推薦大家有時間看一下參考文獻2。想發自內心地吹一波,Engel他們的工作做得真是太細致了。


免責聲明!

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



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