楊小利,馮 杰,馬漢杰,董 慧,王 健
(浙江理工大學 信息學院,杭州 310018)
虛擬視點合成有著廣闊的應用前景,可應用于3D 立體游戲、虛擬現實等方面[1].基于深度圖的繪制(Depth Image Based Rendering,DIBR)因其繪制速度快、網絡傳輸負擔小、虛擬視點不受限等優點,已經成為虛擬視點合成的關鍵技術.DIBR 技術利用參考視圖及其對應的深度圖來生成左右虛擬視點圖像[2],但生成后的虛擬視圖存在著裂縫、偽影和大面積空洞的問題,這些問題降低了虛擬視點圖像的質量,尤其是大面積空洞[3].
虛擬視圖中的大面積空洞修復一直是個熱點,同時也是一個難點.大面積空洞通常采用圖像修復技術進行修復,基于樣本塊的修復方法是圖像修復的經典算法[4],很多圖像修復算法都是在該算法的基礎上做出相應的改進得來,例如文獻[5,6].基于樣本塊的方法的核心思想是不斷迭代地用相似的非空洞區域塊來替換空洞區域的圖像塊.該方法對于無結構和紋理平緩變化的空洞區域具有較好的修復效果,但其修復后的空洞區域缺乏視覺語義概念.且圖像已知區域沒有空洞所需的信息,則該方法無法填充在視覺上合理的空洞.現有的部分卷積神經網絡(PUnet)[7]以逐層抽象的方式提取圖像的特征映射,從而使修復后的空洞區域具有語義感,但其沒有定位到更精細的紋理,修復后的邊緣部分存在著過度平滑,甚至輕微失真.虛擬視圖中的大面積空洞通常出現在前后背景交界處,即邊緣處.很明顯PUnet 網絡對于虛擬視點圖像中的空洞修復效果并不友好.
針對傳統圖像修復算法修復空洞后圖像存在的語義缺失問題,以及現有的PUnet 網絡修復后的空洞邊緣失真,本文提出了基于邊緣信息的部分卷積網絡(Edge-PUnet)的修復方法.本文方法總體流程如圖1所示.

圖1 本文方法流程圖
本文3D 變換使用的是從中心圖像生成左右虛擬視圖的并行攝像機配置,在該配置下,任何三維點投影到左右虛擬視圖的垂直坐標與投影到中心圖像(即參考視圖)的垂直坐標是相同的[8].左右虛擬視圖的橫坐標可由參考視圖的橫坐標按視差進行移位得到.根據視差與深度的關系[9],圖像中每個像素點的視差可由參考視圖的深度圖計算出,如式(1)所示.

其中,Parallax[i,j],Depth[i,j]分別是參考視圖中每個像素的視差值和深度值,i和j分別是圖像的橫縱坐標,127 為零視差平面,255 為最大視差,在本文中,α設置為15.
虛擬視圖以整數位置上的像素值為有效值,因此對移位后的像素坐標進行四舍五入取整,取整的像素通常是離整數位置上最近的映射像素,左、右虛擬視圖橫坐標移位如式(2)和式(3)所示.

在式(2)和式(3)中,∏表示向下整,i,iL,iR分別是參考視圖、左虛擬視圖和右虛擬視圖的像素橫坐標.根據視差估計移位得到的左右虛擬視圖如圖2所示.

圖2 DIBR 技術生成的虛擬視圖
在參考視圖向虛擬視圖映射的過程中,用矩陣標記虛擬視圖中的像素是否為映射點,從而生成左右虛擬視圖掩膜,生成的左右虛擬視圖掩膜如圖3所示.
在虛擬視圖繪制的過程中,生成了對后期空洞修復產生影響的裂縫和偽影,修復空洞前需對這些偽像進行去除,裂縫在虛擬視圖中的寬度為一個像素大小,且出現在相同的紋理區域下[10].因此本文從水平和垂直兩個方向對裂縫進行鄰近像素賦值以去除裂縫,其中水平方向上按照左右虛擬視圖映射方向的不同,分別從左側和右側進行鄰近像素賦值,裂縫去除效果如圖4所示.對于偽影,則對虛擬視圖掩膜進行膨脹,作用于虛擬視圖的空洞,從而消除空洞邊界處的偽影,偽影去除效果如圖5所示.

圖3 左右虛擬視圖掩膜

圖4 裂縫去除效果

圖5 偽影去除效果
去除這些偽像后,虛擬視圖中僅含有空洞,如圖6所示.然后利用本文提出的Edge-PUnet 網絡修復虛擬視圖中的大面積空洞.

圖6 空洞虛擬視圖
虛擬視圖中的空洞通常是由于三維場景中物體之間的遮擋關系引起的[11,12],因此空洞通常出現在前后背景交界處,即邊緣處.如圖6所示.邊緣是圖像信息最集中的地方,包含著紋理、結構等豐富的信息[13].基于此,本文在PUnet 網絡中設計了邊緣檢測器,以使網絡重點學習圖像的邊緣部分.
虛擬視圖中的空洞通常是縱向的,因此本文的邊緣檢測器主要檢測的是圖像中的垂直邊緣部分,邊緣檢測器檢測步驟如下:
(1)對輸入的圖形進行灰度化操作,將彩色圖轉換為灰度圖,其轉換過程如下所示:

