陳元相, 陳建, 鄭明魁, 陳志峰
(福州大學(xué)物理與信息工程學(xué)院, 福建 福州 350108)
隨著3D感知和獲取技術(shù)的進(jìn)步, 虛擬現(xiàn)實(shí)(virtual reality, VR)/增強(qiáng)現(xiàn)實(shí)(augmented reality, AR)/混合現(xiàn)實(shí)(mixed reality, MR)、 移動地圖、 文物掃描、 智慧城市、 機(jī)器人和自動駕駛等新興智能產(chǎn)業(yè)飛速發(fā)展, 3D點(diǎn)云已經(jīng)成為這些產(chǎn)業(yè)中一種流行的數(shù)據(jù)存儲和傳輸?shù)母袷? 在智能駕駛和移動機(jī)器人領(lǐng)域, 3D 激光雷達(dá)(light detection and ranging, LiDAR)傳感器作為關(guān)鍵的點(diǎn)云采集設(shè)備, 對于真實(shí)環(huán)境的數(shù)字感知, 以及在定位、 路徑規(guī)劃[1]和障礙物檢測[2]等應(yīng)用中起著至關(guān)重要的作用. 存儲和共享LiDAR點(diǎn)云是智能交通及車路協(xié)同系統(tǒng)的必然要求. 然而, 在實(shí)際應(yīng)用中, 點(diǎn)云數(shù)據(jù)面臨著與2D應(yīng)用相同的帶寬、 存儲和壓縮限制, 以及相似的質(zhì)量水平期望, 3D技術(shù)所需處理的點(diǎn)云數(shù)據(jù)量通常比相似分辨率的2D媒體應(yīng)用至少高一個數(shù)量級. 因而, 研究高效的點(diǎn)云壓縮(point cloud compression, PCC)解決方案對于自動駕駛、 高級輔助駕駛等相關(guān)的產(chǎn)業(yè)具有重要的科學(xué)意義.
本文關(guān)注于單幀LiDAR點(diǎn)云壓縮問題, 因?yàn)長iDAR點(diǎn)云序列的基本組成是單幀點(diǎn)云, 在點(diǎn)云后續(xù)的幀間預(yù)測中, 為了有效利用鄰近幀之間的時域相關(guān)性, 使用先前已經(jīng)編碼的重建幀作為參考幀(關(guān)鍵幀),對后續(xù)的編碼幀進(jìn)行預(yù)測. 對關(guān)鍵幀的壓縮是幀間預(yù)測基本前提, 高性能的單幀壓縮方案不僅可以為后續(xù)幀提供高質(zhì)量的參考幀, 提高幀間預(yù)測準(zhǔn)確度, 而且可以提升點(diǎn)云序列壓縮率與性能. 單幀壓縮是點(diǎn)云序列壓縮的重要組成部分, 為此本文提出一種新穎的高效有損壓縮方法. 該方法通過將LiDAR點(diǎn)云分割為地面和非地面點(diǎn)云, 對兩部分點(diǎn)云區(qū)別對待, 采用不同程度的稀疏采樣去冗余處理, 并通過坐標(biāo)轉(zhuǎn)換將點(diǎn)云從笛卡爾坐標(biāo)轉(zhuǎn)為球坐標(biāo), 之后映射為二維矩陣的距離圖像. 為了增加相鄰像素的相關(guān)性, 通過Morton碼對距離圖像進(jìn)行更為緊湊的表示, 最終利用經(jīng)典圖像編碼算法完成進(jìn)一步壓縮.
近年來, 3D點(diǎn)云壓縮受到了廣泛的關(guān)注, 越來越多的學(xué)者致力于點(diǎn)云壓縮的研究工作中, 并發(fā)表了許多相關(guān)論文[3-14]. 根據(jù)點(diǎn)云數(shù)據(jù)處理格式的不同, 壓縮算法可以大致分為兩類.
利用樹結(jié)構(gòu)是直接壓縮點(diǎn)云的主流壓縮方式. 八叉樹是用于對3D點(diǎn)云進(jìn)行空間劃分的流行數(shù)據(jù)結(jié)構(gòu). 這是視頻編碼中四叉樹的3D擴(kuò)展[3]. Mekuria等[4]通過對占據(jù)碼進(jìn)行熵編碼來壓縮八叉樹中的幾何結(jié)構(gòu); 將顏色映射到2D網(wǎng)格后, 對顏色屬性進(jìn)行圖像壓縮; 同時, 使用迭代最近點(diǎn)算法來計(jì)算連續(xù)幀中兼容宏塊之間的剛性變換進(jìn)行幀間預(yù)測. 此方法可以作為點(diǎn)云壓縮的通用框架. 后續(xù)研究繼續(xù)針對3D點(diǎn)云的幀內(nèi)和幀間壓縮展開. Ainala等[5]使用增強(qiáng)層改進(jìn)單幀點(diǎn)云壓縮框架. 在固定八叉樹深度之后, 切換到使用平面投影近似法的新圖層, 對更高層次的細(xì)節(jié)編碼, 提高壓縮性能和運(yùn)行速度. Subramanyam等[3]在之前的通用點(diǎn)云壓縮框架[6]基礎(chǔ)上對增強(qiáng)層在幀間預(yù)測進(jìn)行擴(kuò)展, 通過使用PCL中的雙緩沖八叉樹結(jié)構(gòu)執(zhí)行幀間預(yù)測. 在八叉樹的基礎(chǔ)上, 與新穎的基于圖的變換方法相結(jié)合, 針對靜態(tài)點(diǎn)云幾何文獻(xiàn)[7]將點(diǎn)云編碼為基礎(chǔ)層和增強(qiáng)層, 對基礎(chǔ)層使用基于八叉樹的方法, 對增強(qiáng)層利用了層間預(yù)測和基于圖的變換, 最后對殘差和變換系數(shù)進(jìn)行轉(zhuǎn)換和編碼. 運(yùn)動圖像專家組(MPEG)開發(fā)的G-PCC[8]也是通過利用基于八叉樹的編碼策略來壓縮點(diǎn)云幾何信息, 是目前最先進(jìn)的基于幾何的點(diǎn)云編解碼器, 主要針對靜態(tài)和動態(tài)捕獲點(diǎn)云.
另一類方法通過將3D點(diǎn)云數(shù)據(jù)轉(zhuǎn)換為2D格式進(jìn)行壓縮, 這種壓縮方法并未利用點(diǎn)云的3D特性. 通過將點(diǎn)云映射到全景圖, Houshiar等[9]提出基于傳統(tǒng)圖像壓縮的3D點(diǎn)云壓縮方案. Tu等[10]將LiDAR數(shù)據(jù)無損轉(zhuǎn)換為距離圖像, 然后使用標(biāo)準(zhǔn)圖像或視頻編碼技術(shù)來減少數(shù)據(jù)量. 針對距離圖像序列, 他們基于同步定位與建圖(simultaneous localization and mapping, SLAM)思想, 及結(jié)合點(diǎn)云的3D特性以及車輛的位置和方向信息, 將I幀通過運(yùn)動估計(jì)來預(yù)測B幀[11], 以有效提升壓縮性能. 在轉(zhuǎn)為2D格式的基礎(chǔ)上, 借助由數(shù)據(jù)驅(qū)動的深度學(xué)習(xí)方法的強(qiáng)大特征學(xué)習(xí)能力, Tu等[12]使用循環(huán)神經(jīng)網(wǎng)絡(luò)和殘差塊構(gòu)建編碼網(wǎng)絡(luò)、 二值化器和解碼網(wǎng)絡(luò)組成壓縮網(wǎng)絡(luò)從3D LiDAR逐步壓縮一幀點(diǎn)云數(shù)據(jù). 為了有效地壓縮動態(tài)點(diǎn)云數(shù)據(jù), 減少空間和時間冗余, Tu等[13]在之前將3D點(diǎn)云信息無損存儲在2D矩陣中的基礎(chǔ)上, 使用U-net的實(shí)時流點(diǎn)云數(shù)據(jù)壓縮方法, 將點(diǎn)云數(shù)據(jù)轉(zhuǎn)換為類似視頻的格式. 通過將一部分幀指定為參考幀, 使用U-net計(jì)算光流, 對參考幀中間的點(diǎn)云幀進(jìn)行插值, 有效減少了時間冗余, 達(dá)到更高的壓縮率. Sun等[14]對距離圖像執(zhí)行聚類操作將3D距離數(shù)據(jù)分割為不同的對象, 基于分割結(jié)果的距離圖像預(yù)測并編碼輪廓圖與殘差, 合理利用點(diǎn)云數(shù)據(jù)的空間結(jié)構(gòu)并消除了空間冗余.
上述方法可以顯著減小點(diǎn)云數(shù)據(jù)的大小, 并且能夠用于某些特定應(yīng)用. 但是, 它們中很少是專門為LiDAR點(diǎn)云數(shù)據(jù)特性而設(shè)計(jì)的, 對LiDAR點(diǎn)云進(jìn)行壓縮的效率較低. 本文借鑒上述編碼技術(shù)中的3D轉(zhuǎn)2D、 占據(jù)碼等思想, 將用于機(jī)載航拍點(diǎn)云的漸進(jìn)式形態(tài)濾波器[19]應(yīng)用于車載LiDAR點(diǎn)云地面與非地面分割, 結(jié)合地面與非地面區(qū)別壓縮、 Morton排序等的思想, 提出一種針對單幀LiDAR點(diǎn)云的新穎編碼方案. 首先對分割后的地面和非地面點(diǎn)云采取不同強(qiáng)度采樣策略, 其次, 在3D轉(zhuǎn)換為距離圖的基礎(chǔ)上, 采用占據(jù)圖和Morton排序方案進(jìn)行降維處理, 最后結(jié)合圖像編碼進(jìn)行進(jìn)一步壓縮. 本文的方法可以在很大程度上消除點(diǎn)云空間冗余且有較高的壓縮性能.
在本節(jié)中, 提出單幀LiDAR點(diǎn)云混合編碼/解碼框架. 編碼端: 輸入的LiDAR點(diǎn)云由漸進(jìn)形態(tài)學(xué)濾波器分割為非地面點(diǎn)云和地面點(diǎn)云兩部分. 其次, 分割點(diǎn)云經(jīng)非一致性稀疏采樣, 對地面點(diǎn)云采用較大間隔進(jìn)行采樣, 對非地面點(diǎn)使用小間隔進(jìn)行采樣, 然后由坐標(biāo)轉(zhuǎn)換及映射將3D的數(shù)據(jù)轉(zhuǎn)為2D距離圖形式, 大幅度降低了數(shù)據(jù)冗余. 再則, 距離圖的空像素與非空像素的分布借助1 bit深度的占據(jù)圖進(jìn)行表示, 距離圖經(jīng)其占據(jù)圖Morton排序表示為緊湊的16 bit深度的向量. 最后, 將距離向量及占據(jù)圖壓縮為JPEG、 PNG碼流, 實(shí)現(xiàn)進(jìn)一步壓縮. 解碼端: 解碼為編碼的逆過程. 圖1給出該方法的編碼流程圖, 其中平行四邊形代表數(shù)據(jù), 矩形代表處理步驟.

