劉裕拯
(四川大學計算機學院,成都 610065)
作為具有超廣視角的一種鏡頭,魚眼鏡頭早已融入我們的生活,經其拍攝而得的魚眼圖像由于具有超廣視角,也在監控、安防、醫療、航天、VR、影視制作等方面扮演重要角色。由于科技不斷進步,相機生產成本不斷降低,廉價的民用消費級魚眼相機已經出現,并擁有穩定市場。除前述專業領域外,在短視頻、Vlog、直播等消費領域對魚眼圖像矯正算法又提出了穩定、快速、高質量等新的需求。因此,研究比較魚眼圖像矯正算法具有一定實用價值和意義。
魚眼鏡頭是一種具有超廣視角的鏡頭。與一般的廣角鏡頭、超廣角鏡頭相比,在設計規格上,魚眼鏡頭的焦距更短、視角更廣(如表1)。因此在相同畫幅和像素尺寸的情況下,魚眼鏡頭所拍攝的圖像能夠容納更多的景物信息。

表1
魚眼鏡頭可以看作是一個球面,一副完整的魚眼圖像投影是一個圓形,而相機的CMOS傳感器成像面一般都是矩形,根據魚眼投影圓和成像面的幾何關系,可以將魚眼鏡頭分為三種,它們分別是圓形魚眼、桶形魚眼、全畫幅魚眼。由于這更多地涉及到相機規格而非魚眼鏡頭本身,所以在此不進行贅述。因為圓形魚眼鏡頭的成像是一個完整的圓形,包含全部投影信息,為了研究和行文方便,下文提到的所有魚眼鏡頭,都是圓形魚眼。
對于魚眼鏡頭本身,受限于鏡頭生產工藝,各家鏡頭生產廠商所生產出來的魚眼鏡頭一般都屬于以下四種魚眼鏡頭模型[1],它們分別是:正交投影模型、等距投影模型、等角投影模型、體視投影模型。其中,正交投影模型的映射關系如公式(1)所示:

其中,r表示成像平面上,對象相對于光軸(也就是圖像中心)的距離,f表示該鏡頭的焦距,e是入射光線與光軸的夾角。以下各式與之相同。這種模型的優點在于映射關系較為簡單,所生成的圖像,其中心位置畸變較小,更接近于廣角、超廣角鏡頭所成的像;其缺點在于,所成圖像邊緣位置畸變較大,且該模型能且僅能描述視角小于等于180°的場景,在接近180°視角附近的圖像嚴重失真。
等距投影模型的映射關系如公式(2)所示:

這種模型的優點在于映射關系較為簡單,能夠描述視角大于180°的場景。并且由于保證了角距離的線性關系,該種模型下的鏡頭也被用于測繪。大多數市售平價魚眼鏡頭使用的都是這種模型。
等角投影模型的映射關系如公式(3)所示:

這種模型的優點在于保證了每一個像素在單位魚眼球面上的大小都是相同的,也能描述視角大于180°的場景,并且有比較好的透視效果。缺點在于其映射關系較為復雜,對接近180°視角附近的圖像在壓縮較大,并且通常情況下,這種魚眼鏡頭較為昂貴。
體視投影模型的映射關系如公式(4)所示:

這種模型也可以描述視角大于180°的場景,其優點在于接近180°視角附近的圖像壓縮較小,可以獲得較為理想的邊界圖像。其缺點在于圖像中心部分成像面積較小、畸變較大,而且市售商品也較為昂貴。
由于鏡頭生產工藝等原因,實際圖像并不是嚴格按照魚眼鏡頭光學模型生成的,所以生成的魚眼圖像會包含畸變,畸變一般被分為兩種:徑向畸變、切向畸變[2]。其中,徑向畸變包括枕型畸變和桶型畸變,可以由公式(5)表示:

其中δxr表示在二維平面坐標系中x軸上的徑向畸變距離,δyr表示在y軸上的徑向畸變距離。x、y為實際圖像坐標,r為半徑,k為徑向畸變參數。該公式通過多項式來近似準確的徑向畸變,一般在計算中最多只取到6次。
切向畸變則包括薄透鏡畸變和離心畸變,其中薄透鏡畸變可以由公式(6)表示,離心畸變可以由公式(7)表示。

