賈佳璐 應(yīng)忍冬 潘光華 郭維謙 劉佩林
(上海交通大學(xué)電子信息與電氣工程學(xué)院 上海 200240)
1963年,Roberts提出了從二維圖像中重建三維信息的算法[1],從二維圖像中提取出特征點(diǎn),然后利用特征點(diǎn)進(jìn)行多視圖匹配,實(shí)現(xiàn)三維場景的重建。二維圖像重建算法復(fù)雜度較高且真實(shí)感較低。隨著消費(fèi)級(jí)深度相機(jī)的出現(xiàn),三維信息變得觸手可及,三維重建領(lǐng)域也實(shí)現(xiàn)了高速的發(fā)展。ToF相機(jī)是一種主動(dòng)測距的3D相機(jī),能夠直接獲取物體的深度信息和灰度信息?;谏疃刃畔⑦M(jìn)行三維重建的算法計(jì)算復(fù)雜度明顯低于基于二維圖像的重建算法,同時(shí)重建的模型精度也更高,其中最有代表性的是微軟研究院在2012年提出的KinectFusion[2],其利用多幀深度圖像重建了三維場景。吳劍峰等[3]提出了一種快速的Kinect三維重建技術(shù),并將其與實(shí)際的3D打印結(jié)合,實(shí)現(xiàn)優(yōu)化。近年來,隨著神經(jīng)網(wǎng)絡(luò)的飛速發(fā)展,其除了在二維圖像的識(shí)別分割等方面,也已經(jīng)應(yīng)用到了三維重建領(lǐng)域,例如斯坦福大學(xué)提出的基于RGB-D圖像重建點(diǎn)云模型的PointNet網(wǎng)絡(luò)[4],江航等[5]也提出了對室內(nèi)場景CAD模型的重建網(wǎng)絡(luò)。但是,神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)的重建主要用于對遮擋部分、背面部分的預(yù)測,目前精確的重建仍然需要依賴多視角圖像的精確匹配。KinectFusion最關(guān)鍵的算法步驟是基于ICP匹配結(jié)果利用TSDF進(jìn)行點(diǎn)云融合重建物體表面,并且采用GPU并行計(jì)算使整個(gè)算法可以實(shí)時(shí)進(jìn)行。但是我們發(fā)現(xiàn)該算法對于小物體的重建存在較大的偏差,重建精度受影響較大。為了匹配Smart-ToF相機(jī)的特性,本文提出了一個(gè)新的物體三維重建的流程,并提出了針對深度圖的多邊濾波算法,對深度圖進(jìn)行預(yù)處理,將多邊濾波算法與雙邊濾波和中值濾波等算法對比,明顯提高了深度圖的精度。同時(shí)本文提出了彌補(bǔ)空洞的算法,能夠有效處理因?yàn)榉垂獾仍蛟斐傻目斩?,提高了重建的精度?/p>
KinectFusion重建算法主要流程包括數(shù)據(jù)的預(yù)處理、計(jì)算點(diǎn)云法向量并進(jìn)行位姿估計(jì)、點(diǎn)云的融合和表面重建。數(shù)據(jù)的預(yù)處理主要包括深度圖濾波、深度圖轉(zhuǎn)換為三維點(diǎn)云,三維重建部分主要包括求解點(diǎn)云數(shù)據(jù)法向量,利用帶法向量的點(diǎn)云進(jìn)行相機(jī)位姿估計(jì),然后實(shí)現(xiàn)點(diǎn)云融合與表面重建。
預(yù)處理主要分為兩步:第一步是利用雙邊濾波器對深度圖進(jìn)行去噪;第二步是將深度圖像轉(zhuǎn)換為以相機(jī)坐標(biāo)為原點(diǎn)的點(diǎn)云數(shù)據(jù)。雙邊濾波結(jié)合了圖像空間鄰近性和像素相似性兩部分,相比于高斯濾波、中值濾波等算法,能夠在去噪的同時(shí)保留圖像的邊緣細(xì)節(jié)。深度圖的前后景分界明顯,所以具有邊緣非常銳利的特性,雙邊濾波可以避免出現(xiàn)邊緣被模糊的現(xiàn)象。雙邊濾波應(yīng)用于深度圖像時(shí),用濾波核內(nèi)的周圍像素深度值的加權(quán)平均表示中心像素的深度值,所用的加權(quán)平均基于高斯分布,權(quán)重系數(shù)包含像素的歐式空間距離和像素深度值的距離,差值越大所占權(quán)重越小。
(1)
E(q)=(i-k)2+(j-l)2
(2)
F(q)=‖f(i,j)-f(k,l)‖2
(3)
式中:f(i,j)是圖像在點(diǎn)(i,j)處的像素值;f(k,l)是圖像在模板窗口Ω的中心坐標(biāo)點(diǎn)(k,l)的像素值;Nσ(t)=exp(-t2σ-2)是高斯函數(shù);σs、σd是不同的高斯函數(shù)的標(biāo)準(zhǔn)差;Wp是歸一化系數(shù)。除了對于深度圖像的濾波,很多研究人員提出了對點(diǎn)云進(jìn)行濾波的算法。廖昌粟等[6]提出了根據(jù)密度濾波和點(diǎn)法矢量進(jìn)行三維點(diǎn)云的濾波,能夠在三維點(diǎn)云域?qū)崿F(xiàn)去噪光滑算法,我們在改進(jìn)的三維重建算法中也加入了對點(diǎn)云的濾波。
將深度圖投影變換成相機(jī)空間坐標(biāo)的3D點(diǎn)云需要利用相機(jī)的內(nèi)參進(jìn)行。
(4)
式中:(u,v)是深度圖的點(diǎn)坐標(biāo),d是該點(diǎn)對應(yīng)的深度值,kx,ky,cx,cy是相機(jī)內(nèi)參,(x,y,z)是(u,v)對應(yīng)的點(diǎn)云坐標(biāo)。
位姿估計(jì)主要分為兩個(gè)過程:先計(jì)算點(diǎn)云的法向量,然后用帶法向量的點(diǎn)云利用ICP算法進(jìn)行位姿估計(jì)。每個(gè)空間點(diǎn)云對應(yīng)的法向量可以利用像素坐標(biāo)的相鄰點(diǎn)進(jìn)行計(jì)算。
Nk(u)=v[(P(u+1,v)-P(u,v))×
(P(u,v+1)-P(u,v))]
(5)
式中:v[x]=x/‖x‖,利用計(jì)算法向量的定義求得三點(diǎn)構(gòu)成的平面的法向量。
基于深度相機(jī)的位姿估計(jì)主要利用稠密點(diǎn)云進(jìn)行ICP匹配[7],ICP是迭代最近點(diǎn)匹配方法,可以利用相鄰兩幀的有向點(diǎn)云數(shù)據(jù)進(jìn)行ICP匹配,稱為frame-to-frame算法,也可以利用當(dāng)前幀與匹配后的模型投影回上一幀位姿的點(diǎn)云數(shù)據(jù)進(jìn)行ICP匹配,稱為frame-to-model算法。當(dāng)匹配的點(diǎn)云是通過全部點(diǎn)云投射到上一個(gè)相機(jī)平面的方式獲得時(shí),這種方法獲得的點(diǎn)云比Kinect原始采集的數(shù)據(jù)噪聲會(huì)減少很多,所以frame-to-model算法得到的匹配結(jié)果會(huì)優(yōu)于frame-to-frame算法。ICP算法還可以利用K-D樹、精簡點(diǎn)云等算法進(jìn)行加速,從而提高效率,例如黃潛等[8]提出的通過精簡點(diǎn)云的快速點(diǎn)云匹配算法。
點(diǎn)云融合與表面重建主要通過截?cái)喾?hào)距離場(Truncated Signed Distance Field,TSDF)算法實(shí)現(xiàn)[9]。TSDF算法對距離表面較近的幾層體素存儲(chǔ)其到重建表面的最小距離值,對較遠(yuǎn)的體素用固定數(shù)值表示,這樣可以減少內(nèi)存消耗和冗余點(diǎn)。當(dāng)體素在表面的前面時(shí),TSDF取正值,當(dāng)體素在表面的后面時(shí),TSDF取負(fù)值。新的一幀深度圖獲取后,更新點(diǎn)云的同時(shí)更新并融合TSDF的值。表面重建是指將離散點(diǎn)云連接成連續(xù)的可視等值面,移動(dòng)立方體法將數(shù)據(jù)場中八個(gè)相鄰位置的數(shù)據(jù)分別存放在一個(gè)四面體體元的八個(gè)頂點(diǎn)處, 然后當(dāng)其中一個(gè)大于給定的常數(shù)T而另一個(gè)小于T時(shí),這個(gè)棱上一定有一個(gè)等于T的位置。我們可以計(jì)算該體元中十二條棱和等值面的交叉點(diǎn),構(gòu)建出三角面,再連接所有的三角面形成等值面,合并所有體素(立方體)的等值面即可重建出連續(xù)完整的表面。
圖像濾波有很多種算法,雙邊濾波在深度圖的濾波中表現(xiàn)突出,去除噪聲的同時(shí)可以保持邊緣銳利性,但是雙邊濾波只利用了深度圖像素鄰域的相關(guān)性,然而ToF相機(jī)獲得深度圖的同時(shí)還可以獲得強(qiáng)度圖像。強(qiáng)度圖像與深度圖的數(shù)據(jù)具有一定的相關(guān)性,Victor等[10]進(jìn)行實(shí)驗(yàn)測試了被測物體的強(qiáng)度圖與深度誤差之間的相關(guān)性,結(jié)果如圖1所示。
圖1 距離的噪聲方差與強(qiáng)度圖的關(guān)系
可以看出,被測量物體的表面越亮,噪聲越小,所以我們將ToF相機(jī)采集得到的強(qiáng)度圖作為濾波的一個(gè)參考輸入,加入亮度差與亮度本身作為權(quán)重系數(shù),改進(jìn)雙邊濾波算法。
Nσd(‖f(i,j)-f(k,l)‖2)×
Nσg1(‖g(i,j)-g(k,l)‖2)×
Nσg2((-g(i,j))2)×Dm(q)]
(6)
式中:g(i,j)為強(qiáng)度圖像在(i,j)處的強(qiáng)度值;σg1和σg2分別為強(qiáng)度差和強(qiáng)度的高斯函數(shù)的標(biāo)準(zhǔn)差。
受到物體材質(zhì)、拍攝角度等影響,我們獲得的深度圖會(huì)包含空洞,可以利用周圍像素值預(yù)測空洞處的深度值。ToF相機(jī)獲得的深度圖的空洞值一般用0或者一個(gè)測距范圍外的固定值表示,我們需要先判斷出空洞位置,然后以需要填補(bǔ)的空洞為中心向八個(gè)方向依次搜索,如圖2所示。
圖2 補(bǔ)深度圖的空洞值搜索方向
按照0-7的順序搜索,直到當(dāng)前方向搜到有效值后搜索下一個(gè)方向,每個(gè)方向都獲得有效值之后計(jì)算加權(quán)平均值作為空洞像素的深度值,權(quán)重系數(shù)為有效值距離空洞的歐式距離。計(jì)算空洞的深度值Dh(u)公式如下:
(7)
在重建過程中,將物體擺在一個(gè)展臺(tái)上,首先利用深度信息的的梯度變化進(jìn)行前后景分割,將物體與背景分離。將物體分割之后,無效點(diǎn)云數(shù)量將減少,點(diǎn)云匹配效率得到提高,同時(shí)沒有背景干擾,可以更高質(zhì)量的重建目標(biāo)物體。
為了更好地重建物體完整表面,本文提出了一個(gè)新的三維重建算法的流程,主要包含五個(gè)步驟:
1) 讀入深度圖之后,利用多邊濾波算法結(jié)合灰度圖對圖像進(jìn)行去噪,提升圖像質(zhì)量,同時(shí)搜索周圍有效像素值,并加入距離權(quán)重補(bǔ)全空洞值;
2) 將深度圖轉(zhuǎn)換為點(diǎn)云,同時(shí)對點(diǎn)云進(jìn)行濾波,去除前后景邊緣產(chǎn)生的飛散點(diǎn);
3) 利用frame-to-model的方法進(jìn)行點(diǎn)云的匹配,先提取關(guān)鍵點(diǎn)進(jìn)行粗匹配,然后再進(jìn)行精匹配,求解相機(jī)位姿,最后利用圖優(yōu)化進(jìn)行后端優(yōu)化;
4) 去除冗余點(diǎn)云,然后求解點(diǎn)云的法向量;
5) 利用泊松重建算法將帶有法向量的點(diǎn)云模型重建得到表面。
由深度圖得到點(diǎn)云可以利用式(4)計(jì)算,經(jīng)過深度圖濾波的點(diǎn)云數(shù)據(jù)與原始點(diǎn)云數(shù)據(jù)相比,表面得到了很好的平滑,但是還有一類噪聲,在前后景的邊緣處仍會(huì)有一條過渡帶,還有一些離群點(diǎn),我們統(tǒng)一稱這類噪聲為飛散點(diǎn)。在點(diǎn)云匹配前需要濾除飛散點(diǎn)從而為相機(jī)位姿與表面重建提供優(yōu)化后的數(shù)據(jù)。
本文利用統(tǒng)計(jì)濾波去除飛散點(diǎn)。統(tǒng)計(jì)濾波的原理是對每個(gè)點(diǎn)Pc計(jì)算到它的臨近點(diǎn)們Pi的平均距離,得到一個(gè)高斯分布的結(jié)果,均值M和方差s2決定了高斯分布的形狀,平均距離在標(biāo)準(zhǔn)范圍之外的點(diǎn)判定為飛散點(diǎn)并在點(diǎn)云中刪除。
(8)
式中:Ωc是點(diǎn)Pc的鄰域區(qū)域。P0的空間坐標(biāo)為(0,0,0),即把距離大于閾值的點(diǎn)統(tǒng)一置為0,然后濾除。
利用點(diǎn)云的配準(zhǔn)結(jié)果估計(jì)相機(jī)位姿,包含三個(gè)步驟:先粗匹配,再精匹配,最后利用圖優(yōu)化進(jìn)行全局優(yōu)化。
粗匹配首先提取圖像的關(guān)鍵點(diǎn),本文通過高斯差分算子提取深度圖像的角點(diǎn)作為匹配關(guān)鍵點(diǎn),對深度圖在相同核大小和不同標(biāo)準(zhǔn)差下做高斯濾波,得到圖像Iσ1、Iσ2和Iσ3。然后計(jì)算相鄰兩個(gè)圖像的差分,得到DoG1、DoG2和DoG3三個(gè)差分圖像,遍歷DoG2,判斷DoG2(i,j)是否為三個(gè)差分圖像中m×m鄰域的極值點(diǎn),如果是極值點(diǎn)則選擇為角點(diǎn)Pk(u)。
Iσi=Dk(u)*Nσi(u)
(9)
DoGi=Iσi-Iσi-1
(10)
式中:Nσi(u)是標(biāo)準(zhǔn)差分別為σi高斯函數(shù)。利用選取的角點(diǎn)進(jìn)行ICP匹配,實(shí)現(xiàn)粗匹配過程。ICP求解相機(jī)位姿的原理為:通過最小二乘求解,得到使誤差平方和最小的旋轉(zhuǎn)矩陣R0和平移矩陣t0。
(11)
精匹配利用所有有效點(diǎn)云求解R、t,利用R0、t0作為初始值,可以減少迭代次數(shù)從而降低計(jì)算量。ICP算法結(jié)合圖優(yōu)化可以全局優(yōu)化相機(jī)位姿,得到最終軌跡。
(12)
式中:s、j、k是點(diǎn)集的編號(hào)。得到的初始估計(jì)作為圖模型的輸入,然后利用Marquard的方法來解算圖模型[11]。
我們重建表面前先計(jì)算點(diǎn)云的法向量N(u),然后通過泊松重建算法實(shí)現(xiàn)表面的重建,泊松重建實(shí)質(zhì)也是一種隱函數(shù)的重構(gòu)方式,融合了全局與局部的優(yōu)點(diǎn)。首先利用點(diǎn)云的法向量判斷表面的內(nèi)外,表面內(nèi)用1表示,表面外用0表示,定義指示函數(shù)χM(x)估計(jì)物體表面為:
(13)
式中:M表示表面內(nèi)部區(qū)域。利用向量空間V和指示函數(shù)χM(x)相等求解泊松表面:
▽χ=V
(14)
深度圖濾波與補(bǔ)空洞算法利用斯坦福大學(xué)開發(fā)的仿真數(shù)據(jù)集SUNCG[12]進(jìn)行測試,隨機(jī)從仿真環(huán)境中采集500幅無噪聲的深度圖以及加入了Kinect仿真噪聲的深度圖。利用PSNR和SSIM評(píng)估濾波結(jié)果,PSNR可以評(píng)估去除噪聲的效果,SSIM可以評(píng)估結(jié)構(gòu)相似性。由于深度圖具有邊緣銳利的特性,所以濾波后邊緣保持的良好程度是重要指標(biāo),因此我們提出了計(jì)算PSNR時(shí)增加邊緣權(quán)重的評(píng)估方法:
(15)
SSIM=l(x,y)α·c(x,y)β·s(x,y)γ
(16)
式中:peak為該圖像的峰值即最遠(yuǎn)有效距離;Ni和Nj分別是圖像的像素寬度和高度;mij是(i,j)像素值在整幅圖的權(quán)重,所有權(quán)重加和結(jié)果為Ni×Nj;x是待評(píng)估的深度圖;y是無噪聲的深度圖作為真值;l、c、s分別衡量了亮度、對比度和結(jié)構(gòu)相似度。
(17)
(18)
(19)
式中:μx、μy為x和y的均值;σx、σy為標(biāo)準(zhǔn)差;σxy為協(xié)方差;c1、c2、c3都是為了避免除零的常數(shù)值。
從SUNCG數(shù)據(jù)集當(dāng)中采集得到500幅深度圖,經(jīng)過各種濾波后的圖片利用PSNRv與SSIM評(píng)估,并計(jì)算500幅深度圖數(shù)據(jù)的平均值,結(jié)果如表1所示。計(jì)算過程中無效像素值不進(jìn)行計(jì)算。
表1 濾波結(jié)果對比
選取出一組深度圖及各種算法濾波結(jié)果進(jìn)行可視化對比,結(jié)果如圖3所示。中值濾波雖然在PSNRv方面低于雙邊濾波,但是具有填補(bǔ)小空洞的能力,多邊濾波與補(bǔ)空洞算法能夠得到更接近真值的結(jié)果。
圖3 SUNCG深度圖濾波結(jié)果與補(bǔ)空洞結(jié)果
利用ToF實(shí)際采集了實(shí)驗(yàn)室各個(gè)場景的深度圖,對濾波與補(bǔ)空洞算法進(jìn)行了實(shí)際測試,其中辦公桌場景測試結(jié)果如圖4所示,左上角電腦屏幕因?yàn)榉垂庠斐傻目斩幢粶?zhǔn)確填補(bǔ),同時(shí)平面也被很好的平滑。
(a) 原始采集圖 (b) 濾波與補(bǔ)空洞之后的圖圖4 Smart-ToF 采集的深度圖濾波與補(bǔ)空洞結(jié)果
對多個(gè)物體進(jìn)行了重建,隨機(jī)選取一個(gè)物體的三維重建的模型結(jié)果,如圖5所示,KinectFusion重建結(jié)果部分表面出現(xiàn)明顯缺口,本文方法可以完整重建物體的表面,并且能夠很好地將物體與背景分離。
(a) KinectFusion的重建結(jié)果 (b) 本文算法的重建結(jié)果圖5 重建結(jié)果對比
本文提出了結(jié)合強(qiáng)度圖的深度圖像多邊濾波算法以及補(bǔ)空洞算法,并提出了針對物體的三維重建改進(jìn)算法。從峰值信噪比與結(jié)構(gòu)相似性等方面對濾波算法進(jìn)行評(píng)估,結(jié)果表明本文算法各方面均優(yōu)于雙邊濾波等算法,但是補(bǔ)空洞對于邊緣處缺失的深度值的填補(bǔ)仍會(huì)出現(xiàn)部分模糊問題,后續(xù)研究將繼續(xù)改善。本文提出的重建算法能夠完整、精確地重建出物體的表面,比KinectFusion更加適合于單個(gè)物體的三維重建,可以應(yīng)用于文物掃描保存、商品展示等多個(gè)領(lǐng)域。