薛 松,王文劍
1.山西大學 計算機與信息技術學院,太原 030006
2.山西大學 計算智能與中文信息處理教育部重點實驗室,太原 030006
隨著互聯(lián)網時代的到來,3D電影、虛擬現實技術等新型科技日益受到人們的追捧。作為計算機視覺的重要分支之一,三維重構技術的發(fā)展得到了前所未有的機遇與挑戰(zhàn)。直接獲取場景的三維信息需要用到專業(yè)的硬件設備,使得其不能廣泛地應用到實際生產領域當中,因此人們重點研究如何利用二維圖像獲取場景的深度信息[1]。根據相機成像時視點數的不同,可以把傳統(tǒng)的深度恢復方法分為兩種:基于雙(多)目視覺的深度恢復方法和基于單目視覺的深度恢復方法[2]。雖然基于雙(多)目視覺的深度恢復方法可以恢復出場景較高精度的深度信息,并且被廣泛應用到多種領域,但是由于需要進行圖像匹配特征點的計算,導致這類算法運算量龐大并且容易出錯[3]。與其相比,基于單目視覺的深度恢復具有計算簡單、實時性高的優(yōu)點,受到了越來越多國內外學者的追捧。其中,最常用的單目視覺線索就是散焦模糊信息[4]。
最典型的利用單目散焦模糊線索獲取深度信息的方法是散焦測距法[5](depth from defocus,DFD),它由Pentland于20世紀80年代首次提出,此后Subbarao[6]等眾多學者對其發(fā)展做出了重大貢獻。DFD通過分析比較多幅圖像中同一物體散焦模糊程度的不同估算出物體的深度信息,需要對同一物體進行多次成像以獲得多幅散焦模糊程度不同的圖像,在實際生產應用中有很大的局限性?;趩畏⒔箞D像的深度信息恢復方法只依靠場景的單幅圖像就可以恢復出場景的深度信息,能夠改進DFD的約束性[7]。這類方法雖然很難,但是近年來也得到了一些學者專家的重視,其主要思想是:首先將一幅散焦圖像看作一幅清晰圖像與有一個已知的點擴散函數模型做卷積的結果,通過反卷積計算求出圖像邊緣處的散焦模糊量,采取深度擴展方法獲得全景的散焦模糊量,從而恢復出全景的深度信息[8]。如文獻[9]首先通過改進相機鏡頭來獲取散焦模糊量的大小,然后采用去卷積的算法求出場景的深度信息。文獻[10]首先使用一個散焦模糊參數已知的高斯點擴散函數模型對一幅散焦模糊圖像進行兩次再模糊處理,得到散焦模糊程度不同的兩幅圖像,然后計算出與原散焦模糊圖像的散焦模糊量的差值的比值,通過比值的最大值進而求出圖像邊緣處的散焦模糊量,最后估算出目標場景的全景深度信息。文獻[11]用已知的高斯點擴散函數模型首先對原始的散焦模糊圖像進行再模糊處理,然后通過求取兩幅圖像邊緣處的梯度比值獲得稀疏深度圖,最后使用深度擴展算法將稀疏深度圖擴展到全景,得到全景深度圖。在此基礎上,文獻[12]使用二維高斯-柯西混合模型取代高斯函數模型近似點擴散函數,提升了傳統(tǒng)算法在深度細微變化方面恢復的精準度。
現有的單幅散焦圖像深度恢復方法經過眾多學者不懈努力,已經能夠估算出場景較為精準的深度信息,但是在這類算法中,散焦模糊量的擴展過程需要大量的執(zhí)行時間,影響了算法的整體效果。此外,這類算法對于圖像中的邊緣不明顯、紋理復雜以及陰影的區(qū)域深度信息的恢復效果并不準確[13]。本文提出的新算法首先利用SLIC(simple linear iterative cluster)算法將原始圖像分割成若干超像素模塊,根據文獻[12]的方法求出圖像中邊緣像素的散焦模糊量,從而推算出各超像素模塊的散焦模糊量,獲得超像素級別的稀疏深度圖,最后利用元胞自動機模型對結果進行優(yōu)化處理,提高精確度。通過大量真實數據的仿真實驗表明,新算法不僅有著耗時短的優(yōu)勢,而且有效改進了上述問題。
超像素模塊的散焦模糊量是依靠圖像邊緣處像素的散焦模糊量計算出來的,因此首先要計算出圖像邊緣處像素的散焦模糊量大小。此處本文采用文獻[12]提出的算法進行計算:首先用一個已知的二維高斯-柯西混合函數模型(Gaussian-Cauchy point spread function,GC-PSF)z(x,y,σ0)對原始的散焦模糊圖像進行再模糊處理,獲得兩幅散焦模糊程度不同的圖像i(x,y)與i1(x,y);然后計算出兩幅圖像中階躍邊緣處梯度幅值之比R;最后根據Rmax估算出圖像邊緣散焦模糊量σ的大小。
本文使用圖像分割技術當中的SLIC超像素分割算法[14]將圖像分割成為M個超像素模塊。在獲得的這些超像素模塊當中,有一些包含著圖像中邊緣處的像素,定義這些超像素模塊為主動超像素模塊。同時,將其余沒有包含圖像中邊緣處像素的超像素模塊定義為被動超像素模塊。
然后,根據圖像邊緣處像素的散焦模糊量計算出主動超像素模塊的散焦模糊量。被動超像素模塊的散焦模糊量可由主動超像素模塊的散焦模糊量通過下文中的方法估算出。
對于任意的主動超像素模塊,其散焦模糊量大小定義為其邊緣處像素散焦模糊量的平均值。數學表達式如下:
對于被動超像素模塊散焦模糊量的計算,可以通過一個關聯(lián)模型根據與其最相鄰相似的主動超像素模塊推算求出。設hi和hj分別是任意被動超像素模塊spi和主動超像素模塊spj的中心,spi與spj相鄰,并且 hi和 hj相鄰。同時,hj∈N(i),N(i)是一個以ni為中心,大小能夠包括主動超像素模塊的窗口。根據被動超像素模塊spi與主動超像素模塊spj之間的歐幾里得距離和顏色相似性可以求出它們之間關聯(lián)的模型φ(spi,spj):
式中,ρh與 ρc為兩個超像素模塊之間歐幾里得距離和顏色權值計算過程中的平衡參數,大小分別為3與0.08。
求出關聯(lián)模型φ(spi,spj)后,根據下述公式可以選擇出與被動超像素模塊spi相關聯(lián)的主動超像素模塊的散焦模糊量大小即為spi的散焦模糊量。
根據上述方法求出超像素模塊的散焦模糊量,可以獲得場景的超像素級別的稀疏深度圖。但是上述計算直接獲得的結果是粗糙的,比如同一物體可能被分割成為若干個不同的超像素模塊,因為同一物體在成像過程中受到的散焦模糊程度應該是一樣的,所以這些超像素模塊的散焦模糊量應該是接近的,但是計算所得的結果卻恰恰相反,所求出的由同一物體分割成的不同超像素模塊的散焦模糊量大小存在很大的差異。針對上述問題,本文使用了元胞自動機模型(cellular automata,CA)[15-17]對圖像進行優(yōu)化處理,提升了結果的準確度。
元胞自動機模型是20世紀50年代由Von Neumann最早提出的,是一種時間、空間都離散的動力學模型。與大多數依據已經定義好的物理函數或方程建立的動力學模型相比,它的特點在于是由一連串規(guī)則構成出來的元胞所組成的。
通過SLIC分割算法獲得的超像素模塊可以看作是元胞自動機模型的元胞,每個超像素模塊的散焦模糊量對應為每個元胞的狀態(tài)值(介于0到255之間)。在本文算法中,超像素模塊之間的相互關聯(lián)關系互不相同,并且取決于它們之間的顏色相似度以及空間距離關系。在元胞自動機模型中,元胞在進行規(guī)則演變時,每個元胞的狀態(tài)值(即每個超像素模塊的散焦模糊量)會受到其他周圍元胞狀態(tài)的影響來更新自身的狀態(tài)。利用一個影響因子矩陣IFrn和一個連貫性矩陣Crn,演變規(guī)則可以定義如下:
式中,St表示元胞現在的狀態(tài)值;St+1表示元胞下一步的狀態(tài)值;I是一個單位矩陣。超像素模塊的初始散焦模糊量即為元胞的初始狀態(tài)值(t=0時S的值),經過K次迭代計算后可以求出元胞最終的狀態(tài)值(即超像素模塊散焦模糊量的最終優(yōu)化值)。影響因子矩陣IFrn表示元胞之間的相互影響關系。超像素模塊i的散焦模糊量大小的更新決定于與之距離最短并且顏色最相近的超像素模塊j(j=[1,M])散焦模糊量的值。對于包含M個超像素模塊的一幅圖像,影響因子矩陣IFrn的元素qij定義如下:
式中,σ1與σ2分別是關于超像素模塊之間距離和顏色相似性的兩個平衡因子。定義一個對角矩陣D=diag{d1,d2,…,dM},對影響因子矩陣IFrn進行規(guī)范化,影響因子矩陣IFrn中第i行元素的和等于di的值。最終,一個行規(guī)范化的影響因子矩陣IFrn可以由以下公式求出:
上文提到,在元胞自動機模型中,一個元胞下一步的狀態(tài)值決定于兩方面因素:元胞目前的狀態(tài)值和其相鄰元胞的狀態(tài)值。如果一個超像素模塊與相鄰的超像素模塊顏色等基本性質完全不同,那么其散焦模糊量的更新直接取決其自身。反之,超像素模塊的散焦模糊量的更新受到其周圍相似的超像素模塊的影響。
這里,ci=1/max(qij),j=1,2,…,M。
通過式(4),元胞自動機模型可以提升超像素模塊之間散焦模糊量的連貫性,并且優(yōu)化了最終全景深度圖的精確度。
為了測試算法的執(zhí)行時間,本文首先在3.60 GHz,4.00 GB RAM的Intel?處理器上進行仿真實驗。使用同一幅圖像對多種算法同時進行測試,并對執(zhí)行時間進行比較。在實驗中,本文算法的圖像預處理階段,設定超像素模塊的分割數量為300,常量α和τ分別取值為0.6和0.2。圖1顯示了新算法相比現有算法在執(zhí)行時間上有了很大程度的提升。
Fig.1 Execution time comparison of proposed method with other methods圖1 本文算法與傳統(tǒng)算法執(zhí)行時間的比較
同時,本文對超像素模塊分割數量對于算法執(zhí)行時間的影響也進行了實驗分析,使用像素大小為800×600的圖像進行實驗,結果如表1所示,說明新算法的執(zhí)行時間受到超像素模塊數量的影響,數量越多,執(zhí)行時間越長。
Table 1 Execution time versus the number of superpixels表1 算法執(zhí)行時間與超像素模塊數量之間的關系
Fig.2 Comparison of proposed method with other methods圖2 本文算法與傳統(tǒng)算法結果的比較
新算法與文獻[11]和文獻[12]中的算法進行比較,為了獲得最好的比較結果,輸入圖像依舊使用與文獻[11]數據集相同的圖像。從實驗結果中挑選出了幾組具有代表性的場景進行比較,如圖2所示,圖(a)的3幅圖像為輸入的真實場景圖像,圖(b)、(c)和(d)分別為文獻[12]、文獻[11]方法以及新算法的實驗結果??梢院苤庇^地看出,通過計算超像素模塊的散焦模糊量,新算法能夠恢復出的良好的目標場景深度信息,并且整體深度恢復真實準確。
同時,新算法改進了傳統(tǒng)算法對于圖像中邊緣不明顯以及紋理特別復雜區(qū)域的深度恢復不準確這一問題。如圖3所示,在Flower圖像中,新算法的結果能夠很好地顯示出花朵從底部到頂部的深度信息變化。圖中,新算法所恢復出的兩個花朵的深度信息是不一樣的,而文獻[12]方法的結果卻是一致的,不符合真實情況。而且,如Flower圖像中紅色方框所標注,在兩朵花交叉處,文獻[12]方法對于花朵下方綠葉的深度信息估計出現明顯錯誤,沒有區(qū)分出花朵下面與花朵深度信息的不同,而新算法卻很好地處理這一問題,得出了跟真實場景相一致的深度信息。在Bird圖像中,雖然兩種算法都有精確度較高的結果,但是新算法在鳥頭處等紋理特別復雜的區(qū)域的處理結果更勝一籌。圖4是Bird圖像中紅色方框標注區(qū)域放大后的效果圖,被框住的區(qū)域中包含很多的邊緣并且紋理特別復雜,但是其真實深度是一致的。通過對比可以看出,新算法在這些區(qū)域的恢復結果更加真實。
Fig.3 Improvement of proposed method in complex texture area圖3 本文算法對于圖像紋理復雜區(qū)域深度信息的優(yōu)化
Fig.4 Zoom in pathes of Bird圖4 Bird圖像的局部放大圖
在進行邊緣檢測時,對于圖像中存在陰影區(qū)域的邊緣提取會存在誤差,因此傳統(tǒng)方法對于圖像中陰影區(qū)域的深度恢復存在一定的困難。但是新算法能夠很好地解決這一問題,可以很好地恢復出場景中陰影區(qū)域的深度信息。在圖5的兩幅圖像中,聚焦點的花朵均存在陰影現象,很明顯,新算法能夠很好地解決這個問題,對于整個花朵的深度恢復結果較為真實,而傳統(tǒng)方法在此處的結果卻出現明顯的錯誤。
Fig.5 Improvement of proposed method in shadow area圖5 本文算法對于圖像陰影區(qū)域深度恢復的優(yōu)化
本文提出了一種新的基于超像素分割的單幅散焦圖像的深度恢復方法。首先將原始圖像通過SLIC算法分割成若干的超像素模塊,然后根據圖像中邊緣處像素的散焦模糊量求得各超像素模塊的散焦模糊量,獲得超像素級別的稀疏深度圖,再利用元胞自動機模型對所求出的稀疏深度圖進行優(yōu)化處理,將誤差降低到最少,最后恢復出真實準確的全景深度圖。通過大量真實數據的仿真實驗表明,相對于傳統(tǒng)算法,新算法不僅有著耗時短的優(yōu)勢,而且對于圖像邊緣不明顯、紋理復雜以及存在陰影現象的區(qū)域能夠恢復出更為準確的深度信息。下一步,將嘗試結合遮擋、紋理等更多的單目深度線索,以提升算法的精準度及實用性。