圖1 LiDAR點(diǎn)云壓縮編碼框架圖Fig.1 LiDAR point cloud compression coding framework

圖2 車載LiDAR捕獲點(diǎn)云示意圖Fig.2 Schematic diagram of point cloud captured by vehicle-mounted LiDAR
車載LiDAR點(diǎn)云的采集過程如圖2所示, 以Velodyne HDL-64E為例, LiDAR固定于車上方并做360°旋轉(zhuǎn), 對26.8°垂直領(lǐng)域內(nèi)的環(huán)境進(jìn)行掃描, 如此采集得到一幀點(diǎn)云. 基于此過程以及LiDAR的結(jié)構(gòu), LiDAR發(fā)射的探測信號大多數(shù)由地面反射回來并被接收器所接收. 實(shí)驗(yàn)統(tǒng)計(jì), 在一幀點(diǎn)云中地面點(diǎn)占比超過50%, 而密集的地面點(diǎn)云在自動駕駛中提供的信息有限. 路徑規(guī)劃和障礙物檢測通常是由非地面點(diǎn)云來提供位置信息和物體信息. 因而, 將地面和非地面點(diǎn)云分割, 而后對兩者進(jìn)行不同處理可充分降低點(diǎn)云空間冗余.
文獻(xiàn)[15]中設(shè)計(jì)了從機(jī)載LiDAR數(shù)據(jù)中除去非地面測量值的漸進(jìn)式形態(tài)濾波器, 其思想是通過逐漸增加濾波器窗口的大小并結(jié)合高度差閾值, 刪除植被、 車輛和建筑物等非地面點(diǎn), 而地面數(shù)據(jù)將被保留. 數(shù)學(xué)形態(tài)濾波器通常用于無人機(jī)等在高空捕獲的點(diǎn)云, 根據(jù)觀測對象的高度差異從點(diǎn)云生成的灰度圖像中去除非地面物體. 數(shù)學(xué)形態(tài)學(xué)具備強(qiáng)大的功能, 可以處理圖像和信息提取中的各種問題, 例如邊緣檢測、 道路檢測. 數(shù)學(xué)形態(tài)學(xué)由兩個基本運(yùn)算組成, 即膨脹和腐蝕, 用于放大(擴(kuò)張)或縮小(侵蝕)圖像中的特征尺寸. 膨脹和腐蝕操作可以組合為開啟和關(guān)閉操作.
設(shè)G(x,y)表示二維灰度圖像中坐標(biāo)位置(x,y)處的灰度值,B(x,y)表示其結(jié)構(gòu)元素.在灰度形態(tài)中, 在DB鄰域內(nèi)的膨脹和腐蝕分別定義為:
(G⊕B)(x,y)=max{G(x-i,y-j)+B(i,j)|(i,j)∈DB}
(1)
(GΘB)(x,y)=min{G(x-1,y-j)-B(i,j)|(i,j)∈DB}
(2)
將這些概念擴(kuò)展到連續(xù)表面的分析中, 對LiDAR測量數(shù)據(jù)p(x,y,z), 高度z在x和y處的膨脹定義為:
(3)
式中: 點(diǎn)(xp,yp,zp)表示窗口w內(nèi)p的鄰域坐標(biāo).窗口可為一維線性或二維矩形或其他形狀.膨脹輸出為p的鄰域最大高度值.侵蝕與膨脹類似, 其定義為:
(4)
侵蝕和膨脹的結(jié)合產(chǎn)生用于過濾激光雷達(dá)數(shù)據(jù)的開啟和關(guān)閉操作. 侵蝕操作刪除了尺寸小于窗口尺寸的對象, 而膨脹恢復(fù)了大型對象的形狀. 樹木、 汽車和建筑物等非地面物體的標(biāo)高通常高于周圍地面的標(biāo)高, 將LiDAR點(diǎn)云按照高程轉(zhuǎn)換為規(guī)則灰度網(wǎng)格圖像, 可通過改變灰度來識別建筑物、 汽車和樹木的形狀. 漸進(jìn)形態(tài)濾波器通過逐漸增加形態(tài)過濾器的窗口大小, 并根據(jù)建筑物和地形的高程變化的差異, 將建筑物和地面的測量值分開. 通過逐漸增加窗口大小并重復(fù)應(yīng)用打開操作直到窗口大小大于最大建筑物的大小, 上述過程同樣作用于樹木、 汽車等非地面物體. 由此地面與非地面得以分離. 鑒于機(jī)載點(diǎn)云與車載LiDAR點(diǎn)云的差異, 通過實(shí)驗(yàn)對窗口大小和高度閾值的修改與調(diào)整, 使?jié)u進(jìn)形態(tài)濾波器適用于車載LiDAR點(diǎn)云地面與非地面分割. 地面和非地面分離效果如圖3所示.

