(3)
其中,a為閾值。若不滿足條件則繼續(xù)過(guò)渡。
1.2 空洞填補(bǔ)
圖像中的空洞點(diǎn)可以認(rèn)為是受損的像素點(diǎn),該位置的像素點(diǎn)與其周圍的像素點(diǎn)存在較大的關(guān)聯(lián),因此,可利用周圍像素點(diǎn)與空洞點(diǎn)的關(guān)系來(lái)進(jìn)行填補(bǔ)。本文提出一種改進(jìn)的鄰域像素空洞填補(bǔ)方法。由于空洞點(diǎn)多為縱向連續(xù)分布,即空洞點(diǎn)的上方和下方大概率也存在空洞點(diǎn),如果只是使用空洞像素的8個(gè)鄰域像素點(diǎn),將無(wú)法充分利用其周圍信息,故在橫向上額外增加A2、E22個(gè)像素作為空洞填補(bǔ)的參考像素。考慮到離空洞越近的像素點(diǎn)與空洞的相關(guān)性越強(qiáng),因此賦予離空洞像素點(diǎn)位置遠(yuǎn)的填補(bǔ)像素較小的權(quán)值,對(duì)離空洞近的填補(bǔ)像素點(diǎn)賦予大權(quán)值以保證填補(bǔ)的效果。由2D圖像通過(guò)DIBR方法轉(zhuǎn)換生成的左視圖與右視圖僅僅是視差不同,空洞填補(bǔ)的方式一致??斩磁c鄰域填補(bǔ)像素的關(guān)系如圖1所示。
圖1 空洞與鄰域填補(bǔ)像素的關(guān)系
若C2為空洞點(diǎn),使用B1、C1、D1、B2、D2、B3、C3、D3、A2、E2這10個(gè)像素進(jìn)行空洞填補(bǔ)。但填補(bǔ)像素中依然可能存在空洞點(diǎn),且通常這10個(gè)像素不會(huì)都是空洞點(diǎn),則需要對(duì)填補(bǔ)像素中的空洞點(diǎn)數(shù)量進(jìn)行討論,根據(jù)填補(bǔ)像素中空洞點(diǎn)的數(shù)量不同,給出不同的填補(bǔ)方法。若填補(bǔ)過(guò)程中這10個(gè)像素點(diǎn)中無(wú)空洞,則填補(bǔ)公式為:
C2=(B1+C1+D1+B2+D2+B3+
C3+D3)w1+(A2+E2)w2
(4)
記C2的8像素鄰域中的空洞數(shù)目為m,A2、E22個(gè)像素中空洞數(shù)目為n,考慮到填補(bǔ)像素中空洞點(diǎn)數(shù)量對(duì)填補(bǔ)效果的影響,若m<8且n<2,則空洞填補(bǔ)公式為:
D2+B3+C3+D3)+
(5)
若m=8且n<2,則空洞填補(bǔ)公式為:
(6)
若m<8且n=2,則空洞填補(bǔ)公式為:
D2+B3+C3+D3)
(7)
根據(jù)以上方法可以對(duì)圖像中的空洞點(diǎn)進(jìn)行有效填補(bǔ),彌補(bǔ)了鄰域像素空洞填補(bǔ)方法中沒(méi)有考慮鄰域填補(bǔ)像素存在空洞點(diǎn)的問(wèn)題。
2 軟件算法的硬件FPGA實(shí)現(xiàn)
本算法的硬件實(shí)現(xiàn)是基于FPGA平臺(tái),使用Altera的Cyclone IV EP4CE15開(kāi)發(fā)板,該開(kāi)發(fā)板具有15×103個(gè)邏輯單元、4 Mibit的SRAM、256 Mibit的SDRAM以及時(shí)鐘管理單元等資源。算法的硬件設(shè)計(jì)包括3×5窗口模板生成模塊、空洞判斷與填補(bǔ)模塊,最后進(jìn)行了VGA的顯示。原理結(jié)構(gòu)如圖2所示。
圖2 空洞填補(bǔ)FPGA原理結(jié)構(gòu)
輸入圖像數(shù)據(jù)流為灰度圖,其灰度值范圍在0~255之間,通過(guò)移位寄存器生成3×5的窗口模板,利用窗口模板對(duì)空洞進(jìn)行判斷和填補(bǔ),最后通過(guò)VGA顯示輸出實(shí)驗(yàn)結(jié)果。
2.1 3×5窗口生成模塊
因?yàn)榕c在軟件中對(duì)圖像進(jìn)行處理的方式不同,硬件中的圖像信息是以數(shù)據(jù)流的方式進(jìn)行傳輸?shù)?與時(shí)鐘周期有關(guān),1個(gè)時(shí)鐘周期只能發(fā)送或者接收1個(gè)像素?cái)?shù)據(jù),從而無(wú)法一次性對(duì)整幅圖片進(jìn)行處理,所以需要設(shè)計(jì)窗口模板來(lái)進(jìn)行相應(yīng)的像素處理,并通過(guò)窗口模板的滑動(dòng)來(lái)實(shí)現(xiàn)對(duì)整幅圖片的空洞填補(bǔ)操作。為了得到3×5窗口模板,使用先進(jìn)先出(First-In- First-Out,FIFO)隊(duì)列來(lái)作為圖像數(shù)據(jù)的緩沖器。實(shí)驗(yàn)中通過(guò)調(diào)用Quartus II軟件中的基于RAM的移位寄存器宏模塊altshift-taps實(shí)現(xiàn)行延遲以生成 3×5窗口模板。進(jìn)行緩存的深度設(shè)置為輸入圖像的行像素總數(shù)。這樣1個(gè)時(shí)鐘周期里通過(guò)3個(gè)移位寄存器可以輸出3個(gè)像素?cái)?shù)據(jù),通過(guò)5個(gè)時(shí)鐘周期可以輸出15個(gè)像素?cái)?shù)據(jù),滿足了生成3×5的窗口模板,在模板中可以對(duì)這些像素進(jìn)行空洞判斷和填補(bǔ)。
2.2 空洞填補(bǔ)模塊
3×5窗口模板可以取到15個(gè)像素?cái)?shù)據(jù),如果像素是空洞就利用這模板中的10個(gè)像素?cái)?shù)據(jù)進(jìn)行空洞填補(bǔ)。圖像的空洞填補(bǔ)運(yùn)算需要利用卷積與求和的計(jì)算方法,通??梢酝ㄟ^(guò)觸發(fā)器、加法器和乘法器的硬件設(shè)計(jì)來(lái)進(jìn)行相應(yīng)的數(shù)學(xué)運(yùn)算,但該方法比較繁瑣,本文采用可編程乘加法器和可編程多路并行加法器等來(lái)實(shí)現(xiàn)空洞填補(bǔ)需要的數(shù)學(xué)計(jì)算??斩刺钛a(bǔ)的移位寄存器像素運(yùn)算結(jié)構(gòu)如圖3所示。
圖3 空洞填補(bǔ)運(yùn)算結(jié)構(gòu)
空洞填補(bǔ)運(yùn)算結(jié)構(gòu)由3個(gè)基于移位寄存器的Line Buffer、10個(gè)可編程乘法器及4組并行加法器構(gòu)成。Line Buffer0、Line Buffer1和Line Buffer2對(duì)輸入圖像數(shù)據(jù)中相鄰的3行像素分別進(jìn)行緩存,模板中鄰域像素值與w1相乘,非鄰域像素值與w2相乘,通過(guò)可編程多路并行加法器處理數(shù)據(jù)后即可得到空洞的填補(bǔ)值。具體地,當(dāng)圖像數(shù)據(jù)輸入時(shí),圖像數(shù)據(jù)在時(shí)鐘控制下并行傳遞到后續(xù)的寄存器,持續(xù)5個(gè)時(shí)鐘周期后生成3×5的窗口模板,此時(shí)Line Buffer0中B1、C1、D1的輸出與w1并行相乘,相乘得到的數(shù)據(jù)再并行相加,并行相加的輸出為S1,為空洞填補(bǔ)結(jié)果的一部分。同理Line Buffer1和Line Buffer2也經(jīng)過(guò)乘加運(yùn)算分別得到S2、S3,最終S1、S2、S3通過(guò)并行加法器運(yùn)算得到空洞填補(bǔ)的結(jié)果。
3 實(shí)驗(yàn)結(jié)果與分析
3.1 軟件實(shí)驗(yàn)結(jié)果及分析
3.1.1 深度梯度過(guò)渡結(jié)果
為了驗(yàn)證算法深度梯度過(guò)渡的效果,在Matlab軟件平臺(tái)上對(duì)圖片進(jìn)行了實(shí)驗(yàn)。實(shí)驗(yàn)選取的圖片是在2D轉(zhuǎn)3D過(guò)程中生成的左視圖,目標(biāo)視圖中存在空洞。圖片的名稱為Ding,分辨率為1 024×768。深度梯度過(guò)渡后局部對(duì)比如圖4所示。從圖4可以看出,通過(guò)深度梯度過(guò)渡處理減少了位于雕像左側(cè)前景與后景邊界的空洞數(shù)量,同時(shí)提高了視覺(jué)效果。
圖4 深度梯度過(guò)渡后局部對(duì)比
3.1.2 空洞填補(bǔ)
由空洞填補(bǔ)公式知,因?yàn)榭斩刺钛a(bǔ)使用10個(gè)像素作為填補(bǔ)像素,所以填補(bǔ)參數(shù)w1、w2應(yīng)滿足8w1+2w2=1的條件,由填補(bǔ)時(shí)像素與空洞遠(yuǎn)近關(guān)系知w1>w2,w1的范圍在0.100~0.125之間,w2的范圍在0~0.1之間,w1的值分別選取0.105、0.110、0.115、0.120進(jìn)行試驗(yàn),以獲得最佳的參數(shù)。使用峰值信噪比(peak signal-to-noise ratio,PSNR)對(duì)填補(bǔ)后的圖像進(jìn)行評(píng)估,當(dāng)w1取0.115時(shí),得到較好的PSNR值。對(duì)圖片Ding進(jìn)行空洞填補(bǔ)前后的實(shí)驗(yàn)結(jié)果如圖5所示。
圖5 Ding圖片實(shí)驗(yàn)結(jié)果
對(duì)比圖5a、圖5b可知,通過(guò)算法能有效地去除圖像中的空洞。對(duì)Ding實(shí)驗(yàn)結(jié)果與加權(quán)均值濾波算法[5]、整體變分算法[6]及基于樣本的填補(bǔ)算法[7]的結(jié)果進(jìn)行了比較,結(jié)果見(jiàn)表1所列。
表1 空洞填補(bǔ)參數(shù)比較
因?yàn)闉V波會(huì)導(dǎo)致圖片模糊而丟失圖片的部分細(xì)節(jié),使用這種方法進(jìn)行空洞填補(bǔ)將會(huì)導(dǎo)致填補(bǔ)后的目標(biāo)視圖視覺(jué)效果不理想,所以使用濾波方法來(lái)處理圖片中的空洞并不合適。本文算法只針對(duì)空洞進(jìn)行處理,能很好地保存圖片細(xì)節(jié)部分。由表1可知,本文算法的PSNR為38.64 dB,高于其他算法,均方誤差(mean square error,MSE)為8.90,低于其他算法,本文算法的PSNR與MSE性能指標(biāo)優(yōu)于其他3種算法。
3.2 硬件實(shí)現(xiàn)及測(cè)試
硬件實(shí)現(xiàn)及測(cè)試實(shí)驗(yàn)使用Altera的Cyclone IV EP4CE15 FPGA開(kāi)發(fā)板。SD讀卡模塊、異步FIFO讀寫模塊與SDRAM讀寫模塊、空洞填補(bǔ)算法模塊、VGA顯示模塊共同構(gòu)成完整的實(shí)驗(yàn)系統(tǒng)。聯(lián)機(jī)調(diào)試前,先對(duì)代碼進(jìn)行了波形仿真,使用ModelSim軟件對(duì)算法仿真的結(jié)果如圖6所示。
圖6 空洞填補(bǔ)仿真波形
從空洞填補(bǔ)仿真波形可以看出,在輸入完整的15個(gè)像素窗口模板數(shù)據(jù)后,對(duì)空洞像素C2進(jìn)行填補(bǔ),填補(bǔ)前的像素值為二進(jìn)制數(shù),值為00000000(十進(jìn)制為0),填補(bǔ)后該位置的像素二進(jìn)制數(shù)值為10011111(十進(jìn)制為159),不再是空洞像素。同時(shí),將填補(bǔ)后的像素值與其上、下、左、右4個(gè)像素值進(jìn)行比較,觀察填補(bǔ)后的像素與其周圍的像素是否差異過(guò)大。若差異過(guò)大則可能造成填補(bǔ)后位置的像素視覺(jué)效果差。空洞上、下、左、右4個(gè)位置如下:B2為10101001(十進(jìn)制169);C1為10101001(十進(jìn)制169);D2為10101111(十進(jìn)制175);C3為10100011(十進(jìn)制163),因此填補(bǔ)后的像素值C22與周圍像素在梯度變化上差異小,不會(huì)造成不良的視覺(jué)效果。為了測(cè)試空洞在硬件上的填補(bǔ)效果,將代碼用Quartus 軟件下載到FPGA開(kāi)發(fā)板進(jìn)行測(cè)試,填補(bǔ)前與填補(bǔ)后的結(jié)果如圖7所示。從圖7可以看出,在FPGA硬件平臺(tái)上能有效地填補(bǔ)圖片中的空洞,沒(méi)有視覺(jué)不適的現(xiàn)象,效果良好,同時(shí),空洞去除后,對(duì)圖片中的其他細(xì)節(jié)并沒(méi)有造成影響。因此,設(shè)計(jì)的空洞填補(bǔ)算法在FPGA硬件平臺(tái)上也能針對(duì)圖片空洞進(jìn)行有效的填補(bǔ)。
圖7 FPGA空洞填補(bǔ)前后結(jié)果
4 結(jié) 論
本文針對(duì)DIBR方法繪制后的目標(biāo)視圖存在空洞的問(wèn)題,提出了一種對(duì)目標(biāo)圖像空洞有效填補(bǔ)的算法,先對(duì)深度圖前景與后景邊界中存在的空洞進(jìn)行深度梯度過(guò)渡預(yù)處理,然后利用空洞點(diǎn)與周圍像素關(guān)系,即根據(jù)與空洞像素距離設(shè)置不同的權(quán)值w1、w2,并且考慮填補(bǔ)像素中的空洞數(shù)量,給出不同填補(bǔ)方法。最后將該算法在Matlab軟件平臺(tái)上和FPGA硬件平臺(tái)上分別進(jìn)行了驗(yàn)證,實(shí)驗(yàn)結(jié)果表明填補(bǔ)效果良好。