其中,R、G、B為彩色圖像三通道中像素的值.
(2)利用高斯濾波器對灰度圖進行卷積操作以濾除噪聲,防止噪聲引起的錯誤邊緣檢測.噪聲濾除過程如下所示:

其中,H為高斯濾波器核,計算如下所示:

式中,i和j為像素的橫縱坐標,(2k+1)為高斯濾波器核的大小,設置K為2,σ=1.5.
(3)利用Sobel 算子檢測出圖像中垂直方向上的邊緣,其檢測依據是每個像素點的方向,如下所示:


在上述公式中,Sx,Sy分別是x和y方向上的Sobel 算子,Gx,Gy分別是像素點水平和垂直方向的梯度值.
(4)利用膨脹函數對其存在斷點的垂直邊緣進行連接,并對處理過后垂直邊緣圖進行二值化,生成由0 和1 組成的二進制邊緣掩膜圖.
最終生成的二進制邊緣掩膜如圖7(b)所示.PUnet網絡需要大量的數據集進行訓練,若小將產生過擬合.為了擴大數據集,本文對檢測出來的邊緣掩膜進行隨機保存,在保存的過程中,邊緣寬窄和高低是隨機調整的.將隨機邊緣掩膜與圖片作用生成邊緣隨機缺失圖像,彩色圖、隨機邊緣掩膜傳入PUnet 網絡中.

圖7 邊緣檢測器檢測邊緣
PUnet 網絡架構如圖8所示,PUnet 網絡結構主要包括編碼器和解碼器兩個部分,編碼器包含8 個部分卷積層,每次卷積后對特征圖進行1/2 的下采樣(即最大池化),然后對數據進行歸一化處理,并對其進行非線性變換,非線性函數為ReLU.解碼器包含8 個最近鄰上采樣層,上采樣層對得到的特征進行解碼,得到圖像和掩膜的特征圖,將得到的特征圖在通道維上與編碼器對應的圖像和掩膜的特征圖分別連接(即Skip-Connection),然后對解碼器和編碼器的特征圖分別進行卷積并相加,跳過連接之后對數據進行歸一化處理和非線性變換,非線性函數為LeakyReLU.

圖8 PUnet 網絡結構簡圖
在PUnet 網絡中,編碼器利用部分卷積層逐層提取圖像的語義特征,即物體與其周圍環境之間的關系,最大池化層用來降低特征圖的維度和保留有效的紋理信息,池化層提高了特征的空間不變性,在池化的過程中編碼器逐步丟失了背景信息,解碼器階段上采樣逐步將編碼器得到的高級語義特征圖恢復到原圖片的分辨率,并通過Skip-Connection 融合來自于編碼器的低級特征.這使修復的圖片的邊緣、紋理等信息更加精細.
傳統的卷積神經網絡修復空洞時,需要對空洞區域進行初始化,空洞的初始值一般設置為127.5 或者圖片的平均值.設置了初始值的空洞區域和非空洞區域被網絡同等對待,混淆了網絡,進而導致空洞修復的效果受空洞初始值的影響.PUnet 網絡部分卷積層采用的是部分卷積運算,即當前卷積核窗口下的輸出值僅取決于掩膜中未隱藏的輸入,也就是說卷積操作時會忽略空洞區域的值,只利用非空洞區域的值進行卷積操作,從而消除了以往的卷積神經網絡對空洞進行卷積操作所造成的不良影響.每次部分卷積之后更新空洞掩膜,即在當前卷積核窗口下,若卷積不能將輸出設定在至少一個有效的輸入值上,那么將該卷積核窗口下的掩膜值設為0,隨著卷積的深入,掩膜中為0 的像素越來越少(即掩模中空洞越來越小),直到個數為0,輸出結果中有效區域的面積越來越大.
PUnet 網絡的損失函數包括4 種,分別是逐像素求差損失、感知損失、風格損失和總變差損失.逐像素求差公式如式(10)和式(11)所示,該損失函數可以衡量生成圖片跟真實圖片之間的差異.但是并不能捕捉生成圖像跟真實圖片的感知和語義差別,文獻[14]表明高質量的圖像可以通過建立感知損失函數并使損失函數最小化來生成,生成的圖像在細節和邊緣上表現的更好,因此損失函數中加入文獻[15]引入的感知損失,如式(12)所示.為了恢復生成圖片的顏色紋理和精確的形狀,同時減少邊界處的偽影,加入了風格損失函數,如式(13)和式(14)所示.總變差損失函數是對空洞區域中單個像素擴張進行的平滑懲罰,如式(15)所示.

式中,Iout表示網絡預測圖像,Igt表示真實圖像,NIgt表示真實圖像中的像素個數,‖·‖1表示求L1距離,M是當前卷積核窗口在二進制隨機邊緣掩膜上的像素值,Lh為當前卷積核窗口下掩膜區域的損失,Lv為非掩膜區域下的損失.

