本發(fā)明涉及三維重建技術(shù)領(lǐng)域,具體為一種Volume重建范圍的擴展方法及系統(tǒng)。
背景技術(shù):
Kinect可以實時獲得距離傳感器、彩色攝影機的原始數(shù)據(jù)流,并提供較高精度的深度數(shù)據(jù)和較高清晰度的彩色圖像數(shù)據(jù),因此在三維場景重建及增強現(xiàn)實等領(lǐng)域有廣泛應(yīng)用。
目前有較多在三維場景重建的算法和方案,例如:
微軟研究院開發(fā)的KinectFusion項目,利用kinect獲得實時深度圖,將TSDF和權(quán)重數(shù)據(jù)存儲在Volume中,并存儲于GPU顯存中,但是,該算法的Volume位置是固定的,位于第一幀相機所在位置的正前方,且重建的空間區(qū)域有限,如果要擴大重建區(qū)域,需降低Volume的分辨率或者增大體素所代表的長度,但會導(dǎo)致重建的點云稀疏,重建質(zhì)量下降;
Henry Roth等人提出一種Moving Volume的算法,其過程為:重新映射兩個Volume重合的區(qū)域使得新的Volume在開始階段就擁有了部分TSDF值,讓后續(xù)幀能夠快速匹配上,因此GPU顯存中保存了兩倍的Volume空間,Volume的位置跟隨相機位置發(fā)生移動,擴大了重建區(qū)域,但是,Volume之間的數(shù)據(jù)重新影射需要較多時間;
Zeng M等人在使用了八叉樹(Octree)數(shù)據(jù)結(jié)構(gòu)來節(jié)省顯存空間的使用,僅用一個Voxel來表示一整片連續(xù)的空的區(qū)域,此方法與Voxel Hashing一樣,都設(shè)計了巧妙的數(shù)據(jù)結(jié)構(gòu),希望充分利用有限的顯存空間,從而擴展重建范圍。
綜上可知,上述各個方法算法在擴展重建范圍和提高重建精度與速度的能力仍然是有限的。
技術(shù)實現(xiàn)要素:
為了克服上述所指出的現(xiàn)有技術(shù)的缺陷,本發(fā)明人對此進行了深入研究,在付出了大量創(chuàng)造性勞動后,從而完成了本發(fā)明。
具體而言,本發(fā)明所要解決的技術(shù)問題是:提供一種Volume重建范圍的擴展方法,以解決上述現(xiàn)有的重建范圍的擴展算法在擴展重建范圍和提高重建精度與速度的能力仍然是有限的的技術(shù)問題。
為解決上述技術(shù)問題,本發(fā)明的技術(shù)方案是:
一種Volume重建范圍的擴展方法,所述方法包括下述步驟:
在GPU顯存中申請一個空的Volume,控制Volume計數(shù)器加一,并對空的Volume進行初始化操作;
對相機的移動進行跟蹤,獲取相機當前的位姿參數(shù),并判斷相機當前的位姿參數(shù)是否在當前Volume所對應(yīng)的位姿閾值參數(shù)范圍內(nèi);
當相機當前的位姿參數(shù)在當前Volume所對應(yīng)的位姿閾值參數(shù)范圍內(nèi)時,則執(zhí)行場景重建的動作;
當相機當前的位姿參數(shù)不在當前Volume所對應(yīng)的位姿閾值參數(shù)范圍內(nèi)時,則判斷相機當前的位姿參數(shù)是否在其他已申請的Volume所對應(yīng)的位姿閾值范圍內(nèi);
當相機當前的位姿參數(shù)在其他已申請的所對應(yīng)的位姿閾值范圍內(nèi)時,則切換到對應(yīng)的Volume上,并執(zhí)行所述場景重建的動作的步驟;
當相機當前的位姿參數(shù)不在其他已申請的所對應(yīng)的位姿閾值范圍內(nèi)時,則根據(jù)Volume計數(shù)器的累加結(jié)果判斷當前已申請的Volume的數(shù)量是否大于預(yù)設(shè)值;
當當前已申請的Volume的數(shù)量大于等于預(yù)設(shè)值時,則結(jié)束Volume重建范圍的擴展;
當當前已申請的Volume的數(shù)量小于預(yù)設(shè)值時,則返回執(zhí)行所述在GPU顯存中申請一個空的Volume的步驟。
作為一種改進的方案,所述對空的Volume進行初始化操作的步驟具體包括下述步驟:
在GPU顯存中申請512M的顯存空間,將512M的顯存空間劃分為512×512×512個體素;
對重建區(qū)域內(nèi)的每一個體素進行掃描操作,所述第一個Volume位于所述相機第一幀的正前方。
作為一種改進的方案,所述對相機的移動進行跟蹤,獲取相機當前的位姿參數(shù)的步驟具體包括下述步驟:
當所述相機每集成一幀新的深度圖,計算相機移動的增量;
則根據(jù)所述相機第一幀對應(yīng)的位姿參數(shù)以及計算得到的相機移動的增量,計算相機當前的位姿參數(shù)。
作為一種改進的方案,所述位姿參數(shù)包括相機的旋轉(zhuǎn)角度和平移分量。
作為一種改進的方案,所述Volume的數(shù)量的預(yù)設(shè)值為四個。
本發(fā)明的另一目的在于提供一種Volume重建范圍的擴展系統(tǒng),所述系統(tǒng)包括:
Volume申請模塊,用于在GPU顯存中申請一個空的Volume;
計數(shù)模塊,用于在所述Volume申請模塊執(zhí)行申請動作時,控制Volume計數(shù)器加一;
初始化模塊,用于對所述Volume申請模塊申請的空的Volume進行初始化操作;
相機跟蹤模塊,用于對相機的移動進行跟蹤,獲取相機當前的位姿參數(shù);
第一判斷模塊,用于判斷相機當前的位姿參數(shù)是否在當前Volume所對應(yīng)的位姿閾值參數(shù)范圍內(nèi);
場景重建模塊,用于當相機當前的位姿參數(shù)在當前Volume所對應(yīng)的位姿閾值參數(shù)范圍內(nèi)時,則執(zhí)行場景重建的動作;
第二判斷模塊,用于當相機當前的位姿參數(shù)不在當前Volume所對應(yīng)的位姿閾值參數(shù)范圍內(nèi)時,則判斷相機當前的位姿參數(shù)是否在其他已申請的Volume所對應(yīng)的位姿閾值范圍內(nèi);
Volume切換模塊,用于當相機當前的位姿參數(shù)在其他已申請的所對應(yīng)的位姿閾值范圍內(nèi)時,則切換到對應(yīng)的Volume上,所述場景重建模塊執(zhí)行所述場景重建的動作的步驟;
第三判斷模塊,用于當相機當前的位姿參數(shù)不在其他已申請的所對應(yīng)的位姿閾值范圍內(nèi)時,則根據(jù)Volume計數(shù)器的累加結(jié)果判斷當前已申請的Volume的數(shù)量是否大于預(yù)設(shè)值;
結(jié)束模塊,用于當當前已申請的Volume的數(shù)量大于等于預(yù)設(shè)值時,則結(jié)束Volume重建范圍的擴展;
當當前已申請的Volume的數(shù)量小于預(yù)設(shè)值時,則返回Volume申請模塊執(zhí)行所述在GPU顯存中申請一個空的Volume的步驟。
作為一種改進的方案,所述初始化模塊具體包括:
顯存空間申請模塊,用于在GPU顯存中申請512M的顯存空間,將512M的顯存空間劃分為512×512×512個體素;
體素掃描模塊,用于對重建區(qū)域內(nèi)的每一個體素進行掃描操作,所述第一個Volume位于所述相機第一幀的正前方。
作為一種改進的方案,所述相機跟蹤模塊具體包括:
移動增量計算模塊,用于當所述相機每集成一幀新的深度圖,計算相機移動的增量;
位姿計算模塊,用于則根據(jù)所述相機第一幀對應(yīng)的位姿參數(shù)以及計算得到的相機移動的增量,計算相機當前的位姿參數(shù)。
作為一種改進的方案,所述位姿參數(shù)包括相機的旋轉(zhuǎn)角度和平移分量。
作為一種改進的方案,所述Volume的數(shù)量的預(yù)設(shè)值為四個。
采用了上述技術(shù)方案后,本發(fā)明的有益效果是:
在GPU顯存中申請一個空的Volume,控制Volume計數(shù)器加一,并對空的Volume進行初始化操作;對相機的移動進行跟蹤,獲取相機當前的位姿參數(shù),根據(jù)相機的位姿參數(shù)判斷相機的移動,以此判定執(zhí)行切換Volume或重建Volume的動作,從而實現(xiàn)在保持重建速度和重建精度的前提下,有效對重建范圍進行擴展,而且在來回切換場景時,無需Volume重建,提高了系統(tǒng)的穩(wěn)定性。
附圖說明
圖1是本發(fā)明提供的Volume重建范圍的擴展方法的實現(xiàn)流程圖;
圖2是本發(fā)明提供的Volume重建范圍的擴展系統(tǒng)的結(jié)構(gòu)框圖。
具體實施方式
下面結(jié)合具體的實施例對本發(fā)明進一步說明。但這些例舉性實施方式的用途和目的僅用來例舉本發(fā)明,并非對本發(fā)明的實際保護范圍構(gòu)成任何形式的任何限定,更非將本發(fā)明的保護范圍局限于此。
圖1示出了本發(fā)明提供的Volume重建范圍的擴展方法的實現(xiàn)流程圖,其具體包括下述步驟:
在步驟S101中,在GPU顯存中申請一個空的Volume,控制Volume計數(shù)器加一,并對空的Volume進行初始化操作。
在該步驟中,Volume的虛擬立方體存儲在GPU顯存中,將重建范圍限制在Volume當中;
申請的Volume的位置由第一幀Kinect攝像頭的位置決定,并且在第一幀相機所在的位置的正前方,利用Volume算法對申請的Volume進行初始化,即:
記錄Volume所對應(yīng)的相機位姿,并且使Volume立方體重建區(qū)域位于當前相機正前方大概0.4米的區(qū)域,即相機位于重建區(qū)域所在的立方體的正后方0.4米處,距離重建區(qū)域立方體中心的距離為重建區(qū)域立方體的半徑1.5米+0.4米。將此立方體劃分為512×512×512個體素,每個體素實際代表空間中3mm×3mm×3mm的小立方體,重建范圍約1.5米,重建精度約3mm,此時,每個體素的值并不表示三維點,而是保存體素到最近表面的距離TDSF以及它的權(quán)重Weight,并且,將這兩組數(shù)據(jù)分別存儲為short類型,共占四個字節(jié),其中初始化的具體實現(xiàn)如下實施例所記載,在此不再贅述。
在步驟S102中,對相機的移動進行跟蹤,獲取相機當前的位姿參數(shù)。
在該步驟中,計算世界坐標系下的相機位姿,包括其位置與旋轉(zhuǎn)角度,利用ICP算法跟蹤相機每一幀,并計算得到當前相機位姿相對于第一幀相機位姿之間的差別。
在步驟S103中,判斷相機當前的位姿參數(shù)是否在當前Volume所對應(yīng)的位姿閾值參數(shù)范圍內(nèi),是則執(zhí)行步驟S104,否則執(zhí)行S105。
在該步驟中,給相機設(shè)置一個位姿閾值參數(shù)范圍,該位姿閾值參數(shù)范圍包括平移閾值和旋轉(zhuǎn)角度閾值,檢測相機移動的每一幀,將相機位姿矩陣轉(zhuǎn)換成直角坐標系的平移分量和旋轉(zhuǎn)角度分量,比較當前相機的位姿和第一幀相機位姿,如果平移分量或旋轉(zhuǎn)角度分量超過設(shè)定的位姿閾值參數(shù)范圍,則判斷相機當前位姿超出該位姿閾值參數(shù)范圍。
在步驟S104中,當相機當前的位姿參數(shù)在當前Volume所對應(yīng)的位姿閾值參數(shù)范圍內(nèi)時,則執(zhí)行場景重建的動作。
在該步驟中,在相機位于當前的Volume時,在當前的Volume進行場景重建。
在步驟S105中,當相機當前的位姿參數(shù)不在當前Volume所對應(yīng)的位姿閾值參數(shù)范圍內(nèi)時,則判斷相機當前的位姿參數(shù)是否在其他已申請的Volume所對應(yīng)的位姿閾值范圍內(nèi),是則執(zhí)行步驟S106,否則執(zhí)行步驟S107。
當相機當前的位置不處于當前的Volume內(nèi)時,即當前Volume已不在相機的視野范圍內(nèi),則判斷相機視野是否在已經(jīng)申請的其他Volume內(nèi),若是則直接切換Volume,否則以及已經(jīng)申請的Volume的數(shù)量判斷是否繼續(xù)申請Volume。
在步驟S106中,當相機當前的位姿參數(shù)在其他已申請的所對應(yīng)的位姿閾值范圍內(nèi)時,則切換到對應(yīng)的Volume上,并返回執(zhí)行步驟S104。
當進行Volume的切換后,在切換后的Volume內(nèi)繼續(xù)進行場景重建。
在步驟S107中,當相機當前的位姿參數(shù)不在其他已申請的所對應(yīng)的位姿閾值范圍內(nèi)時,則根據(jù)Volume計數(shù)器的累加結(jié)果判斷當前已申請的Volume的數(shù)量是否大于預(yù)設(shè)值,是則執(zhí)行步驟S108,否則返回執(zhí)行步驟Sl01。
在該步驟中,需要預(yù)先設(shè)置Volume的申請數(shù)量,該Volume的數(shù)量的預(yù)設(shè)值為四個,當然也可以采用其他數(shù)量,在此不再贅述。
當超過該預(yù)設(shè)值時,則結(jié)束重建范圍的擴展,當少于四個時,則可以繼續(xù)申請Volume。
在步驟S108中,當當前已申請的Volume的數(shù)量大于等于預(yù)設(shè)值時,則結(jié)束Volume重建范圍的擴展。
即:當當前已申請的Volume的數(shù)量小于預(yù)設(shè)值時,則返回執(zhí)行所述在GPU顯存中申請一個空的Volume的步驟。
在本發(fā)明實施例中,對空的Volume進行初始化操作的步驟具體包括下述步驟:
1)、在GPU顯存中申請512M的顯存空間,將512M的顯存空間劃分為512×512×512個體素;
2)、對重建區(qū)域內(nèi)的每一個體素進行掃描操作,所述第一個Volume位于所述相機第一幀的正前方。
其中,該對重建區(qū)域內(nèi)的每一個體素進行掃描的過程,即具體的初始化的過程為:
(1)在Volume內(nèi),并行從前往后掃描每個體素;
(2)將體素的網(wǎng)格坐標轉(zhuǎn)換為世界坐標系;
(3)對相機第一幀進行矩陣求逆,用其將體素轉(zhuǎn)換到當前相機坐標系下;
(4)將相機坐標系的點投影到圖像坐標點,從三維轉(zhuǎn)換到二維;
(5)如果像素點在相機視野范圍內(nèi),則求該相機坐標系點到本次相機原點的距離與本次觀測深度的差值;
(6)如果上述計算得到的差值>0,TDSF數(shù)據(jù)則取值min(1,差值/max_truncation),且賦值在[0,1]之間;
否則取值max(-1,差值/min_truncation),賦值在[-1,0]之間,其中,max_truncation表示選取的截斷范圍,并對最后重建結(jié)果的精細程度有影響;
計算得到的差值>0時,表示體素在場景表面后方,越大表示體素距離場景表面越遠;
計算得到的差值<0時,表示體素在場景表面前方,越小表示體素距離場景表面越遠;越靠近觀測面的地方,越接近0;
(7)選取本次計算值的權(quán)重值,取值min(max_weight,0),這個權(quán)值的選取影響圖片的適應(yīng)性,以及抗噪聲的能力,權(quán)重為0的地方表示是空的,每次權(quán)值+1的操作能照顧到迅速變化的或很少掃描到的面的變化,因此,只有在相機拍攝范圍內(nèi)的點才會進入加權(quán)的操作,每次的權(quán)值在原先的基礎(chǔ)上增加1能照顧到迅速變化的或很少掃描到的面的變化;
(8)加權(quán)平均求和;
(9)將步驟(8)中求取的和作為兩個short類型數(shù)據(jù)存儲到對應(yīng)的體素中,進行下一個體素的掃描操作,此時每個體素占4個字節(jié),劃分為512×512×512個體素時,將占512M顯存空間,并利用GPU并行計算的能力更新Volume數(shù)據(jù),完成Volume的初始化。
在本發(fā)明實施例中,在一臺配備E3-1245V5中央處理器,NVIDIA GeForce GTX1050Ti顯卡的工作站上實現(xiàn)了上述記載的技術(shù)方案,在工作站電腦上保持使用與Kinect傳感器一樣的30fps的幀速率以保證相機跟蹤的穩(wěn)定性。
在掃描了面積約為30m2的多個房間,結(jié)果表明,在目前的硬件配置上,本發(fā)明實施例可以在較短的時間內(nèi)將整個房間掃描完成,在保證精度為3mm的條件下,重建范圍從1.5米擴展到6米,并且可以有效地解決掃描大場景時遇到的精度較差,累積誤差嚴重等問題。
圖2示出了本發(fā)明提供的Volume重建范圍的擴展系統(tǒng)的結(jié)構(gòu)框圖,為了便于說明,圖中僅給出了與本發(fā)明實施例相關(guān)的部分。
Volume申請模塊11,用于在GPU顯存中申請一個空的Volume;
計數(shù)模塊12,用于在所述Volume申請模塊執(zhí)行申請動作時,控制Volume計數(shù)器加一;
初始化模塊13,用于對所述Volume申請模塊申請的空的Volume進行初始化操作;
相機跟蹤模塊14,用于對相機的移動進行跟蹤,獲取相機當前的位姿參數(shù);
第一判斷模塊15,用于判斷相機當前的位姿參數(shù)是否在當前Volume所對應(yīng)的位姿閾值參數(shù)范圍內(nèi);
場景重建模塊16,用于當相機當前的位姿參數(shù)在當前Volume所對應(yīng)的位姿閾值參數(shù)范圍內(nèi)時,則執(zhí)行場景重建的動作;
第二判斷模塊17,用于當相機當前的位姿參數(shù)不在當前Volume所對應(yīng)的位姿閾值參數(shù)范圍內(nèi)時,則判斷相機當前的位姿參數(shù)是否在其他已申請的Volume所對應(yīng)的位姿閾值范圍內(nèi);
Volume切換模塊18,用于當相機當前的位姿參數(shù)在其他已申請的所對應(yīng)的位姿閾值范圍內(nèi)時,則切換到對應(yīng)的Volume上,所述場景重建模塊16執(zhí)行所述場景重建的動作的步驟;
第三判斷模塊19,用于當相機當前的位姿參數(shù)不在其他已申請的所對應(yīng)的位姿閾值范圍內(nèi)時,則根據(jù)Volume計數(shù)器的累加結(jié)果判斷當前已申請的Volume的數(shù)量是否大于預(yù)設(shè)值;
結(jié)束模塊20,用于當當前已申請的Volume的數(shù)量大于等于預(yù)設(shè)值時,則結(jié)束Volume重建范圍的擴展;
當當前已申請的Volume的數(shù)量小于預(yù)設(shè)值時,則返回Volume申請模塊執(zhí)行所述在GPU顯存中申請一個空的Volume的步驟。
其中,初始化模塊13具體包括:
顯存空間申請模塊21,用于在GPU顯存中申請512M的顯存空間,將512M的顯存空間劃分為512×512×512個體素;
體素掃描模塊22,用于對重建區(qū)域內(nèi)的每一個體素進行掃描操作,所述第一個Volume位于所述相機第一幀的正前方。
相機跟蹤模塊14具體包括:
移動增量計算模塊23,用于當所述相機每集成一幀新的深度圖,計算相機移動的增量;
位姿計算模塊24,用于則根據(jù)所述相機第一幀對應(yīng)的位姿參數(shù)以及計算得到的相機移動的增量,計算相機當前的位姿參數(shù)。
其中,上述各個模塊的功能如上述方法實施例所記載,在此不再贅述。
在本發(fā)明實施例中,在GPU顯存中申請一個空的Volume,控制Volume計數(shù)器加一,并對空的Volume進行初始化操作;對相機的移動進行跟蹤,獲取相機當前的位姿參數(shù),根據(jù)相機的位姿參數(shù)判斷相機的移動,以此判定執(zhí)行切換Volume或重建Volume的動作,從而實現(xiàn)在保持重建速度和重建精度的前提下,有效對重建范圍進行擴展,而且在來回切換場景時,無需Volume重建,提高了系統(tǒng)的穩(wěn)定性。
應(yīng)當理解,這些實施例的用途僅用于說明本發(fā)明而非意欲限制本發(fā)明的保護范圍。此外,也應(yīng)理解,在閱讀了本發(fā)明的技術(shù)內(nèi)容之后,本領(lǐng)域技術(shù)人員可以對本發(fā)明作各種改動、修改和/或變型,所有的這些等價形式同樣落于本申請所附權(quán)利要求書所限定的保護范圍之內(nèi)。