本發(fā)明涉及計算機圖像處理中的深度重建領域,尤其是指一種基于相機運動和圖像明暗的Kinect深度重建算法。
背景技術:
隨著近些年一些價格相對低廉的民用深度攝像頭,例如Microsoft Kinect和Asus Xtion Pro等的面世和推廣,深度信息被廣泛用于體感游戲、實時三維重建、增強現(xiàn)實、虛擬現(xiàn)實等各個領域,對深度信息的應用已經(jīng)成為了新型人機交互方式的發(fā)展的重要依托。然而,目前市面上較為流行的民用深度攝像頭大多存在深度探測精度不夠以及干擾噪聲太大的問題,嚴重地影響了基于深度信息的應用產(chǎn)品的質量。因此,如何獲取更為精確的深度信息,對于基于深度信息開發(fā)的應用而言具有非常重要的意義。
正因為上述的需求,深度重建算法越來越受到學術界和產(chǎn)業(yè)界的關注。目前有一種新穎的辦法是結合計算機圖形學中三維重建方面的思路輔助深度圖進行重建,而本專利也是沿用了這個思路。而目前三維重建方面主要方法有從運動信息中恢復三維場景結構、從圖像的明暗情況重構物體形狀、光度立體法等。而本專利主要是利用從運動信息中恢復三維場景結構以及從圖像的明暗情況重構物體形狀兩種方法。
從運動信息中恢復三維場景結構的方法主要利用攝像機的運動過程而動態(tài)生成和修正三維點云,它的典型代表是基于單目攝像頭的SLAM系統(tǒng)。而從圖像的明暗情況重構物體形狀的方法則是利用圖像的明暗情況,建立有效的光照模型并使用優(yōu)化的方法對其進行求解,進而可以獲取目標的表面形狀信息。
對上述兩種方法的思想加以利用和改進,以及利用深度圖與點云二者之間緊密的關系,就可以有效的對深度圖進行優(yōu)化和重建,得到更精確的深度結果。
技術實現(xiàn)要素:
本發(fā)明的目的在于克服現(xiàn)有的民用深度攝像頭的深度探測精度不夠的不足,提供一種基于相機運動和圖像明暗的Kinect深度重建算法,該算法不需要對深度攝像頭進行物理上的改進,也不需要設計復雜的裝置組合,以及不需要傳統(tǒng)深度重建方法中經(jīng)常使用的一般只能局限在實驗室條件下而不具備現(xiàn)實應用價值的復雜而條件苛刻的光照標定步驟,相比傳統(tǒng)的方法而言,具有更大的現(xiàn)實應用價值和意義。
為實現(xiàn)上述目的,本發(fā)明所提供的技術方案為:基于相機運動和圖像明暗的Kinect深度重建算法,包括以下步驟:
1)在Kinect深度攝像頭和RGB攝像頭標定對齊的情況下,通過第三方接口將Kinect采集的數(shù)據(jù)上傳到電腦;
2)從RGB視頻序列中恢復三維場景結構和kinect RGB相機的運動軌跡,得到點云和相機運動關系;
3)結合步驟2)中獲得的點云和相機運動關系,利用圖像的明暗情況信息對圖像深度進行重建。
所述步驟2)包括以下步驟:
2.1)在系統(tǒng)初始化的時候讀入一張RGB圖片并作為關鍵幀,給關鍵幀綁定一個深度圖,深度圖和灰度圖有相同的維度,遍歷深度圖,給每個像素位置賦一個隨機值;
2.2)每讀取一張RGB圖片,都構造如下的代價函數(shù):
其中||·||δ是哈勃算子,rp代表誤差,代表誤差的方差;
哈勃算子的定義如下:
δ是哈勃算子的參數(shù);
誤差函數(shù)的定義rp如下:
rp(p,ζji)=Ii(p)-Ij(w(p,Di(p),ζji))
Ii(p)表示當前幀中像素p的位置的灰度值,ζji表示將i坐標下的三維點旋轉平移到j坐標下的剛體變換的李代數(shù),Di(p)表示參考幀的深度圖中像素p對應的位置的深度值,w(p,Di(p),ζji)表示參考幀i中像素p位置對應的三維點經(jīng)過旋轉平移剛體變換到當前幀中j位置,變換公式如下:
其中X,Y,Z分別表示相機坐標系下的三維點在XYZ三個方向上的坐標;u,v表示像素坐標;fx,fy分別表示X,Y方向上焦距;
方差的定義如下:
其中表示圖片灰度的方差,Vi(p)表示參考幀深度圖像素點p的方差;
2.3)用高斯牛頓迭代法求解步驟2.2)中代價函數(shù)最小時的ζ,得到參考幀和當前幀之間的旋轉平移關系;
2.4)對參考幀灰度圖上所有點求梯度,選取其中梯度大于門限的點;接著對這些點進行篩選;遍歷所有符合要求的點,根據(jù)極線集合搜索這些點在當前幀極線上的對應點;并根據(jù)單目視覺三維重建幾何知識計算點的空間坐標;
2.5)用卡曼濾波器對新得到的深度值與參考幀深度圖中的深度值融合。
所述步驟3)包括以下步驟:
3.1)進行當前幀下的深度攝像頭采集到的深度圖像與單目彩色攝像頭采集到的彩色圖像的對齊;由于彩色攝像頭與深度攝像頭之間存在視場范圍的差異,所以只有二者視場重疊部分才具有有效的深度值,因此對齊后得到的是不完整的深度圖;
3.2)按照深度攝像頭中針孔相機的模型,將該不完整的深度圖進行三維點云的生成;針孔相機模型簡述為:一個空間點的空間坐標[x,y,z]與它在圖像中的像素坐標[u,v,d]之間的關系表述為:
z=d/s
x=(u-cx)·z/fx
y=(v-cy)·z/fy
其中,d是深度圖中每個像素的深度值,s是深度圖的縮放因子,cx與cy是主點的橫縱坐標,fx與fy是橫坐標方向和縱坐標方向的焦距分量;
利用上述公式對每個像素的像素坐標轉換成對應的空間坐標,即可完成深度圖到三維點云的轉換;
3.3)將單目算法中生成的點云與上述不完整的深度圖生成的點云二者使用點對點的迭代最近鄰點ICP算法進行配準得到二者之間的旋轉矩陣R和平移矩陣T;
3.4)根據(jù)上述得到的旋轉矩陣和平移矩陣,將單目算法獲得的點云轉換到不完整的深度圖生成的點云的坐標體系下,并將二者拼接成一個大的點云;
3.5)對于深度圖中由于視場范圍不重疊而形成的深度值無效區(qū)域,對每個處于無效區(qū)域中的像素,計算其空間位置;若該像素對應的空間點位置正好與大的點云中某點空間位置重合,則直接將該點的z坐標也就是深度值賦予該像素作為其深度值;若該像素對應的空間點并未與點云中的點重合,則計算該空間點與它在大的點云中的相鄰點云點的距離之和的平均值,若該值大于某個閾值,則將該值作為該像素值的深度值;
3.6)檢測深度圖中是否還有未有有效值的像素點;若仍有未有有效值的像素點,則使用聯(lián)合雙邊濾波器對深度圖進行深度值填補,確保深度圖中每個像素點都具有深度值;
3.7)使用關于每個像素點的法線向量為變量的擴展內在圖像分解模型函數(shù)作為每個像素點的光照模型函數(shù);使用到的擴展內在圖像分解模型函數(shù)為:
3.8)為圖像中的每個像素計算明暗信息;明暗信息函數(shù)使用零階和一階球諧系數(shù)與點云表面法線向量的線性多項式的矩陣形式表示,也就是:
首先計算出每個點的法線向量,然后通過最小化明暗函數(shù)與真實光照強度間的差值的目標函數(shù),從而求解出明暗函數(shù)的參數(shù)向量,從而為每個像素點確定了明暗函數(shù)值;
3.9)為圖像中的每個像素計算反照率;由于明暗信息函數(shù)僅僅考慮到遠距離光源和環(huán)境光源,因此它是對光照的初步預測,因而為了考慮到鏡面反射、陰影以及近光源造成的效果,需要為每個像素引入不同的反照率;
構造最小化目標函數(shù)為:
其中,ρ是每個像素的反照率,I是每個像素的光照強度,N是全圖迭代操作中當正在操作的像素的一個鄰域,ρk是該鄰域內的像素點,λρ是參數(shù),而且,
3.10)類似步驟3.9)中的方法,為圖像中的每個像素計算由于局部光照差異所導致的光照差異值;
構造最小化目標函數(shù)為:
其中,β是每個像素點的光照差異值,βk是全圖迭代操作中當正在操作的像素的一個鄰域內的像素點;是參數(shù);
3.11)構造明暗模型與實際測量到的光照強度之間的目標函數(shù),并使用改進的深度增強加速算法對該目標函數(shù)進行最小化,從而得到優(yōu)化后的深度圖;
首先將每個像素對應的點云上的點的法線表示成深度圖的梯度形式,即:
其中,
是深度圖的梯度;
然后建立深度優(yōu)化的目標函數(shù)為:
其中,
Δz是深度圖的拉普拉斯變換;是參數(shù);
然后使用加速深度增強算法對深度進行迭代優(yōu)化,如下:
①輸入初始的深度圖,以及球諧系數(shù)以及向量化的反照率向量ρ和光照差異值向量β;
②當深度優(yōu)化目標函數(shù)值一直處于減小狀態(tài)時,循環(huán)執(zhí)行步驟③到⑤;
③更新其中
④更新
⑤更新zk,使得f(zk)更小;
此步驟結束后,再返回單目算法中運行相應的算法步驟,程序將一直執(zhí)行直至得到結束程序的鍵盤輸入或強制關閉程序的操作。
本發(fā)明與現(xiàn)有技術相比,具有如下優(yōu)點與有益效果:
1、本發(fā)明能較好的完善Kinect深度傳感器獲得深度圖,解決僅深度傳感器采集數(shù)據(jù)中有空缺,深度值不準確的缺點。
2、解決了Kinect設備對被測物體深度值范圍的約束,拓寬了可測量深度的范圍。
3、本發(fā)明使用了特別設計的單目測距的對點進行篩選的算法,使得深度的精度遠遠高于普通方法。
4、本發(fā)明使得Kinect能適應復雜的光照變換環(huán)境,同時又解決了Kinect在室外不適用的問題。
5、本發(fā)明在計算物體的全局明暗程度時使用了結合三維表征的表面法線向量的光照模型,更好地對全局光照進行了描述。
6、本發(fā)明考慮并利用了現(xiàn)實光照環(huán)境下光照射在物體上時的全局光照效應和局部光照效應,對處理不同光照下的深度重建更具有魯棒性和實用意義。
7、本發(fā)明使用了深度增強加速算法對深度優(yōu)化步驟進行了算法上的優(yōu)化,大大地減低了優(yōu)化步驟的計算量,減低了算法的運行時間。
具體實施方式
下面結合具體實施例對本發(fā)明作進一步說明。
本實施例所述的基于相機運動和圖像明暗的Kinect深度重建算法,包括以下步驟:
1)在Kinect深度攝像頭和RGB攝像頭標定對齊的情況下,通過第三方接口將Kinect采集的數(shù)據(jù)上傳到電腦。
2.1)在系統(tǒng)初始化的時候讀入一張RGB圖片并作為關鍵幀,給關鍵幀綁定一個深度圖,深度圖和灰度圖有相同的維度,遍歷深度圖,給每個像素位置賦一個隨機值;
2.2)每讀取一張RGB圖片,都構造如下的代價函數(shù):
其中||·||δ是哈勃算子,rp代表誤差,代表誤差的方差,。
哈勃算子的定義如下:
δ是哈勃算子的參數(shù)。
誤差函數(shù)的定義rp如下:
rp(p,ζji)=Ii(p)-Ij(w(p,Di(p),ζji))
Ii(p)表示當前幀中像素p的位置的灰度值,ζji表示將i坐標下的三維點旋轉平移到j坐標下的剛體變換的李代數(shù),Di(p)表示參考幀的深度圖中像素p對應的位置的深度值,w(p,Di(p),ζji)表示參考幀i中像素p位置對應的三維點經(jīng)過旋轉平移剛體變換到當前幀中j位置,變換公式如下:
其中X,Y,Z分別表示相機坐標系下的三維點在XYZ三個方向上的坐標,u,v表示像素坐標,fx,fy分別表示X,Y方向上焦距。
方差的定義如下:
其中表示圖片灰度的方差,Vi(p)表示參考幀深度圖像素點p的方差。
2.3)用高斯牛頓迭代法求解步驟2.2)中代價函數(shù)最小時的ζ,得到參考幀和當前幀之間的旋轉平移關系。
2.4)對參考幀灰度圖上所有點求梯度,選取其中梯度大于門限的點。接著對這些點進行篩選。計算對應點的單位梯度方向g,梯度大小g0。計算g和l的內積,并計算
如果則這個點是合格的。
遍歷所有符合要求的點,根據(jù)極線幾何:
E=[t]xR
l=Fx
計算當前幀中要求解深度的點所在極線的位置。其中K1是RGB相機的內參矩陣,t和R是步驟2.2)中的ζ李代數(shù)分解為旋轉平移的形式。l是當前幀中對應的極線,x是參考幀中要求解深度的像素點的坐標。
搜索這些點在當前幀極線上的對應點。并根據(jù)單目視覺三維重建幾何知識計算點的空間坐標:
根據(jù)
x(p3TX)-(p1TX)=0
y(p3TX)-(p2TX)=0
x(p2TX)-y(p1TX)=0
的形式構造AX=0的矩陣,其中P矩陣是旋轉平移矩陣和內參矩陣的積,piT是P矩陣的第i行,X是求解點的三維坐標。x,y是當前幀中對應點的橫軸方向和數(shù)軸方向的坐標。對A矩陣盡心svd分解,對應特征值最小的特征向量就是點的空間坐標。
2.5)用卡曼濾波器對新得到的深度值與參考幀深度圖中的深度值融合。
更新深度值為:
更新深度的方差為:
其中do是深度圖中原來的深度,dp是新計算得到的深度,σo是深度圖中維護的深度方差,σp是新計算求得深度方差。
3.1)進行當前幀下的深度攝像頭采集到的深度圖像與單目彩色攝像頭采集到的彩色圖像的對齊。由于彩色攝像頭與深度攝像頭之間存在視場范圍的差異,所以只有二者視場重疊部分才具有有效的深度值,因此對齊后得到的是不完整的深度圖。
3.2)按照深度攝像頭中針孔相機的模型,將該不完整的深度圖進行三維點云的生成。針孔相機模型可以簡述如下,一個空間點的空間坐標[x,y,z]與它在圖像中的像素坐標[u,v,d]之間的關系可以表述為:
z=d/s
x=(u-cx)·z/fx
y=(v-cy)·z/fy
其中,d是深度圖中每個像素的深度值,s是深度圖的縮放因子,cx與cy是主點的橫縱坐標,fx與fy是橫坐標方向和縱坐標方向的焦距分量。
利用上述公式對每個像素的像素坐標轉換成對應的空間坐標,即可完成深度圖到三維點云的轉換。
3.3)將單目算法中生成的點云與上述不完整的深度圖生成的點云二者使用點對點的迭代最近鄰點(ICP)算法進行配準得到二者之間的旋轉矩陣R和平移矩陣T。
3.4)根據(jù)上述得到的旋轉矩陣和平移矩陣,將單目算法獲得的點云轉換到不完整的深度圖生成的點云的坐標體系下,并將二者拼接成一個大的點云。
3.5)對于深度圖中由于視場范圍不重疊而形成的深度值無效區(qū)域,對每個處于無效區(qū)域中的像素,我們計算其空間位置。若該像素對應的空間點位置正好與大的點云中某點空間位置重合,則直接將該點的z坐標也就是深度值賦予該像素作為其深度值。若該像素對應的空間點并未與點云中的點重合,則我們計算該空間點與它在大的點云中的相鄰點云點的距離之和的平均值,若該值大于某個閾值,則將該值作為該像素值的深度值。
3.6)檢測深度圖中是否還有未有有效值的像素點。若仍有未有有效值的像素點,則使用聯(lián)合雙邊濾波器對深度圖進行深度值填補,確保深度圖中每個像素點都具有深度值。
3.7)使用關于每個像素點的法線向量為變量的擴展內在圖像分解模型函數(shù)作為每個像素點的光照模型函數(shù)。使用到的擴展內在圖像分解模型函數(shù)為:
3.8)為圖像中的每個像素計算明暗信息。明暗信息函數(shù)使用零階和一階球諧系數(shù)與點云表面法線向量的線性多項式的矩陣形式表示。也就是:
首先計算出每個點的法線向量,然后通過最小化明暗函數(shù)與真實光照強度間的差值的目標函數(shù),從而求解出明暗函數(shù)的參數(shù)向量,從而為每個像素點確定了明暗函數(shù)值。
3.9)為圖像中的每個像素計算反照率。由于明暗信息函數(shù)僅僅考慮到遠距離光源和環(huán)境光源,因此它是對光照的初步預測,因而為了考慮到鏡面反射、陰影以及近光源造成的效果,需要為每個像素引入不同的反照率。
構造最小化目標函數(shù)為:
其中,ρ是每個像素的反照率,I是每個像素的光照強度,N是全圖迭代操作中當正在操作的像素的一個鄰域,ρk是該鄰域內的像素點,λρ是參數(shù),而且,
3.10)類似步驟3.9)中的方法,為圖像中的每個像素計算由于局部光照差異所導致的光照差異值。
構造最小化目標函數(shù)為:
其中,β是每個像素點的光照差異值,βk是全圖迭代操作中當正在操作的像素的一個鄰域內的像素點,是參數(shù)。
3.11)構造明暗模型與實際測量到的光照強度之間的目標函數(shù),并使用改進的深度增強加速算法對該目標函數(shù)進行最小化,從而得到優(yōu)化后的深度圖。
首先將每個像素對應的點云上的點的法線表示成深度圖的梯度形式,即:
其中,
是深度圖的梯度。
然后建立深度優(yōu)化的目標函數(shù)為:
其中,
Δz是深度圖的拉普拉斯變換,是參數(shù)。
然后使用加速深度增強算法對深度進行迭代優(yōu)化:
①輸入初始的深度圖,以及球諧系數(shù)以及向量化的反照率向量ρ和光照差異值向量β。
②當深度優(yōu)化目標函數(shù)值一直處于減小狀態(tài)時,循環(huán)執(zhí)行步驟③到⑤。
③更新其中
④更新
⑤更新zk,使得f(zk)更小。
此步驟結束后,再返回單目算法中運行相應的算法步驟,程序將一直執(zhí)行直至得到結束程序的鍵盤輸入或強制關閉程序的操作。
以上所述之實施例子只為本發(fā)明之較佳實施例,并非以此限制本發(fā)明的實施范圍,故凡依本發(fā)明之形狀、原理所作的變化,均應涵蓋在本發(fā)明的保護范圍內。