式中,Icomp是網絡輸出圖像Iout中非空洞像素直接設置為真實像素得到的.是給定輸入圖像的第P層的激活映射,為的元素個數.


其中,R是空洞區域單個像素的擴張區域,NIcomp為Icomp網絡輸出圖像的像素個數.
總損失是上述損失的組合,各個損失函數的權重由測試圖像所得,如式(16)所示.

本文實驗的數據集為微軟數據集的Ballet 和Breakdancers 視頻序列,其中訓練集、驗證集和測試集圖片數分別為1000、400 和200 張,分辨率為1024×768.在訓練的過程中對該數據集進行旋轉、平移變換、尺度變換等數據增強擴充處理.同時對輸入的圖片進行歸一化處理,并縮放到512×512,以減少網絡訓練所需內存.
本文的實驗是在Linux 平臺下的TensorFlow 框架下進行,并以Keras 為框架的前端.訓練首先加載由ImageNet 訓練而來的VGG16 模型來初始化權重,并采用Adam 優化算法對數據集進行批歸一化處理,采用batch_size=4 將圖片輸入網絡,在數據集上以0.0003的學習率迭代訓練60 000 個周期,每個周期迭代訓練250 次.
本文的虛擬視點圖像是以Ballet 和Breakdancers視頻序列中cam3 視點下的參考圖和深度圖進行DIBR變換得到的.采用主觀評價和客觀評價的方式對空洞修復的效果進行評價.其中客觀評價的指標為峰值信噪比(PSNR)和結構相似度(SSIM).PSNR 是基于像素間的誤差,單位是dB.SSIM 分別從亮度、對比度、結構3 方面度量參考視圖和虛擬視圖的相似性,其取值范圍為[0,1].PSNR 和SSIM 值越大,表示圖像失真越小.
基于樣本塊的修復方法[6]、PUnet 方法[7]和本文方法修復空洞的效果如圖9和圖10所示.從圖中可以看出,當空洞處在紋理平緩變化和結構單一的位置,基于樣本塊的修復方法、PUnet 方法和本文方法對空洞都有著良好的修復效果,修復后的空洞能保持與周圍背景的一致性.在紋理劇烈變化位置處的大空洞處,例如圖9和圖10中前景與背景的交接處,即邊緣處,可以看到基于樣本快方法修復后的圖像邊緣存在著嚴重的失真現象.

圖9 不同方法對Ballet 虛擬視圖修復效果對比

圖10 不同方法對Breakdancers 虛擬視圖修復效果對比
放大其修復后的圖片,如圖11和圖12所示,可以看到基于樣本塊方法修復后的圖片邊緣存著典型的塊效應,且前景一部分像素過渡到了背景區域.這是由于填充的部分是空洞周圍與之相似的紋理塊造成的,而PUnet 方法和本文方法修復后的邊緣比較平滑,其前景像素能夠自然的過渡到背景區域,在高度結構化區域處的空洞,對比PUnet 方法修復的效果,本文修復后的空洞在邊緣細節方面表現的更好.例如,在圖11男聽眾的頭部區域,PUnet 方法修復后的眼睛與手連接區域存在著輕微模糊現象,以及衣領部分被過渡平滑到背景區域,而本文修復后的該處區域結構和邊緣更為清晰,有著更好的視覺效果.

圖12 不同方法對Breakdancers 虛擬視圖修復效果局部放大對比
為做出較為正確的客觀評價,本文分別在Ballet和Breakdancers 視頻序列中cam3 攝像機視點下選取了30 張圖片作為參考視圖,并利用3D 變換技術生成虛擬視點圖像,修復空洞后計算每張圖片的PSNR 和SSIM 值,最后取其平均值.不同方法修復效果的PSNR和SSIM 值如表1和表2所示.從表中可看出,本文的方法修復后的圖像PSNR 和SSIM 值明顯比基于樣本塊方法和PUnet 方法的高,說明本文方法修復后的圖像有著較小的失真,且與真實圖像更接近.同時達到一樣的空洞修復效果,相比于PUnet 方法利用不規則掩膜作用于數據集進行網絡訓練.本文利用邊緣掩膜作用于數據集進行訓練的時間要短.

表1 不同方法修復的PSNR 比較

表2 不同方法修復的SSIM 比較
針對傳統圖像修復算法修復的缺點,以及現有的PUnet 方法修復后的空洞圖像邊緣模糊甚至失真現象,本文提出了一種基于邊緣信息的部分卷積神經網絡方法,在修復虛擬視圖空洞前,本文對虛擬視圖進行預處理,以消除虛擬視圖中裂縫和偽影對后期空洞修復的影響.然后利用提出的Edge-PUnet 網絡修復空洞,相比于傳統的圖像修復方法,本文修復后的空洞區域具有良好的結構和語義信息,相比現有的部分卷積神經網絡,本文修復后的空洞邊緣更加精細.不足的是在修復虛擬視圖過程中沒有考慮到視頻的連續性,這是下一步努力的方向.