(a) 原始點(diǎn)云

(b) 地面點(diǎn)云

(c) 非地面點(diǎn)云

P={xi,yi,zi,i=1∶1∶N}
(5)

(6)

圖4 球坐標(biāo)系Fig.4 Spherical coordinate system
激光掃描儀覆蓋固定的垂直度數(shù)和360°水平視場, 具有固定數(shù)目的光束和角分辨率. 由于原始數(shù)據(jù)是通過測量從激光雷達(dá)中心到物體的徑向距離而獲得的, 因此對于LiDAR點(diǎn)云, 與傳統(tǒng)的笛卡爾坐標(biāo)系相比, 采用球面坐標(biāo)系可以更好地適應(yīng)其數(shù)據(jù)的特性, 可以將其轉(zhuǎn)換為距離圖像. 完成此轉(zhuǎn)換不僅不會損失原有的空間位置信息, 而且可以減少近四分之三的數(shù)據(jù)量. 相應(yīng)的球坐標(biāo)如圖4所示, 通過下式完成坐標(biāo)轉(zhuǎn)換.

(7)

(8)

(9)
式中:ωi為偏航角;θi為俯仰角;ri為點(diǎn)到中心的距離, 下標(biāo)i表示點(diǎn)的索引.
利用LiDAR點(diǎn)云的特點(diǎn), 將球坐標(biāo)中的點(diǎn)映射到2D距離圖, 將偏航角映射為距離圖像像素的橫坐標(biāo), 俯仰角映射為距離圖像像素的縱坐標(biāo), 距離值映射為像素值. 映射過程如下式.

