蔡旭航 朱留存 張震 張恒艷 程敬迪
(1.揚州大學信息工程學院 江蘇省揚州市 225127 2.北部灣大學先端科學技術研究院 廣西壯族自治區欽州市 535011)
Kinect 相機是微軟推出的XBOX360 的一款外設。由于其實用性強,成本低廉等優點,已經被廣泛應用于三維重建[1],目標跟蹤[2]等場合。深度圖是由深度相機獲取的一種存儲RGB 圖深度信息的圖像,Kinect 相機獲取深度圖主要通過紅外投射散斑和紅外探測器探測散斑來獲取場景的深度信息。然而使用Kinect 相機獲取的深度圖容易出現深度為0 的空洞區域。產生這種情況主要有兩個原因[3]:
(1)由于距離相機較近的物體會遮擋住較遠處的物體,而紅外投射的散斑無法投射到被當前對象遮擋的對象上而導致紅外探測器無法捕捉到任何信息,從而使深度像素變為0,如圖1 所示。
(2)由于材料的不同會導致紅外光投射到物體表面后出現多種行為,而只有光吸收材料才能接收由Kinect 投射的散斑,當遇到反光材料和透光材料時紅外探測器則無法接收到紅外投射器投射的紅外光如圖2(b)和圖2(c)所示。
為了解決直接用Kinect 獲取的深度圖像中存在大量空洞的問題,許多研究者都提出了深度圖像的修復算法。文獻[4]提出了一種像素濾波的方法,將5×5 濾波器模板分為內帶和外帶。然后統計0像素周圍的有效像素,如果有效像素大于閾值,則出現最多的深度值將代替0 像素。該方法以高置信度填充像素值,但僅適應于小空洞。聯合雙邊濾波是對雙邊濾波的改進,通過彩色圖像的引導對深度圖像進行濾波,文獻[5]就采用聯合雙邊濾波的方法進行深度圖像的空洞填充任務,并且利用快速高斯變換替換高斯核函數使算法的運行速度提升。該算法對大面積空洞的填充效果較好,然而該方法降低了原始場景物體邊緣輪廓的清晰度。由于單一濾波器的局限性,而深度圖像的空洞類型不盡相同,因此有的研究者就提出了將多種濾波器結合進行深度圖像濾波的方法。文獻[6]提出利用超像素分割將圖像的深度劃分為無空洞區域、小空洞區域、大空洞區域和全空洞區域四種,然后針對不同的區域分別使用不同的濾波方法修復空洞。由于使用Kinect 相機采集的圖像是連續幀,而相鄰幀間圖像的相機位姿變化不大,因此文獻[7]提出了一種利用多幀深度圖的時間相關性檢測背景區域,結合彩色圖像的高斯混合模型,填補空洞區域的像素。
由于Kinect 獲取的深度圖像空洞噪聲類型較為復雜,而單一類型的修復方法無法面面俱到,因此本文先將圖像中的空洞噪聲分類再實施修復。為了提高運行速度,同時也為了提高深度修復的準確性,我們提出了在法線感知鄰域內修復深度圖像。

圖1:前景遮擋導致深度圖黑影區域圖示

圖2:對于不同材料紅外光束行為圖示
前面提到,由于Kinect 相機自身特點的原因,在獲取深度圖像時會出現兩種類型的空洞噪聲:由前景物體遮擋產生的空洞噪聲和由物體表面反射或折射產生的空洞噪聲。由前景物體遮擋產生的空洞噪聲主要出現在物體的邊緣區域,并且這類空洞噪聲一般都比較狹長如圖3(b)中的(1)所示。由表面反射產生的空洞噪聲主要出現在物體的表面,并且這類空洞噪聲面積較大如圖3(b)中的(2)所示。
在深度圖中,除了上述這兩類空洞噪聲以外還有一種,這類噪聲的出現主要是因為Kinect 相機的RGB 圖像傳感器和深度圖像的傳感器有略微的偏移,對于同一幀的深度圖像和彩色圖像坐標無法完全匹配,需要通過配準使它們的坐標對齊,然而這一操作的結果會導致在深度圖像的邊緣部分會出現大面積深度為0 的空洞噪聲如圖3(b)中框(3)所示,本文將這一類噪聲稱為匹配深度噪聲。

圖3:深度圖像中的三類空洞噪聲

圖4:法線感知非局部鄰域示意圖

圖5:深度圖修復結果比較
在進行正式的濾波之前我們通過Kinect 自帶的算法獲取已經匹配好的深度與彩色圖像,并且在這一過程中獲取匹配深度噪聲的標記,在本文種我們將這一種空洞噪聲稱為第一類噪聲。為了獲取深度圖中物體邊界空洞噪聲我們首先對RGB圖像實行紋理濾波處理,這一步驟是為了使后面的邊緣檢測算法盡量不受到物體表面紋理的影響,我們采用文獻[8]提出的紋理濾波方法,該方法在濾除物體表面紋理的同時能很好地保留物體的邊界。然后我們使用Sobel 算子對圖像進行邊緣檢測獲得圖像中物體的邊緣,再將檢測得到的物體邊緣膨脹后對應到深度圖像中。當深度圖中像素為0 且檢測為物體邊緣時,就是由前景遮擋產生的空洞噪聲,本文將這一類噪聲稱為第二類噪聲。對于不屬于一類和二類噪聲的0 值深度,我們將其標記為第三類噪聲,該類噪聲多為存在于物體表面由光反射或吸收的原因而產生的噪聲。
在我們的方法中,我們需要在一個足夠大的窗口內進行搜索,同時我們計算在這一窗口內深度非0 點的深度置信度。在計算深度置信度前我們需要確定一個非局部鄰域,對于每一個待修復的深度像素點p,我們記它的非局部鄰域為,其中q 是鄰域內的點。受到文獻[9]的啟發我們根據表面法線來定向搜索區域,使搜索區域在屏幕空間中各項異性,從而具有法線感知。該策略用于計算與待修補深度像素處于同一空間平面內的深度非0 像素點的深度置信度。
法線感知的空間切平面的二維圖像投射范圍的計算如式(1):