其中x、y與公式(5)中含義相同,s為薄透鏡畸變參數,p為離心畸變參數。故切向畸變可以表示為這兩者之和。總畸變即為這三者之和。實際應用中,由于切向畸變的影響較小,計算切向畸變的性價比較低,所以通常只計算徑向畸變。
既然魚眼鏡頭是按照一定的規格生產出來的,那么只要通過標定的手段獲得魚眼鏡頭的參數,就可以對該魚眼鏡頭生成的魚眼圖像進行矯正了。相機標定方法中,張正友標定法具有一定代表性[3]。該方法利用了平面棋盤靶標,通過相機在不同位置拍攝不同姿態的多幅形似棋盤的黑白圓點圖像建立圖像上各個像點之間的對應關系,并通過單應矩陣與相機參數矩陣求解鏡頭參數。需要說明的是,張正友標定法本身并不是針對魚眼鏡頭設計的,在一般的相機鏡頭標定中也經常使用,這種方法比較大的缺陷在于,如果鏡頭的視角較大,則效果并不是很好,所以不能用于接近180°的魚眼鏡頭矯正。
針對大視角設備,Scaramuzza等人提出的全方位相機標定法更為可靠,這種方法要求整個相機成像系統是一個中心系統、相機和鏡頭的光軸對齊并且均為軸對稱結構,同時假設不存在鏡頭失真[4]。另外,馮為嘉等人的全方位視覺參數標定方法在傳統標定法的基礎上針對魚眼鏡頭進行了改良[5]。該方法對光軸、鏡面到成像平面距離、徑向畸變參數進行分別標定計算,取得了較好的效果。這些方法都是通過一組特定的圖像經過多項式計算求解相機參數,對映射模型本身并沒有太大改進。
2.1中的方法要求我們必須擁有魚眼相機本身,并且通過相對繁瑣的標定流程獲得相機參數。但是實際情況中,我們可能只能得到一組魚眼圖像的數據集,并且并不能夠完整得知所有圖像的全部拍攝參數。這就要求我們從現成的魚眼圖像中直接求得一個相對可靠的映射關系來對圖像進行矯正。例如通過射影不變性推算畸變前后直線部分的差別進而進行矯正[6],通過對魚眼球面添加經緯映射模型進行矯正[7],通過改進經緯模型添加雙經度映射關系來解決橫縱兩個方向上的畸變等[8]。這些方法通過添加額外的約束條件,達到實現畸變校正的目的。
Kannala等人則通過多項式逼近來進行映射模擬[9],這種方法的好處在于,可以根據實際需要調整多項式的次數,只要增加多項式次數,那么模擬效果就越好;同時由于只有多項式計算并沒有三角函數計算,對機器模擬也相對友好。
需要注意的是這些方法僅僅是對魚眼鏡頭模型的補充,并不是完全獨立的方法,雖然不能獲得精確的相機參數,但是通過添加約束條件或使用多項式逼近方法,在限定條件下往往能取得較好的矯正效果。
現實世界中的光信號在宏觀上是連續的,我們通過相機獲得的數字圖像是離散的,因此不論采用上述哪一種魚眼矯正算法,在進行圖像矯正的過程中都會遇到采樣的過程,這里對采樣和插值進行簡單說明。采樣定理的香農陳述為:對頻率域上帶寬有限的連續信號,當采樣頻率高于周期函數的頻率兩倍及以上時,可以通過離散的采樣樣本恢復出原始的連續信號[10-11]。
這段陳述中,后半段關于采樣頻率的說明較為容易理解,而前提條件則要求被采樣的對象只能是具有傅里葉變換的一類數學函數,這些函數在頻率域上必須擁有有限的帶寬,即其頻率在有限區域以外為零。當不滿足采樣定理時,采樣后的信號樣本在頻率域上就會重疊,在使用這些離散樣本信號恢復連續信號時,就會使得被恢復出來的信號與原始連續信號不同,這種由于樣本頻譜重疊導致信號失真的現象被稱為混疊現象。對相機模型來說,被采樣的光信號在頻率域上是帶寬無限的,因此我們不可避免地一定會遇到混疊,例如在拍攝具有網格狀紋理的物體時,數字圖像上的紋理與原始紋理不一樣即是混疊的一種表現。
為了盡可能地抵抗混疊的發生,我們可以選擇盡量提高采樣頻率,顯然,實際上采樣頻率不可能無限高。因此在有限的采樣頻率下,我們需要人為地補充離散采樣點的數量,這種通過估計增加樣本數量的方法被稱作插值。對相機模型而言,和切向形變一樣,選擇復雜插值算法的性價比并不高,因為被拍攝物體并不是總是擁有較為復雜的紋理特征,所以通常選擇較為簡單的線性插值。
在實際應用中,我們經常通過個人觀感來判斷魚眼圖像是否矯正成功,缺少對魚眼圖像矯正算法效果的客觀評價方法。這里提出一個較為簡單的流程以供參考:
(1)通過不同頻率的三角函數生成帶有較為復雜紋理的原始圖像T;
(2)使用一個固定的魚眼模擬函數將圖像T映射為魚眼圖像F;
(3)使用矯正算法對圖像F進行矯正得到矯正后的圖像C;
(4)對圖像F和圖像C做差,即可評估步驟3中所使用的矯正算法。
本文介紹了魚眼鏡頭的光學模型和魚眼圖像會產生的畸變,同時介紹了一些魚眼圖像矯正算法,并根據混疊理論給出了評估矯正算法的流程以供參考。可以看出魚眼圖像矯正方法已經較為完善,在抗混疊部分由于物理上的不可實現性導致并沒有較新的方法可以參考。另外,也未有和內容識別相關的矯正算法,這使得我們并不能夠只矯正或者增強圖像的一部分,在應用領域上尚有缺失。