(10)

(11)
P(pxi,pyi)=round(ri)
(12)
在式(10)~(11)中,x_quan、y_quan表示偏航角和俯仰角的量化系數(shù), 兩者決定距離圖的分辨率大小, 通過調(diào)整量化系數(shù)控制壓縮率和壓縮性能, 以此實(shí)現(xiàn)點(diǎn)云壓縮有損程度的控制. 此映射方式適用于所有的3D格式的LiDAR點(diǎn)云.
在球坐標(biāo)映射為距離圖像中, 由于LiDAR掃描特性、 點(diǎn)云的下采樣稀疏化以及偏航角及俯仰角的量化等因素和處理過程, 在距離圖中存在大量的空像素, 相鄰點(diǎn)之間的空間相關(guān)性將丟失. 若直接對距離圖進(jìn)行壓縮編碼, 則需要更多的比特, 即更高的碼率. 受八叉樹中3D占據(jù)碼的啟發(fā), 通過占據(jù)碼對2D的距離圖的每個像素是否為空像素進(jìn)行表示, 由此生成一張與距離圖相同分辨率的占據(jù)圖.

(13)
式中:O(px,py)表示在占據(jù)圖中(px,py)位置的像素值, 值為0表示對應(yīng)距離圖相應(yīng)位置沒有點(diǎn), 值為1表示有點(diǎn). 然后通過下式計(jì)算占據(jù)圖上各個像素的Morton碼, 將二維中的點(diǎn)坐標(biāo)用一個一維數(shù)值表示. Morton碼值之間的相鄰性可以表示二維像素的相鄰性, 通過對Morton碼排序, 同時也是對Morton碼對應(yīng)的點(diǎn)進(jìn)行排序, 由此把距離圖像像素值根據(jù)對應(yīng)Morton碼的大小排列為一維向量, 節(jié)省了距離圖的空間.

