吳海波,王 晨,崔 禹
(昆明理工大學 機電工程學院,云南 昆明 650500)
相機是視覺即時定位與地圖構(gòu)建(Simultaneous Localization and Mapping,SLAM)、三維重建技術(shù)中唯一的傳感器,被用來獲取周圍的環(huán)境信息[1]。微軟公司推出的體感相機Kinect系列可以更加便捷地獲取彩色圖像數(shù)據(jù)和深度圖像數(shù)據(jù)。在三維場景重建[2]、目標識別[3]和語義分割[4]等任務(wù)中,融合深度信息和顏色信息已成為新的趨勢。由于受到自身精度和測量時光照變化等因素的影響,采集到的深度圖像中,物體邊緣和遮擋區(qū)域常含有較多噪點和空洞[5](深度圖像的空洞表現(xiàn)為像值為零的區(qū)域)。此類圖像若不經(jīng)處理就被應用到視覺SLAM前端的視覺里程計部分,會誘發(fā)關(guān)鍵點提取錯誤和誤匹配等問題。在實際應用中,設(shè)備和環(huán)境的改善受到成本和不可控性的制約[6],因此為了滿足實際應用的要求,對獲取的圖像進行預處理就顯得尤為重要。
針對上述問題,文獻[7~8]中提出采用高斯濾波方法進行深度圖像修復。該方法通過確定一個待求像素值的像素點,將其自身與鄰域內(nèi)的像素點的像素值加權(quán)平均后,得到所求點的像素值。文獻[9]提出的中值濾波算法則通過確定一個待求像素點,并將其鄰域像素點的灰度值進行排序,取其中值來代替待求像素點的灰度值。但這兩種算法在去除深度圖像的噪聲同時造成了邊緣信息的缺失。文獻[10~12]采用雙邊濾波算法對深度圖像進行修復并實現(xiàn)了三維場景重建。雙邊濾波算法雖然可以在去除噪聲的同時保持一定的邊緣信息,但其計算復雜度較高,算法運行速度較慢,不能滿足實時性要求。
本文提出一種基于彩色圖像引導的快速雙邊濾波算法。該算法在雙邊濾波的基礎(chǔ)上將彩色圖像作為引導圖加入輸入端,并將其灰度圖的灰度像素變化率作為濾波權(quán)值之一,將所得權(quán)值與深度圖像的高斯濾波權(quán)值相乘得到最終的雙邊濾波權(quán)值。為了滿足實時性要求,本文對上述算法進行快速高斯變換,降低計算的復雜度,提高了運行速度。為驗證該算法的有效性,本文將其與傳統(tǒng)的中值濾波、均值濾波和雙邊濾波進行對比實驗和分析。實驗結(jié)果表明,所提出的算法可顯著提高深度圖像去噪效果,并有效縮短運行時間。
傳統(tǒng)的單目、雙目相機主要通過不同幀圖像之間的視差來計算圖像的深度。RGB-D深度相機可以在同一時刻對某一位置,同時采集到相匹配的彩色圖像和深度圖像。其中,深度圖像中不同的灰度值代表每個像素點的深度。
圖1 RGB-D相機原理示意圖Figure 1. Schematic diagram of RGB-D camera principle
如圖1所示,目前的RGB-D相機按其測量原理主要分為兩大類:(1)通過紅外結(jié)構(gòu)光原理測量像素距離,例如Kinect 1代和Project Tango 1代等。相機的紅外結(jié)構(gòu)光發(fā)射器向某測量對象發(fā)射一束紅外結(jié)構(gòu)光,然后相機根據(jù)紅外結(jié)構(gòu)光接受器所接收的結(jié)構(gòu)光圖案來計算相機自身與目標物體之間的距離;(2)通過飛行時間原理測量像素距離,例如Kinect 2代等。相機中的脈沖發(fā)射器向測量對象發(fā)射脈沖光,然后相機根據(jù)脈沖光接受器接收時間,確定從發(fā)送到返回的光束飛行時間,從而進一步計算出相機自身與目標物體之間的距離。
本文所使用的Kinect 1代深度相機采用結(jié)構(gòu)光技術(shù)。紅外投影儀投射出的激光散斑光源具有高度的不確定性,其編碼方式會隨著距離的改變而改變。因此,只要測量對象在場景中處于不同位置,則所捕捉到的散斑圖案一定不同。在Kinect 1代中,紅外攝像頭的主要作用就是捕捉空間中的散斑圖案。在散斑圖像中,當某一測量距離大于或小于基準面到相機的距離時,則被認定為其對應的散斑圖像在相機的基線方向上相對于參考圖像有位置偏差[13],即視差。而在計算出的圖像數(shù)據(jù)中,場景中物體的位置有一個峰值,將圖像中的所有峰值相加,通過插值即可計算得到整個空間的視差圖。利用與深度相機相關(guān)的數(shù)學模型,根據(jù)視差圖中每個像素的視差就可得到每個像素的深度數(shù)據(jù)。
深度相機通過三角相似原理來獲取所需的深度數(shù)據(jù)。圖2為空間點P1和其對應視差u的關(guān)系,其中C為紅外攝像機的光學中心,L為紅外發(fā)射器的光學中心,P為標定平面的衍射點,P1為測量平面的衍射點,P11和P12分別為P1和P在紅外攝像機上的成像點,紅外發(fā)射器的光學中心與紅外攝像機之間的距離為b,紅外攝像機的焦距為f,P和P1的深度分別為Z0和Z1。
圖2 深度相機測量原理Figure 2. Measurement principle of depth camera
由三角形PAP1與三角形PCL相似可得
(1)
由三角形AP1C與三角形CP11P12相似可得
(2)
由式(1)和式(2)可得式(3)。
(3)
式(3)表示了通過視差計算實際深度值的方法??臻g中點的成像比例由該點的Z坐標和相機的焦距長度f共同決定??臻g點的其余兩個坐標值可以通過成像坐標系的坐標值和成像比例計算出,具體表達如下所示
(4)
(5)
式中,x1和y1表示成像坐標系中的坐標;x0和y0表示成像坐標系原點;δx和δy為透鏡畸變的校正項。由此可知,空間點P1的三維坐標為(X1,Y1,Z1)。
如圖3所示,深度相機采集的原始深度圖像存在很多噪聲和空洞,其大小、形狀、位置均不規(guī)則。文獻[14]提出深度圖像存在噪聲和空洞的原因主要有以下兩點:(1)與目標物表面材質(zhì)相關(guān)。不同材料可能會吸收、折射和反射光線。如圖3所示,當紅外設(shè)備投射到桌面時,會發(fā)生一定的反射,所以在深度圖中桌面上會出現(xiàn)一部分空洞區(qū)域。這些空洞區(qū)域?qū)诤笃邳c云生成部分造成影響;(2)由于遮擋,在相機的某一觀測方位,被觀察的物體被自身或其他物體的一部分擋住,使相機的視角出現(xiàn)盲區(qū)。
(a) (b)圖3 深度相機采集的彩色圖像和深度圖像(a)彩色圖像 (b)深度圖像Figure 3. Images collected by depth camera(a)Color image (b)Depth image
中值濾波的基本原理為:將每一像素點的灰度值設(shè)置為該點某鄰域窗口內(nèi)的所有像素點灰度值的中值,從而消除孤立的噪聲點。實現(xiàn)方法是:用某種二維滑動窗口,根據(jù)像素值大小對窗口內(nèi)像素進行排序,生成單調(diào)升序(或降序)的二維數(shù)據(jù)序列。因此,中值濾波輸出為g(x,y)=med{f(x-k,y-l)},(k,l∈W),其中f(x,y)和g(x,y)分別為輸入圖像和輸出圖像。W為二維窗口,其大小通常為3×3和5×5。
中值濾波對顆粒狀的脈沖噪聲效果較好,但對于隨機的高斯和泊松噪聲效果不明顯。
雙邊濾波器是[15]一種基于高斯濾波器的改進算法,可看作加權(quán)的非線性高斯濾波。圖像濾波可由式(6)表示。
(6)
式中,I(x,y)代表濾除噪聲后的清晰圖像;Ω是像素的鄰域;ω(i,j)是濾波器在點(i,j)處的權(quán)值;n(i,j)為輸入圖像;ωp是一個標準量,如式(7)所示。
ωp=∑i,j∈Ωω(i,j)
(7)
雙邊濾波器的權(quán)值ω為高斯濾波權(quán)值ωg(i,j)和深度圖像素值變化權(quán)值ωs(i,j)的乘積,其具體表達式如式(8)和式(9)所示。圖像邊緣處像素值變化較大,ωs(i,j)值較小,使得ω變小,濾波器在圖像中邊緣處的濾波作用減小,從而在去除圖像噪聲點的同時保持邊緣信息。
(8)
(9)
式中,σg和σs表示兩個濾波權(quán)值中的高斯函數(shù)標準差;S(x,y)表示深度圖像的像素點;S(i,j)表示深度圖像的像素值。
高斯濾波權(quán)值ωg忽略了圖像灰度值的變化,在去噪同時也平滑了邊緣。而雙邊濾波在其基礎(chǔ)上增加了一個衡量深度圖像灰度值變化的權(quán)值ωs。
本文利用彩色圖像中完整的邊緣信息補全深度圖像中缺失的信息。首先,將彩色圖像作為引導圖像,對彩色圖像灰度化;然后,在高斯濾波權(quán)值基礎(chǔ)上,再用一個權(quán)值ωh來表示灰度化后的圖像灰度值的變化,對深度圖像進行校正修復。相比與原始深度圖像,灰度化后的彩色圖像能夠更為精確地描述圖像中的邊緣信息。當圖像邊緣處像素值變化較大時,ωh較小,從而使得邊緣處整體的權(quán)值ω變小,起到去噪保邊的效果。加入引導圖后權(quán)值計算式為
(10)
式中,ωh表示圖像灰度值的變化權(quán)值;H(i,j)為彩色圖像灰度化后的像素值;H(x,y)表示灰度圖的像素點;σh表示改進雙邊濾波權(quán)值的高斯函數(shù)標準差。
綜上,本文的改進雙邊濾波器權(quán)值ω(i,j)如式(11)所示。
ω(i,j)=ωg(i,j)×ωh(i,j)
(11)
用多種算法對同一圖像(圖3)進行濾波處理,并在算法中加入計時,各算法的運行時間如表1所示。
表1 各算法運行時間
視覺SLAM對算法的實時性要求較高,由表1可以看出,均值濾波算法實時性較好,中值濾波實時性適中,雙邊濾波的實時性較差。由于雙邊濾波器的核函數(shù)為高斯函數(shù),設(shè)輸入圖像的分辨率為M×N,濾波窗口半徑為r,則權(quán)值計算的復雜度為O((M×N×n)2),減慢了雙邊濾波的運算速度。針對這一情況,本文引入快速高斯變換[16]來降低雙邊濾波算法的計算復雜度,加快運算速度。
快速高斯變換過程中,定義Hermite函數(shù)為
(12)
進行Hermite展開如下
(13)
對上式平移和尺度變換可得
(14)
則一維高斯核函數(shù)可表示為
(15)
式中,G(tj)為一維高斯變換,取其中的的前r項,則權(quán)值計算的復雜度為O((M+N)×r),低于直接使用高斯函數(shù)的復雜度。改進后的快速雙邊濾波算法對圖3的處理速度為80 ms,與中值濾波的運算速度相近,可滿足視覺SLAM實時性要求。
為了驗證本文所提算法的有效性,選用具有代表性的ICL-NUIM數(shù)據(jù)集[17]圖像作為原始數(shù)據(jù),采用本文算法與其他算法對同一圖像數(shù)據(jù)進行對比實驗,以此來證明本文所提出的算法在去噪保邊、修復空洞以及實時性方面的優(yōu)越性。
圖4分別給出了原始彩色圖像、原始深度圖像、均值濾波、中值濾波和本文改進的快速雙邊濾波算法的對比實驗結(jié)果。
(a)
(b) (c)
(d)
(e)
(f)圖4 不同算法的濾波結(jié)果(a)彩色圖像 (b)原始深度圖I (c)原始深度圖II(d)均值濾波結(jié)果 (e)中值濾波結(jié)果 (f)本文算法結(jié)果Figure 4. Filtering results of different algorithms(a)Color image (b)Original depth image I(c)Original depth image II (d)Mean filtering results (e)Median filtering results (f)Results of the proposed algorithm
將上述處理結(jié)果局部區(qū)域進行放大,如圖5所示,可以看到原始深度圖像存在噪聲并且在邊緣處存在小面積空洞區(qū)域。由圖5(b)和圖5(c)可看出,均值濾波在去噪方面取得了一定效果,但在邊緣保持和空洞修復方面效果較差。由圖5(d)可看出,本文所提出的改進快速雙邊濾波算法利用彩色圖像信息的完整邊緣信息作為引導,在去除噪聲的同時,可較好地保持邊緣信息,并且對小面積的空洞區(qū)域有一定的修復效果。
(b)
(c)
(d)圖5 局部放大效果圖(a)局部放大的原始深度圖 (b)局部放大后的均值濾波結(jié)果(c)局部放大后的中值濾波結(jié)果 (d)局部放大后的本文算法結(jié)果Figure 5.Partially enlarged renderings(a)Partially enlarged original depth map(b)Mean filtering results after partial amplification(c)Median filtering results after partial amplification(d)Results of the proposed algorithm after partial amplification
本文算法與傳統(tǒng)算法對比結(jié)果如圖5所示,結(jié)果顯示相對于傳統(tǒng)算法,本文算法的修復效果更優(yōu)。峰值信噪比(Peak Signal to Noise Ratio,PSNR)[18-19]是一種全參考的圖像質(zhì)量評價指標。為了更加客觀地評價本文所提算法的修復效果,本文引入PSNR來說明該算法的有效性。具體計算式為
(16)
(17)
式中,MSE表示當前圖像X和參考圖像Y的均方誤差(Mean Square Error,MSE);H、W分別為圖像的高度和寬度;n為每像素的比特數(shù),一般取8,即像素灰階數(shù)為256。PSNR的單位是dB,數(shù)值越大表示失真越小。
表2 在ICL-NUIM數(shù)據(jù)集上的客觀指標PSNR對比
由表2可知,圖像質(zhì)量的客觀質(zhì)量指標與圖5所觀察到的圖像修復結(jié)果一致。在對圖像去噪和空洞修復問題上,均值濾波和中值濾波表現(xiàn)出的性能較差,而雙邊濾波和本文所提出的改進的雙邊濾波算法修復效果較好,且本文提出算法具有更明顯優(yōu)勢。
在運行速度方面,針對上述兩幅圖像,采用不同算法對同一深度圖像數(shù)據(jù)進行處理,并計算運行時間。所得到的算法運行時間如表3所示。
表3 在ICL-NUIM數(shù)據(jù)集上的算法運行時間對比
視覺SLAM對算法的實時性要求較高,由上表可知均值濾波算法實時性較好,中值濾波實時性適中,雙邊濾波的實時性較差。而本文算法既有去噪保邊的雙邊濾波的作用,又在運算速度上與中值濾波相近,可滿足視覺SLAM的實時性要求。
本文提出了一種基于彩色圖引導的快速雙邊濾波算法來解決RGB-D深度相機獲取的原始深度圖像存在噪聲和空洞的問題。該算法利用RGB-D深度相機采集的彩色圖像,對其灰度化后,通過灰度圖中的邊緣信息確定濾波權(quán)值,并利用快速高斯變換對算法進行加速,從而完成深度圖像的濾波和小面積的空洞修復。與現(xiàn)有算法的對比實驗證明了該算法對深度圖像修復效果較好且實時性更高。在后期進一步的研究中,可對本文算法進行優(yōu)化,以期修復大面積的空洞區(qū)域。此外,還可通過GPU優(yōu)化來進一步提升算法的運行速度。