假設像素點p 為(xp,yp)T它的鄰域像素點q 坐標為(xq,yq)則有:

其中x=(xp,yp)T,是協方差矩陣。
由于考慮到圖像空間中的各向同性分布則有:

其中r 是包括陰影和非陰影樣本的采樣半徑。雖然樣本分布應該是空間各向同性的,但是由于真實場景中的大多數表面不面向觀看方向,這導致圖像空間中的各向異性分布。假設樣本各向同性地分布在表面切平面上,然后基于以下等式將它們轉換到圖像空間:

其中x'表示曲面切面中的坐標。M 表示從切平面到圖像平面的旋轉矩陣變換,該矩陣可以通過表面法線計算得到。由(4)式可以得到x-u=M'x',同時M'是從M 中提取前兩行和前兩列形成的。圖像平面的協方差矩陣∑由下式計算得到:

法線感知的非局部鄰域其實就是將每個像素構建的圓形空間法切面投射到二維圖像中變成橢圓形,如圖4 所示。使用法線感知的非局部鄰域不僅縮小了鄰域像素的搜索范圍,減少了運行時間,而且保證了查找的鄰域像素與中心像素點處于相同的空間平面上,提高了深度修補的準確性。
在進行修復階段我們使用法線感知非局部鄰域窗口遍歷深度圖中每一個深度值為0 的像素點,由于深度值為0 的像素點的法線無法計算,我們使用該像素點距離最近的非0 像素點的法線作為該像素點的法線計算該點的非局部鄰域。對于每一個0 像素點,計算其非局部鄰域內每個深度值非0 像素點的深度置信度。對于不同類型的深度空洞由于其特點不同,我們采用不同的深度置信度計算策略。對于第二類噪聲,我們使用式(6)計算點p 和其非局部鄰域內的點q 之間的權重系數。該權重表明與中心點灰度接近且距離中心點越近的像素點權重越大。其中x 和y 分別表示像素的橫坐標和縱坐標,I 表示像素的灰度值,σd和σr都是高斯函數的標準差。

對于第三類噪聲,由于該類空洞噪聲是由物體表面材料的反射或吸收效應引起的(即表面的反射率),而反射率可以通過圖像的色度表示[10],為此我們在第三類噪聲的權重系數中加入色度權重的影響,色度權重的計算如式(7)所示。該式中,ch 表示像素點的色度,σc同樣是高斯函數的標準差。得到色度權重后再通過式子(8)得到第三類噪聲的權重系數。

在空洞噪聲的修復階段,我們將針對不同類型的空洞采用不同的修復策略。
(1)對于第一類噪聲,由于它是由深度圖與彩色圖像匹配產生的,因此在彩色圖像中有幫助恢復深度圖中空洞噪聲的信息,同時由于該類噪聲面積較大,且在深度圖中沒有對應位置相似的信息,因此對于該類噪聲我們考慮使用RGB 圖像引導的聯合雙邊濾波對該類噪聲進行修復。
(2)對于第二類噪聲,當非局部鄰域遍歷到該類噪聲時,我們首先計算鄰域內所有深度非0 像素點的深度權重,并且挑選出5個權重最大的深度。由于第二類空噪聲是由前景物體遮擋后景物體所產生的,因此需要修復的噪聲也是深度值較大的后景噪聲,因此在挑選的5 個權重最大的深度里,我們選擇深度最大值作為待修復點的深度。
(3)對于第三類噪聲,我們同樣計算待修復點的非局部鄰域內所有深度非0 像素點的深度權重,最終挑選權重最大的深度值作為待修復點的深度值。
為了驗證本文算法的可行性,實驗選取Middlebury 標準數據庫[11]和RGB_D 數據庫中的深度圖像進行修復,并且將修復的結果與文獻[4]和文獻[5]算法的結果進行比較。
圖5(c)是文獻[4]算法的結果,該算法對于深度圖中較小的空洞具有較好的修復結果,然而對于大面積空洞該算法的修復效果并不明顯。從圖5(c)(1)和圖5(c)(4)可以看出這一結論。圖5(d)是文獻[5]算法的結果,該算法可以修復在物體表面的一些大面積的深度空洞,但是對于由圖像匹配產生的第一類空洞修復效果較差,邊緣不清晰。該結論可以從圖5(d)的(2)、(3)和(4)行可以看出。從圖5(e)可以看出,本文算法對于三類空洞噪聲都具有較好的修復結果,同時從圖1(e)的(3)行的對比可以看出,對于圖像右下角的電腦顯示屏文獻[4]的算法無法修復大面積的空洞噪聲,而文獻[5]的算法雖然可以修復大面積的空洞噪聲,但是修復后的物體邊緣被模糊化,而本文算法在修復空洞的同時也能很好的保留物體的深度邊緣不被模糊化。
針對Kinect 相機采集到的深度圖像存在空洞噪聲的問題,本文提出了一種基于法線感知非局部鄰域的噪聲去除方法。該方法首先將深度圖中空洞噪聲進行分類,然后根據不同噪聲的類型在非局部鄰域內采用分別采用聯合雙邊濾波和不同的深度置信度策略填充空洞噪聲。實驗結果表面,該算法可以有效填充大面積的空洞噪聲,同時也較好的保留了物體的邊緣。該算法可以作為通過深度圖像獲取點云前的預處理工作,具有一定的實際意義。