楊小利,馮 杰,馬漢杰,董 慧,王 健
(浙江理工大學(xué) 信息學(xué)院,杭州 310018)
虛擬視點(diǎn)合成有著廣闊的應(yīng)用前景,可應(yīng)用于3D 立體游戲、虛擬現(xiàn)實(shí)等方面[1].基于深度圖的繪制(Depth Image Based Rendering,DIBR)因其繪制速度快、網(wǎng)絡(luò)傳輸負(fù)擔(dān)小、虛擬視點(diǎn)不受限等優(yōu)點(diǎn),已經(jīng)成為虛擬視點(diǎn)合成的關(guān)鍵技術(shù).DIBR 技術(shù)利用參考視圖及其對(duì)應(yīng)的深度圖來生成左右虛擬視點(diǎn)圖像[2],但生成后的虛擬視圖存在著裂縫、偽影和大面積空洞的問題,這些問題降低了虛擬視點(diǎn)圖像的質(zhì)量,尤其是大面積空洞[3].
虛擬視圖中的大面積空洞修復(fù)一直是個(gè)熱點(diǎn),同時(shí)也是一個(gè)難點(diǎn).大面積空洞通常采用圖像修復(fù)技術(shù)進(jìn)行修復(fù),基于樣本塊的修復(fù)方法是圖像修復(fù)的經(jīng)典算法[4],很多圖像修復(fù)算法都是在該算法的基礎(chǔ)上做出相應(yīng)的改進(jìn)得來,例如文獻(xiàn)[5,6].基于樣本塊的方法的核心思想是不斷迭代地用相似的非空洞區(qū)域塊來替換空洞區(qū)域的圖像塊.該方法對(duì)于無結(jié)構(gòu)和紋理平緩變化的空洞區(qū)域具有較好的修復(fù)效果,但其修復(fù)后的空洞區(qū)域缺乏視覺語義概念.且圖像已知區(qū)域沒有空洞所需的信息,則該方法無法填充在視覺上合理的空洞.現(xiàn)有的部分卷積神經(jīng)網(wǎng)絡(luò)(PUnet)[7]以逐層抽象的方式提取圖像的特征映射,從而使修復(fù)后的空洞區(qū)域具有語義感,但其沒有定位到更精細(xì)的紋理,修復(fù)后的邊緣部分存在著過度平滑,甚至輕微失真.虛擬視圖中的大面積空洞通常出現(xiàn)在前后背景交界處,即邊緣處.很明顯PUnet 網(wǎng)絡(luò)對(duì)于虛擬視點(diǎn)圖像中的空洞修復(fù)效果并不友好.
針對(duì)傳統(tǒng)圖像修復(fù)算法修復(fù)空洞后圖像存在的語義缺失問題,以及現(xiàn)有的PUnet 網(wǎng)絡(luò)修復(fù)后的空洞邊緣失真,本文提出了基于邊緣信息的部分卷積網(wǎng)絡(luò)(Edge-PUnet)的修復(fù)方法.本文方法總體流程如圖1所示.
圖1 本文方法流程圖
本文3D 變換使用的是從中心圖像生成左右虛擬視圖的并行攝像機(jī)配置,在該配置下,任何三維點(diǎn)投影到左右虛擬視圖的垂直坐標(biāo)與投影到中心圖像(即參考視圖)的垂直坐標(biāo)是相同的[8].左右虛擬視圖的橫坐標(biāo)可由參考視圖的橫坐標(biāo)按視差進(jìn)行移位得到.根據(jù)視差與深度的關(guān)系[9],圖像中每個(gè)像素點(diǎn)的視差可由參考視圖的深度圖計(jì)算出,如式(1)所示.
其中,Parallax[i,j],Depth[i,j]分別是參考視圖中每個(gè)像素的視差值和深度值,i和j分別是圖像的橫縱坐標(biāo),127 為零視差平面,255 為最大視差,在本文中,α設(shè)置為15.
虛擬視圖以整數(shù)位置上的像素值為有效值,因此對(duì)移位后的像素坐標(biāo)進(jìn)行四舍五入取整,取整的像素通常是離整數(shù)位置上最近的映射像素,左、右虛擬視圖橫坐標(biāo)移位如式(2)和式(3)所示.
在式(2)和式(3)中,∏表示向下整,i,iL,iR分別是參考視圖、左虛擬視圖和右虛擬視圖的像素橫坐標(biāo).根據(jù)視差估計(jì)移位得到的左右虛擬視圖如圖2所示.
圖2 DIBR 技術(shù)生成的虛擬視圖
在參考視圖向虛擬視圖映射的過程中,用矩陣標(biāo)記虛擬視圖中的像素是否為映射點(diǎn),從而生成左右虛擬視圖掩膜,生成的左右虛擬視圖掩膜如圖3所示.
在虛擬視圖繪制的過程中,生成了對(duì)后期空洞修復(fù)產(chǎn)生影響的裂縫和偽影,修復(fù)空洞前需對(duì)這些偽像進(jìn)行去除,裂縫在虛擬視圖中的寬度為一個(gè)像素大小,且出現(xiàn)在相同的紋理區(qū)域下[10].因此本文從水平和垂直兩個(gè)方向?qū)α芽p進(jìn)行鄰近像素賦值以去除裂縫,其中水平方向上按照左右虛擬視圖映射方向的不同,分別從左側(cè)和右側(cè)進(jìn)行鄰近像素賦值,裂縫去除效果如圖4所示.對(duì)于偽影,則對(duì)虛擬視圖掩膜進(jìn)行膨脹,作用于虛擬視圖的空洞,從而消除空洞邊界處的偽影,偽影去除效果如圖5所示.
圖3 左右虛擬視圖掩膜
圖4 裂縫去除效果
圖5 偽影去除效果
去除這些偽像后,虛擬視圖中僅含有空洞,如圖6所示.然后利用本文提出的Edge-PUnet 網(wǎng)絡(luò)修復(fù)虛擬視圖中的大面積空洞.
圖6 空洞虛擬視圖
虛擬視圖中的空洞通常是由于三維場(chǎng)景中物體之間的遮擋關(guān)系引起的[11,12],因此空洞通常出現(xiàn)在前后背景交界處,即邊緣處.如圖6所示.邊緣是圖像信息最集中的地方,包含著紋理、結(jié)構(gòu)等豐富的信息[13].基于此,本文在PUnet 網(wǎng)絡(luò)中設(shè)計(jì)了邊緣檢測(cè)器,以使網(wǎng)絡(luò)重點(diǎn)學(xué)習(xí)圖像的邊緣部分.
虛擬視圖中的空洞通常是縱向的,因此本文的邊緣檢測(cè)器主要檢測(cè)的是圖像中的垂直邊緣部分,邊緣檢測(cè)器檢測(cè)步驟如下:
(1)對(duì)輸入的圖形進(jìn)行灰度化操作,將彩色圖轉(zhuǎn)換為灰度圖,其轉(zhuǎn)換過程如下所示:
其中,R、G、B為彩色圖像三通道中像素的值.
(2)利用高斯濾波器對(duì)灰度圖進(jìn)行卷積操作以濾除噪聲,防止噪聲引起的錯(cuò)誤邊緣檢測(cè).噪聲濾除過程如下所示:
其中,H為高斯濾波器核,計(jì)算如下所示:
式中,i和j為像素的橫縱坐標(biāo),(2k+1)為高斯濾波器核的大小,設(shè)置K為2,σ=1.5.
(3)利用Sobel 算子檢測(cè)出圖像中垂直方向上的邊緣,其檢測(cè)依據(jù)是每個(gè)像素點(diǎn)的方向,如下所示:
在上述公式中,Sx,Sy分別是x和y方向上的Sobel 算子,Gx,Gy分別是像素點(diǎn)水平和垂直方向的梯度值.
(4)利用膨脹函數(shù)對(duì)其存在斷點(diǎn)的垂直邊緣進(jìn)行連接,并對(duì)處理過后垂直邊緣圖進(jìn)行二值化,生成由0 和1 組成的二進(jìn)制邊緣掩膜圖.
最終生成的二進(jìn)制邊緣掩膜如圖7(b)所示.PUnet網(wǎng)絡(luò)需要大量的數(shù)據(jù)集進(jìn)行訓(xùn)練,若小將產(chǎn)生過擬合.為了擴(kuò)大數(shù)據(jù)集,本文對(duì)檢測(cè)出來的邊緣掩膜進(jìn)行隨機(jī)保存,在保存的過程中,邊緣寬窄和高低是隨機(jī)調(diào)整的.將隨機(jī)邊緣掩膜與圖片作用生成邊緣隨機(jī)缺失圖像,彩色圖、隨機(jī)邊緣掩膜傳入PUnet 網(wǎng)絡(luò)中.
圖7 邊緣檢測(cè)器檢測(cè)邊緣
PUnet 網(wǎng)絡(luò)架構(gòu)如圖8所示,PUnet 網(wǎng)絡(luò)結(jié)構(gòu)主要包括編碼器和解碼器兩個(gè)部分,編碼器包含8 個(gè)部分卷積層,每次卷積后對(duì)特征圖進(jìn)行1/2 的下采樣(即最大池化),然后對(duì)數(shù)據(jù)進(jìn)行歸一化處理,并對(duì)其進(jìn)行非線性變換,非線性函數(shù)為ReLU.解碼器包含8 個(gè)最近鄰上采樣層,上采樣層對(duì)得到的特征進(jìn)行解碼,得到圖像和掩膜的特征圖,將得到的特征圖在通道維上與編碼器對(duì)應(yīng)的圖像和掩膜的特征圖分別連接(即Skip-Connection),然后對(duì)解碼器和編碼器的特征圖分別進(jìn)行卷積并相加,跳過連接之后對(duì)數(shù)據(jù)進(jìn)行歸一化處理和非線性變換,非線性函數(shù)為LeakyReLU.
圖8 PUnet 網(wǎng)絡(luò)結(jié)構(gòu)簡圖
在PUnet 網(wǎng)絡(luò)中,編碼器利用部分卷積層逐層提取圖像的語義特征,即物體與其周圍環(huán)境之間的關(guān)系,最大池化層用來降低特征圖的維度和保留有效的紋理信息,池化層提高了特征的空間不變性,在池化的過程中編碼器逐步丟失了背景信息,解碼器階段上采樣逐步將編碼器得到的高級(jí)語義特征圖恢復(fù)到原圖片的分辨率,并通過Skip-Connection 融合來自于編碼器的低級(jí)特征.這使修復(fù)的圖片的邊緣、紋理等信息更加精細(xì).
傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)修復(fù)空洞時(shí),需要對(duì)空洞區(qū)域進(jìn)行初始化,空洞的初始值一般設(shè)置為127.5 或者圖片的平均值.設(shè)置了初始值的空洞區(qū)域和非空洞區(qū)域被網(wǎng)絡(luò)同等對(duì)待,混淆了網(wǎng)絡(luò),進(jìn)而導(dǎo)致空洞修復(fù)的效果受空洞初始值的影響.PUnet 網(wǎng)絡(luò)部分卷積層采用的是部分卷積運(yùn)算,即當(dāng)前卷積核窗口下的輸出值僅取決于掩膜中未隱藏的輸入,也就是說卷積操作時(shí)會(huì)忽略空洞區(qū)域的值,只利用非空洞區(qū)域的值進(jìn)行卷積操作,從而消除了以往的卷積神經(jīng)網(wǎng)絡(luò)對(duì)空洞進(jìn)行卷積操作所造成的不良影響.每次部分卷積之后更新空洞掩膜,即在當(dāng)前卷積核窗口下,若卷積不能將輸出設(shè)定在至少一個(gè)有效的輸入值上,那么將該卷積核窗口下的掩膜值設(shè)為0,隨著卷積的深入,掩膜中為0 的像素越來越少(即掩模中空洞越來越小),直到個(gè)數(shù)為0,輸出結(jié)果中有效區(qū)域的面積越來越大.
PUnet 網(wǎng)絡(luò)的損失函數(shù)包括4 種,分別是逐像素求差損失、感知損失、風(fēng)格損失和總變差損失.逐像素求差公式如式(10)和式(11)所示,該損失函數(shù)可以衡量生成圖片跟真實(shí)圖片之間的差異.但是并不能捕捉生成圖像跟真實(shí)圖片的感知和語義差別,文獻(xiàn)[14]表明高質(zhì)量的圖像可以通過建立感知損失函數(shù)并使損失函數(shù)最小化來生成,生成的圖像在細(xì)節(jié)和邊緣上表現(xiàn)的更好,因此損失函數(shù)中加入文獻(xiàn)[15]引入的感知損失,如式(12)所示.為了恢復(fù)生成圖片的顏色紋理和精確的形狀,同時(shí)減少邊界處的偽影,加入了風(fēng)格損失函數(shù),如式(13)和式(14)所示.總變差損失函數(shù)是對(duì)空洞區(qū)域中單個(gè)像素?cái)U(kuò)張進(jìn)行的平滑懲罰,如式(15)所示.
式中,Iout表示網(wǎng)絡(luò)預(yù)測(cè)圖像,Igt表示真實(shí)圖像,NIgt表示真實(shí)圖像中的像素個(gè)數(shù),‖·‖1表示求L1距離,M是當(dāng)前卷積核窗口在二進(jìn)制隨機(jī)邊緣掩膜上的像素值,Lh為當(dāng)前卷積核窗口下掩膜區(qū)域的損失,Lv為非掩膜區(qū)域下的損失.
式中,Icomp是網(wǎng)絡(luò)輸出圖像Iout中非空洞像素直接設(shè)置為真實(shí)像素得到的.是給定輸入圖像的第P層的激活映射,為的元素個(gè)數(shù).
其中,R是空洞區(qū)域單個(gè)像素的擴(kuò)張區(qū)域,NIcomp為Icomp網(wǎng)絡(luò)輸出圖像的像素個(gè)數(shù).
總損失是上述損失的組合,各個(gè)損失函數(shù)的權(quán)重由測(cè)試圖像所得,如式(16)所示.
本文實(shí)驗(yàn)的數(shù)據(jù)集為微軟數(shù)據(jù)集的Ballet 和Breakdancers 視頻序列,其中訓(xùn)練集、驗(yàn)證集和測(cè)試集圖片數(shù)分別為1000、400 和200 張,分辨率為1024×768.在訓(xùn)練的過程中對(duì)該數(shù)據(jù)集進(jìn)行旋轉(zhuǎn)、平移變換、尺度變換等數(shù)據(jù)增強(qiáng)擴(kuò)充處理.同時(shí)對(duì)輸入的圖片進(jìn)行歸一化處理,并縮放到512×512,以減少網(wǎng)絡(luò)訓(xùn)練所需內(nèi)存.
本文的實(shí)驗(yàn)是在Linux 平臺(tái)下的TensorFlow 框架下進(jìn)行,并以Keras 為框架的前端.訓(xùn)練首先加載由ImageNet 訓(xùn)練而來的VGG16 模型來初始化權(quán)重,并采用Adam 優(yōu)化算法對(duì)數(shù)據(jù)集進(jìn)行批歸一化處理,采用batch_size=4 將圖片輸入網(wǎng)絡(luò),在數(shù)據(jù)集上以0.0003的學(xué)習(xí)率迭代訓(xùn)練60 000 個(gè)周期,每個(gè)周期迭代訓(xùn)練250 次.
本文的虛擬視點(diǎn)圖像是以Ballet 和Breakdancers視頻序列中cam3 視點(diǎn)下的參考圖和深度圖進(jìn)行DIBR變換得到的.采用主觀評(píng)價(jià)和客觀評(píng)價(jià)的方式對(duì)空洞修復(fù)的效果進(jìn)行評(píng)價(jià).其中客觀評(píng)價(jià)的指標(biāo)為峰值信噪比(PSNR)和結(jié)構(gòu)相似度(SSIM).PSNR 是基于像素間的誤差,單位是dB.SSIM 分別從亮度、對(duì)比度、結(jié)構(gòu)3 方面度量參考視圖和虛擬視圖的相似性,其取值范圍為[0,1].PSNR 和SSIM 值越大,表示圖像失真越小.
基于樣本塊的修復(fù)方法[6]、PUnet 方法[7]和本文方法修復(fù)空洞的效果如圖9和圖10所示.從圖中可以看出,當(dāng)空洞處在紋理平緩變化和結(jié)構(gòu)單一的位置,基于樣本塊的修復(fù)方法、PUnet 方法和本文方法對(duì)空洞都有著良好的修復(fù)效果,修復(fù)后的空洞能保持與周圍背景的一致性.在紋理劇烈變化位置處的大空洞處,例如圖9和圖10中前景與背景的交接處,即邊緣處,可以看到基于樣本快方法修復(fù)后的圖像邊緣存在著嚴(yán)重的失真現(xiàn)象.
圖9 不同方法對(duì)Ballet 虛擬視圖修復(fù)效果對(duì)比
圖10 不同方法對(duì)Breakdancers 虛擬視圖修復(fù)效果對(duì)比
放大其修復(fù)后的圖片,如圖11和圖12所示,可以看到基于樣本塊方法修復(fù)后的圖片邊緣存著典型的塊效應(yīng),且前景一部分像素過渡到了背景區(qū)域.這是由于填充的部分是空洞周圍與之相似的紋理塊造成的,而PUnet 方法和本文方法修復(fù)后的邊緣比較平滑,其前景像素能夠自然的過渡到背景區(qū)域,在高度結(jié)構(gòu)化區(qū)域處的空洞,對(duì)比PUnet 方法修復(fù)的效果,本文修復(fù)后的空洞在邊緣細(xì)節(jié)方面表現(xiàn)的更好.例如,在圖11男聽眾的頭部區(qū)域,PUnet 方法修復(fù)后的眼睛與手連接區(qū)域存在著輕微模糊現(xiàn)象,以及衣領(lǐng)部分被過渡平滑到背景區(qū)域,而本文修復(fù)后的該處區(qū)域結(jié)構(gòu)和邊緣更為清晰,有著更好的視覺效果.
圖12 不同方法對(duì)Breakdancers 虛擬視圖修復(fù)效果局部放大對(duì)比
為做出較為正確的客觀評(píng)價(jià),本文分別在Ballet和Breakdancers 視頻序列中cam3 攝像機(jī)視點(diǎn)下選取了30 張圖片作為參考視圖,并利用3D 變換技術(shù)生成虛擬視點(diǎn)圖像,修復(fù)空洞后計(jì)算每張圖片的PSNR 和SSIM 值,最后取其平均值.不同方法修復(fù)效果的PSNR和SSIM 值如表1和表2所示.從表中可看出,本文的方法修復(fù)后的圖像PSNR 和SSIM 值明顯比基于樣本塊方法和PUnet 方法的高,說明本文方法修復(fù)后的圖像有著較小的失真,且與真實(shí)圖像更接近.同時(shí)達(dá)到一樣的空洞修復(fù)效果,相比于PUnet 方法利用不規(guī)則掩膜作用于數(shù)據(jù)集進(jìn)行網(wǎng)絡(luò)訓(xùn)練.本文利用邊緣掩膜作用于數(shù)據(jù)集進(jìn)行訓(xùn)練的時(shí)間要短.
表1 不同方法修復(fù)的PSNR 比較
表2 不同方法修復(fù)的SSIM 比較
針對(duì)傳統(tǒng)圖像修復(fù)算法修復(fù)的缺點(diǎn),以及現(xiàn)有的PUnet 方法修復(fù)后的空洞圖像邊緣模糊甚至失真現(xiàn)象,本文提出了一種基于邊緣信息的部分卷積神經(jīng)網(wǎng)絡(luò)方法,在修復(fù)虛擬視圖空洞前,本文對(duì)虛擬視圖進(jìn)行預(yù)處理,以消除虛擬視圖中裂縫和偽影對(duì)后期空洞修復(fù)的影響.然后利用提出的Edge-PUnet 網(wǎng)絡(luò)修復(fù)空洞,相比于傳統(tǒng)的圖像修復(fù)方法,本文修復(fù)后的空洞區(qū)域具有良好的結(jié)構(gòu)和語義信息,相比現(xiàn)有的部分卷積神經(jīng)網(wǎng)絡(luò),本文修復(fù)后的空洞邊緣更加精細(xì).不足的是在修復(fù)虛擬視圖過程中沒有考慮到視頻的連續(xù)性,這是下一步努力的方向.