(14)

(15)
式中:xl,yl∈{0, 1}, 式(14)表示將位置轉(zhuǎn)換為二進(jìn)制形式. 距離圖由此轉(zhuǎn)化為占更小存儲空間的1 bit深度的二維占據(jù)圖和一個16 bit深度的距離向量.
基于JPEG的壓縮方法致力于減少空間冗余, 在JPEG算法中, 包含一種無損算法和三種有損算法, 鑒于LIDAR點(diǎn)云的應(yīng)用場景需求, 基于DPCM的JPEG無損壓縮算法更適用于16 bit深度距離向量, 其采用預(yù)測編碼和哈夫曼編碼(或算術(shù)編碼)以保證重建圖像與原圖像完全相同. 此外, 采用便攜式網(wǎng)絡(luò)圖形(PNG)[16]對1 bit深度占據(jù)圖像進(jìn)行無損壓縮可以達(dá)到更高壓縮率. 由此通過圖像編碼對點(diǎn)云進(jìn)行進(jìn)一步的壓縮.
為了定量評估本文方法的壓縮性能, 使用每點(diǎn)比特?cái)?shù)(bits per point, bpp)來表示點(diǎn)云壓縮后的碼率, 并使用點(diǎn)對點(diǎn)均方距離的峰值信噪比(peak signal to noise ratio, PSNR)[17]作為度量標(biāo)準(zhǔn).
原始點(diǎn)云Por是一組無嚴(yán)格排序的N點(diǎn)的集合, 其中p包含點(diǎn)的位置信息.解碼點(diǎn)云Pde為一組無嚴(yán)格排序的M點(diǎn)的集合. 對于有損壓縮, 解碼點(diǎn)數(shù)小于原始點(diǎn)數(shù).
Por={(pi):i=0, …,N-1}
(16)
Pde={(pi):i=0, …,M-1}
(17)
對于每個在Pde中的點(diǎn)pde, 在Por找到最近鄰點(diǎn), 記做pmn_or. 通過基于L2距離范數(shù)的K-d樹算法計(jì)算得到最近鄰點(diǎn)[17]. 下式定義了幾何屬性的均方誤差(mean squared error, MSE).

