鄒星明,劉艷麗
(1.四川大學(xué)計算機學(xué)院,成都610065;2.四川大學(xué)視覺合成圖形圖像國防重點實驗室,成都610065)
陰影為人眼理解自然場景提供了重要的視覺提示,例如估計光源的位置,對象的組成和距離以及對象與其周圍環(huán)境之間的空間關(guān)系。在增強現(xiàn)實(AR)領(lǐng)域中,為了確保合成物體與真實物體之間的照明一致性,模擬真實對象與合成對象之間的陰影交互是重要環(huán)節(jié)。從實時視頻中檢測真實陰影則是模擬陰影交互的第一步。目前已經(jīng)提出了各種基于圖像的用于檢測具有靜態(tài)或動態(tài)背景的實時視頻中的陰影的方法,但現(xiàn)有的大多數(shù)方法旨在檢測固定視點下捕獲的監(jiān)視視頻中的陰影。從固定視點與移動視點下的視頻進(jìn)行檢測陰影的關(guān)鍵區(qū)別是,具有固定視點的視頻很容易獲取背景參考圖像,然后利用背景差分法對陰影進(jìn)行檢測和識別;而對于移動視點的視頻,不存在參考圖像。我們還意識到利用深度學(xué)習(xí)技術(shù)從單幅圖像檢測陰影的方法即使在處理復(fù)雜紋理時也取得了很大的成功。但是,單幅圖像獨立檢測陰影往往會喪失視頻所具有的時間和空間一致性,因此在圖像噪聲和光照變化時而導(dǎo)致檢測結(jié)果不穩(wěn)定。所以,相對于固定視點視頻和單幅圖像檢測,移動視點下的實時陰影檢測更具有挑戰(zhàn)性。
為了解決以往方法的局限性,本文提出一種新穎的框架,用于從移動視點下的視頻中實時對室外陰影進(jìn)行檢測??蚣苁紫葘⑤斎胍曨l中的每一幀分割為跟蹤區(qū)域(TR)和新進(jìn)區(qū)域(ER)。前者指前后幀的公共場景區(qū)域,通過光流計算可從前一幀得出后一幀的跟蹤區(qū)域;后者指由于攝像機的移動,被新引入當(dāng)前幀的場景區(qū)域。然后,框架將利用光流跟蹤TR 中的陰影邊緣,且使用sigmoid 陰影邊緣模型校正,并提取陰影邊緣特征實現(xiàn)動態(tài)檢測ER 中出現(xiàn)的陰影邊緣,且使用空間布局約束消除偽影。最后使用檢測的陰影完成AR中的陰影交互效果。
本文的主要內(nèi)容有:
(1)提出了一種新的實時框架,用于檢測在移動視點下捕獲的戶外實時視頻中的陰影;
(2)提出了一種基于灰度值的陰影邊緣模型,該模型分析了從候選陰影邊緣周圍的梯度方向得出的特征,以進(jìn)行精確的陰影跟蹤和檢測。
(3)引入了一種自適應(yīng)學(xué)習(xí)策略,該策略不存在第三方訓(xùn)練數(shù)據(jù)集進(jìn)行陰影檢測所產(chǎn)生的依賴性,這對于視頻場景照明變化也很可靠。
(4)開發(fā)了一種集成解決方案,可以成功地模擬真實對象與虛擬對象之間的陰影交互,從而可以顯著增強AR 應(yīng)用程序所生成場景的真實感。
目前主流的室外陰影檢測分為兩大類:基于靜態(tài)圖像和基于視頻的檢測算法
從單幅圖像進(jìn)行陰影檢測在圖像處理和計算機視覺鄰域已經(jīng)有大量研究[1-6,18]。文獻(xiàn)[1]研究了太陽和天空下陰影邊界的特征。他們發(fā)現(xiàn)室外陰影的清晰度與遮擋物的高度以及陽光的入射角之間的關(guān)系。文獻(xiàn)[2]提出了一種基于局部邊緣的模型,并結(jié)合了基于水平集的方法來描述軟陰影的硬邊緣和軟邊緣。文獻(xiàn)[6]利用日光和天光的光譜特性來檢測室外陰影邊界。
鑒于單幅圖像提供的信息有限,研究人員已嘗試學(xué)習(xí)從大型數(shù)據(jù)集中提取的高維特征以導(dǎo)出補充信息。例如,Huang 等[1]從135 張圖像的數(shù)據(jù)集中提取35D 特征,以訓(xùn)練AdaBoost 分類器來檢測圖像中的地面陰影。最近,KHan 等[7]使用多個卷積深度神經(jīng)網(wǎng)絡(luò)(ConvNets)學(xué)習(xí)超像素級的陰影特征以及優(yōu)勢圖像邊界。由于深度學(xué)習(xí)技術(shù)的飛速發(fā)展,從單幅圖像進(jìn)行陰影檢測在處理復(fù)雜紋理方面取得了巨大的成功[5,8-9]。然而,由于圖像噪聲和光照變化,單幅圖像陰影檢測方法很難獲得實時視頻的穩(wěn)定陰影檢測結(jié)果。
基于視頻的檢測算法較于靜態(tài)圖像更具有困難性。在視頻監(jiān)視研究領(lǐng)域,為了促進(jìn)對象檢測,已經(jīng)開發(fā)了許多算法來檢測實況視頻中行駛的汽車或行人所投射的陰影[10-13]。這些方法大多數(shù)都是基于背景差分的思想。經(jīng)典過程包括以下三個步驟,包括:(1)學(xué)習(xí)背景參考圖像;(2)將圖像分割成前景和背景區(qū)域;(3)根據(jù)陰影的形狀,邊界或紋理特征從前景區(qū)域識別陰影。盡管運動陰影檢測已取得顯著進(jìn)展,但是基于背景差分的那些方法僅限于處理在固定視點下捕獲的視頻,該視頻適合處理監(jiān)視視頻,但不適用于具有移動視點的視頻,因為沒有參考圖像可用。
本文框架首先將當(dāng)前幀分為跟蹤區(qū)域(TR)和新進(jìn)區(qū)域(ER)。具體而言,通過光流算法[14]從當(dāng)前幀減去跟蹤的前一幀的邊界框來計算ER。然后從前一幀跟蹤TR 中的陰影邊緣,并從ER 中的Canny 邊緣區(qū)分陰影和非陰影邊緣。為了解決不可避免的光流跟蹤誤差,引入了基于強度的陰影邊緣sigmoid 模型進(jìn)行校正。為了檢測ER 的陰影邊緣,從TR 中提取正陰影特征和負(fù)陰影特征,然后利用自學(xué)習(xí)的貝葉斯分類器進(jìn)行預(yù)測,并且新進(jìn)陰影的空間布局約束可進(jìn)一步用于消除預(yù)測的錯誤陰影邊緣。
為了保證視頻陰影檢測的穩(wěn)定性,以及避免重復(fù)檢測,我們首先使用光流算法把上一幀的陰影邊緣跟蹤至當(dāng)前幀作為TR 的陰影邊緣結(jié)果。但光流算法都具有不可避免的計算誤差,因此對于較長的視頻,隨著幀數(shù)的增加,跟蹤的陰影邊緣與實際陰影邊緣的偏差巨大(圖3 的第一行)。正如文獻(xiàn)[15]中采用的方法,我們嘗試在跟蹤的陰影邊緣附近直接使用Canny 邊緣來代替。但是,我們發(fā)現(xiàn)使用Canny 邊緣檢測器很難檢測到軟影的完整邊界。此外,由于Canny 邊緣對閾值敏感,對同一視頻不同幀的邊緣檢測結(jié)果不一致,從而導(dǎo)致相鄰幀之間的邊緣抖動。并且使用附近的Canny邊緣替換跟蹤的陰影邊緣會引入錯誤的陰影邊緣,這些陰影邊緣會隨光流跟蹤一起傳播并產(chǎn)生較差的結(jié)果。
圖像中陰影的灰度值共同取決于基礎(chǔ)場景的幾何形狀、陰影所投射表面的紋理以及光照條件。為了檢查軟影中的輻射變化,文獻(xiàn)[2]研究了不同類型的投射表面(包括平坦、彎曲、簡單和復(fù)雜的紋理表面)上沿著陰影邊緣的梯度方向的強度變化,并發(fā)現(xiàn)整個強度變化在投射表面局部平坦并且在軟陰影內(nèi)具有相似的紋理的前提下,陰影邊緣非常接近S 型函數(shù)。
受到上訴工作的啟發(fā),我們研究了沿陰影邊緣梯度方向像素強度的變化。首先我們使用雙邊濾波器平滑每一個視頻幀,然后將濾波后的圖像從RGB 顏色空間轉(zhuǎn)換至HSV 顏色空間,接著從V 通道執(zhí)行以下操作。對于由Canny 邊緣檢測器檢測到的邊緣像素p,我們將其梯度方向表示為G(p),然后在G(p)的每一側(cè)取k 個像素灰度值。為了減少紋理對灰度值的影響,計 算 相 對 偏 移 向 量N2k+1(p)=((Ip-k-...,(Ip-...,(Ipk-,其中p-k和pk分別表示梯度方向上距離像素p 有k 個像素距離的點,Ip表示像素灰度值,Iˉ表示2k+1 個像素灰度值的平均值。在實驗中,對于640×360 分辨率的視頻,k 通常取5。
我們以G(p)為橫坐標(biāo),N2k+1(p)為縱坐標(biāo),像素p為原點,如圖1 所示,陰影邊緣呈現(xiàn)平滑的S 型曲線,而非陰影邊緣則呈現(xiàn)階梯函數(shù)曲線。我們根據(jù)離散點進(jìn)行擬合,發(fā)現(xiàn)陰影邊緣可以很好地擬合成sigmoid 函數(shù),公式如下:
f(x)=a/(1+exp(bx+c))+d (1)
根據(jù)函數(shù)性質(zhì),當(dāng)f′(x0) 取極值,即x0=-c/b 是G(p)的中點。依據(jù)f′(x)的凹凸性,我們?nèi)′(x)的兩個拐點xl和xr,定義ω= ||xl-xr為軟影的寬度,τ 為擬合誤差。從圖1 可以看出,陰影邊緣有較寬的軟影的寬度和較低的擬合誤差,這些信息都可運用在后續(xù)ER 陰影檢測當(dāng)中。
我們根據(jù)陰影邊緣sigmoid 模型,對跟蹤陰影邊緣上的像素x,我們通過擬合灰度變化找到與其對應(yīng)曲線的中點,也即精確陰影像素x?。對于少部分因為校正而丟失的陰影邊緣,我們使用漫水算法得到完整的陰影區(qū)域,然后再提取邊緣以補全丟失的陰影邊緣。圖2 的第一行顯示光流跟蹤結(jié)果,第二行顯示了所有跟蹤陰影邊界的精確結(jié)果。顯然,與x 相比,x?的位置更精確,這表明從陰影邊緣附近的任何初始像素開始,我們的方法都能夠精確地定位它。這樣,所提出的方法校正了每幀的陰影邊緣的偏離,并且累積了相對較少的跟蹤誤差,從而導(dǎo)致更準(zhǔn)確和穩(wěn)定的跟蹤性能。
由于新進(jìn)區(qū)域中存在因移動視點而被引入場景的陰影邊緣,為了能夠檢測到新進(jìn)場景中的陰影,我們首先把TR 中的已被校正的陰影邊緣作為正樣本,其余Canny 邊緣作為負(fù)樣本,然后構(gòu)造幾組特征向量放入貝葉斯分類器中進(jìn)行訓(xùn)練。
第一組特征是像素梯度方向的2n+1 個灰度值。沿著邊緣的梯度方向的灰度值分布提供了區(qū)分陰影和反射邊緣的有效提示。為了消除圖像噪點,對于TR 中的正樣本像素p,我們提取N2n+1(p?),p?是擬合后的中點;而對于負(fù)樣本,我們?nèi)∑?n+1 個原始灰度值作為負(fù)特征。在實驗中,n 取值為5。
第二、三組特征如第一組類似,取像素梯度方向的Lab 顏色空間的a、b 通道的2n+1 個強度值和。這兩組特征是為了減少不同紋理給正負(fù)樣本所帶來的影響。
第四組特征是不同顏色通道的梯度方向。文章[1]提出,對于反射率局部恒定的陰影邊界處的像素,圖像梯度在所有顏色通道中應(yīng)具有相同的方向,而對于其他非陰影邊緣則沒有此特征。對RGB 三種顏色計算梯度方向向量γ=(γrg,γgb,γbr),其中γrg=min( ||γr-γg,2π- ||γr-γg),γr、γg、γb分別是RGB 通道的梯度方向。
第五組特征是擬合曲線后的軟影寬度ω 和擬合誤差τ。如圖3 所示,陰影邊緣的軟影寬度大多數(shù)處于1~3 個像素寬度左右,而非陰影邊緣的寬度則集中于1個像素以內(nèi)。對于擬合誤差來說,陰影的擬合誤差比非陰影的擬合誤差大部分更小。因此,軟影寬度和擬合誤差也是區(qū)分陰影和非陰影的重要特征。
圖1 陰影邊緣和非陰影邊緣擬合結(jié)果
圖2 第一行光流結(jié)果,第二行校正結(jié)果,第三行擬合曲線
圖3 擬合誤差和軟影寬度的統(tǒng)計
從TR 中提取了正陰影特征和負(fù)陰影特征后,現(xiàn)在我們可以使用這些特征來訓(xùn)練貝葉斯分類器。為了獨立控制像素值變化和擬合誤差以及軟影寬度的影響,我們設(shè)計了兩個貝葉斯聯(lián)立模式。第一個貝葉斯分類器考慮像素值變化描和色度特征u=(N2n+1,+1,,本文實驗中n=5;第二個分類器考慮擬合誤差和軟影寬度v=(τ,ω)。最終ER 中邊緣像素i 是陰影的概率由如下加權(quán)分類器確定:
log P(yi|Fi)=log P(yi|ui)+λ log P(yi|vi) (2)
本文實驗中根據(jù)不同場景適當(dāng)修改λ 值,其默認(rèn)值為10。
圖4 陰影的空間布局信息
即使我們從TR 的校正后的跟蹤陰影邊緣中學(xué)到了各種特征,但由于室外場景中的復(fù)雜紋理,按像素分類仍然存在誤檢測的情況。因此為了細(xì)化像素分類,應(yīng)該利用新陰影的高級信息。這里我們加入陰影的空間布局信息進(jìn)行優(yōu)化。如圖4 所示,新進(jìn)陰影我們分為兩類,一類是連接陰影,一類是獨立陰影。前者是ER 中陰影區(qū)域和TR 陰影區(qū)域聯(lián)通的陰影,后者是新進(jìn)入場景的陰影區(qū)域且不和TR 的陰影區(qū)域聯(lián)通。對于ER 中每個陰影邊緣l,我們根據(jù)梯度方向選擇種子點,然后利用漫水填充算法得到區(qū)域Sl;同理可以由TR 中的陰影邊緣得到陰影區(qū)域STR。?Sl是Sl的邊界集合,B 是視頻幀的邊界。根據(jù)公式(3),我們以陰影邊緣yl為單位進(jìn)行判斷來消除偽影。本文實驗中ε1和ε2都設(shè)置為0.8。
本文實驗視頻來自手持?jǐn)z像機或者手機拍攝的視頻。首先,我們和最新的兩種光流算法EpicFlow[16]和FlowNet2.0[17]進(jìn)行比較。圖5 可以看到隨著視頻幀的推移,由于光流的累計誤差所導(dǎo)致光流的結(jié)果逐漸偏移,甚至導(dǎo)致邊緣結(jié)果完全失效。本文算法對跟蹤區(qū)域的陰影可以準(zhǔn)確且穩(wěn)定的跟蹤。
圖5 從左至右依次是視頻的第4、35,175,442幀
另外,本文算法還和單幅圖像陰影檢測算法Tian等[6]、最新的基于深度學(xué)習(xí)的陰影檢測算法DSDNet[9]進(jìn)行比較。如圖6 所示,單幅圖像陰影檢測算法因為忽略了視頻的時間和空間一致性的信息,存在不穩(wěn)定的結(jié)果。本文算法則考慮了視頻前后幀的連續(xù)性,則能保持很好的穩(wěn)定性,以及使用自適應(yīng)學(xué)習(xí)的貝葉斯分類器也能很好地檢測出新進(jìn)的陰影。
最后我們選取幾個場景進(jìn)行陰影檢測和跟蹤,并且應(yīng)用于AR 中,其實驗結(jié)果和AR 效果如圖7 所示,實驗結(jié)果驗證了本文算法的有效性和準(zhǔn)確性,并且對AR 中的陰影交互效果起到了明顯的增強效果。
圖6 從左至右依次是視頻的第11,12,79,80幀
圖7 第一行為本文算法的檢測結(jié)果,第二行是AR中的陰影交互效果
本文算法是通過CUDA 與GeForce GTX 980 顯卡在GPU 上實現(xiàn),其中軟件環(huán)境為Clion2018 +OpenCV3.0。對于輸入的視頻,算法的時間消耗取決于視頻分辨率和每幀中的陰影大小。平均而言,對于分辨率為640×360 的視頻,未優(yōu)化代碼的平均時間為每幀39.73 毫秒,即25fps,達(dá)到實時的效果。
本文提出了一種新的實時框架,用于從移動視點下拍攝的視頻中檢測室外陰影。該方法特別適合于模擬AR 應(yīng)用程序中的陰影交互。為了考慮移動視點,提出框架首先通過光流跟蹤將當(dāng)前幀分為跟蹤區(qū)域和新進(jìn)區(qū)域。然后,框架將基于灰度值的邊緣模型用于優(yōu)化最初跟蹤的陰影邊界。進(jìn)一步采用了一種自學(xué)習(xí)策略,該策略從TR 中已跟蹤的陰影邊界中識別陰影特征。最后,另外利用新進(jìn)陰影的空間布局約束來去除偽影。各種具有挑戰(zhàn)性的場景結(jié)果表明,提出的框架能夠檢測類型不斷變化的陰影,具有復(fù)雜紋理的背景上投射的陰影以及高精度的快速移動陰影。最后利用陰影結(jié)果成功為AR 應(yīng)用程序生成了場景交互的逼真的陰影。
本文算法提供了一個檢測室外陰影并應(yīng)用于AR程序的框架。但依然存在改進(jìn)的地方,例如視頻的首幀我們需要利用已有的單幅圖像的陰影檢測算法[6,9]作為初始化步驟,初始化可能需要人工的調(diào)整;以及在陰影被遮擋的場景中,陰影遮擋導(dǎo)致光流算法以及sig?moid 模型失效,因此本文算法并不適合此類場景。未來我們將針對這些問題,繼續(xù)對框架進(jìn)行優(yōu)化。