(18)
基于MSE, 下式給出了幾何屬性的PSNR的計(jì)算方法.

(19)
實(shí)驗(yàn)的測試序列主要來自廣泛應(yīng)用于自動駕駛領(lǐng)域的KITTI測試集. 圖5給出了本文的方法與點(diǎn)云壓縮錨點(diǎn)[4]、 谷歌的Draco[18]以及由MPEG開發(fā)的目前最先進(jìn)的基于幾何的編碼器G-PCC[19]對比的性能曲線. 圖中g(shù)5o3和g5o2表示地面與非地面點(diǎn)云的采樣間隔, 前者分別為5和3, 后者分別為5和2. 實(shí)驗(yàn)在同等條件下進(jìn)行, 對比結(jié)果由PSNR-碼率曲線給出. 本文在KITTI數(shù)據(jù)集五個場景上進(jìn)行實(shí)驗(yàn): 城市, 校園, 道路, 居民區(qū), 行人. 較大的PSNR和較小的碼率意味著更好的壓縮性能, 因?yàn)榭梢砸暂^小的寬帶實(shí)現(xiàn)較高的PSNR. 在KITTI數(shù)據(jù)集的5個測試序列中, 數(shù)據(jù)均為LiDAR獲取的原始數(shù)據(jù), 盡管不同場景的性能略有差距, 本文方法和其他對比方法均表現(xiàn)較穩(wěn)定. 在相同PSNR重建質(zhì)量下, 本文的方法僅需要更小的碼率, 性能顯著優(yōu)于錨點(diǎn)[4]和Draco[18]. 當(dāng)碼率≥2.5 bpp時, 本文方法優(yōu)于G-PCC[19], 可以達(dá)到更高的重建質(zhì)量; 在較低碼率時, 本文算法的壓縮性能略低于G-PCC, 這是由于低碼率時偏航角和俯仰角的量化系數(shù)較小, 在其量化后四舍五入時引入了較大的舍入誤差. 總體上, 本文所提出的方案有著較佳的壓縮性能.

(a) 城市

(b) 校園

(c) 道路

(d) 居民區(qū)

(e)行人
本文針對自動駕駛領(lǐng)域提出一種新穎的通用LiDAR點(diǎn)云有損壓縮框架. 基于地面點(diǎn)云占比大且高度冗余的特點(diǎn), 對單幀點(diǎn)云采取“分而治之”策略, 將3D點(diǎn)云中地面和非地面點(diǎn)進(jìn)行分割, 并分別進(jìn)行不同強(qiáng)度的稀疏化處理, 而后經(jīng)球坐標(biāo)轉(zhuǎn)換后映射為二維圖像, 并利用Morton碼表示為空間更小的一維向量, 最后進(jìn)行圖像壓縮. 實(shí)驗(yàn)結(jié)果表明, 本文的方法明顯優(yōu)于文獻(xiàn)[4,18-19]的方法. 然而, 目前的編碼方案僅針對單幀點(diǎn)云. 本研究的下一步目標(biāo)是壓縮點(diǎn)云序列, 在單幀點(diǎn)云壓縮框架基礎(chǔ)上, 拓展對后續(xù)編碼幀高效的預(yù)測算法, 這將具有更廣闊的應(yīng)用前景. 例如, 結(jié)合深度學(xué)習(xí)探索高效的點(diǎn)云幀間預(yù)測技術(shù), 降低時間冗余, 以達(dá)到更高壓縮性能.