頓啟鵬,毋 濤
(西安工程大學 計算機科學學院,陜西 西安 710048)
隨著企業(yè)的不斷擴大,倉庫管理是企業(yè)的一個重點問題,如何及時地獲得倉庫的可用空間量,是提高企業(yè)生產效率的一大難題。目前,測量距離的機器有激光測距儀、雷達、深度相機等,倉庫可用空間的計算(體積測量)方法主要有基于點云體積的測量方法,通過投影法[1]、最小包圍盒法[2]、體元模擬法[3]、快速體積計算[4]、格網(wǎng)法[5]、切片法[6]等可得到相應的數(shù)據(jù)。
激光測距儀、雷達這些設備有的價格不菲,有的體積太大,不易在倉庫中使用、管理。反觀深度相機(Kinect,RealSense等)價格客觀,簡易小巧。2014年,RealSense深度相機[7]面向市場,它的幀率是Kinect[8]的兩倍,通過它可以快速得到貨物到相機的距離,故而該文選擇了后者。
岳坤明等[1]利用雷達獲取點云數(shù)據(jù),然后對點云進行去噪,得到目標點云,然后對點云構建Delaunay三角網(wǎng),將待測物劃分成三棱柱,計算出每一個三棱柱的體積相加,但計算三棱柱的體積時,進行了投影和割補,計算復雜。李宏星等[9]利用簡單幾何法計算了20棵樹木的樹冠體積,該測量方法簡單,但精度不高。劉金錦等[6]利用切片法對物體的體積進行了計算,對點云的處理如下:首先對點云進行獲取,接著對點云進行切片處理,再者確定點云的輪廓邊界,然后計算每一個截面面積,最后將每一片面的體積累加獲得目標物體積。該方法步驟繁瑣復雜。
由此,該文提出了一種借助RealSense深度相機簡單快速測得倉庫貨物體積的方法。該方案的第一步是利用RealSense D435的自動校準功能補全深度圖像,接著使用條件濾波與統(tǒng)計分析法等方法完成對點云的去噪處理,然后使用均勻網(wǎng)格法將點云精簡,方便后續(xù)貨物點云體積的計算,最后根據(jù)貨物堆的大小不一,分別提出了兩種計算方案(基于改進的投影法,將統(tǒng)計分析、投影、積分做了結合)。由此,通過獲知倉庫貨物體積,倉庫可快速調配貨物的分布,提高效率。
1.1.1 RealSenseD435
該文使用的深度相機是英特爾的RealSenseD435,這款相機非常精巧,其構造如圖1所示。RealSenseD435搭載了全面的深度處理單元,除此之外,具有高深度的分辨率、更寬闊的拍攝范圍、全局快門感應器,能獲得更加全面、準確的點云數(shù)據(jù)。

圖1 RealSenseD435相機
1.1.2 深度相機的自動校準
RealSenseD435的相機校準功能大大地提高了拍攝數(shù)據(jù)的準確性。外界條件的改變有可能導致深度相機拍攝的照片失真,所以常需要對相機再一次進行標定操作。RealSenseD400此系列以上的相機可以自動進行校準操作,快速恢復內外參數(shù)。在此期間,將相機置于穩(wěn)定環(huán)境中,調用其內置函數(shù)完成參數(shù)調整,調節(jié)效果如圖2所示。

圖2 自動校準對比
1.1.3 獲取點云
通過RealSenseD435的標定來求出它的內外參數(shù)和畸變系數(shù)[10]。在RealSenseD435自動校準后,可以得到倉庫貨物堆的深度圖,然后利用RealSenseD435標定后得到內外參數(shù)和畸變系數(shù)生成點云坐標數(shù)據(jù)。
RealSenseD435標定得到內部參數(shù)、外部參數(shù),如表1。點云數(shù)據(jù)利用深度圖的圖像素坐標根據(jù)獲取的內外參數(shù)轉化成現(xiàn)實世界中的坐標。通過相機內參計算像素點相應的相機坐標系中的坐標,根據(jù)相機外參得到像素點在世界坐標系中的坐標。

表1 相機內外參數(shù)
像素坐標系和世界坐標系相互轉化如下:
(1)
其中,Q(X,Y)是像素坐標;Z是深度值;Q1(X1,Y1,Z1)是世界坐標。
在RealSenseD435獲取點云時,外界原因(例如:遮擋物、震動、光線等)的存在可能導致出現(xiàn)大量的噪點點云,噪點點云的存在會影響后面的點云體積計算的精確度,所以獲取的初始點云不可直接計算物體的體積,需要對初始點云進行去噪處理。該文先是使用條件濾波去除待測貨物點云以外的噪點,然后使用統(tǒng)計分析法去除貨物點云周圍的離群點。
1.2.1 條件濾波
RealSenseD435獲取點云的時候,會將拍攝范圍內的所有點云獲取(包括背景),這樣就造成了得到的數(shù)據(jù)包含大量的噪點點云。可以通過條件的設置來獲取主體點云,去除背景點云。實驗中RealSenseD435相機高度以及相機間的距離是不變的。故可使用條件濾波[11],分別設置三維坐標下各個坐標軸的取值范圍,去除每個坐標軸方向上的背景點云。
算法步驟如下:(1)當測小貨物堆(體積小于2立方米的貨物)時,假設相機的高度為d0,利用條件濾波,將Z軸上大于d0的點云去除;(2)當測大貨堆(體積大于等于2立方米的貨物)時,相機高度為d1,貨物的最大高度是d2,相機到貨物的距離最近距離為d3,最遠距離為d4,故而使用條件濾波將Y軸上最大值取d1,最小值是d1-d2,故取[d1-d2,d1];在Z軸上取[d3,d4]中的點云。
圖3(a)是拍攝的貨物堆,圖3(b)是獲取的初始點云,含有待測物點云和背景點云,圖3(c)是經(jīng)過條件濾波后的待測物點云,去除了大部分的非測物點云。

圖3 點云預處理過程
1.2.2 統(tǒng)計濾波
在進行統(tǒng)計濾波前,可以利用均勻網(wǎng)格[12]對條件濾波后的點云進行下采樣,以此來減少統(tǒng)計分析法[13-14]的計算量和計算時間。RealSense深度相機在采集待測物點云時會連帶著周圍的離群點掃描進去,但離群點與主體點云的附近點分布存在差別,貨物點云是密集分布,噪點相對分散。
設貨物點云總數(shù)是N,每個點云的鄰近數(shù)設置成k。可以根據(jù)每個點云和它的近鄰點的三維坐標,得到它與鄰近點距離的平均值Di。根據(jù)每個點云的Di計算整個距離的平均值D,進而也得到標準差σ,然后根據(jù)前面的數(shù)據(jù)計算距離閾值M。例如:點Q1(x1,y1,z1),到它的近鄰點的距離公式是:
(2)
點Q1距離均值D1為:
(3)
使用上面的計算方式遍歷完每個貨物點云點,然后計算整個點云的距離均值如下:
(4)
標準差為:
(5)
由平均值和標準差得到距離閾值為:
M=D+aσ
(6)
其中,a為相應的閾值系數(shù),以此來控制M。根據(jù)實驗可得到d1>M,該點視為離群點去除。
根據(jù)圖3(c)知道,條件濾波過濾掉背景點云后,貨物點云附近還存在一些的離群點。使用統(tǒng)計分析法過濾的效果如圖3(d)所示,可以看到點云離群點減少了許多。
獲取的點云數(shù)據(jù)分兩種情況:(1)測小貨物堆(體積小2立方米的貨物)體積時,采用的是相機從上往下拍,獲取貨物和地面的點云,如圖4(a)所示;(2)測大貨物堆(體積大于等于2立方米的貨物)體積時,相機處于貨物的兩側并且處于同一條直線上,采用兩側拍照法,獲取貨物對的兩個側面,如圖4(b)所示。

圖4 大小貨物堆測量方式
針對預處理后的貨物點云,提出一種基于統(tǒng)計分析法、投影法與積分法[15]結合的點云體積計算方法,在使用積分法時,選擇合適的單位長度對于算法的效率和精確度至關重要,所以需要先用統(tǒng)計分析法得到待測物的普遍點云距離,確定單位長度,再進行處理;小貨物堆的拍攝場景以及參與計算的點云如圖5所示。

圖5 小貨物堆
具體步驟如下:
(1)根據(jù)地面特征,使用RANSAC算法[16-17]將預處理的點云進行平面擬合,獲取地面平面函數(shù)ax+by+cz+d=0。
(2)進行點云分割去除地面點云,留下待測物點云。
(3)將待測物點云根據(jù)平面函數(shù)ax+by+cz+d=0投影到地面,其中對于一點P(x0,y0,z0)和在平面的投影點P'(x1,y1,z1)關系如下:因為PP'與平面的法線平行,故而:
(7)
使用點P坐標表示P'坐標:
x1=x0-a*t,y1=y0-a*t,z1=z0-a*t
(8)
將其帶入平面ax+by+cz+d=0中求得即可。
(4)使用統(tǒng)計分析法獲取投影點云間的平均距離D和相應的距離標準差σ。
(5)根據(jù)步驟4的平均距離和標準差獲取一個長度值l。
l=a*D+b*σ
(9)
式中,a,b是比例系數(shù)。
(6)求出投影點云在x,y的極值,確定投影范圍。
(7)根據(jù)步驟5得到的長度值和步驟6投影范圍將投影面方格化。
(8)求出每個小方格中投影點云對應的待測物點云到平面的平均距離h。
(10)
式中,點P(x,y,z)到平面ax+by+cz+d=0的距離為d。

(11)
式中,di是每個小方格中待測物點到平面的距離。
(9)根據(jù)步驟5中的長度值和步驟8中的平均距離得到單個體積。
v=l*l*h
(12)
(10)將步驟9中的單元體積累加得到待測物的體積。
(13)
小貨物堆測量流程如圖6所示。
測大型貨物體積時,因相機高度原因不能再從上往下拍照,所以選擇從兩側拍待測物的側面,也是采用測小貨物堆的方式,不過對投影和積分方式再次做了一次變形;該文使用的兩個相機位置是處在一條直線上,距離a米。拍攝大貨物堆的兩側(見圖7(a))以及參與計算的兩側點云(見圖7(b))。

圖6 小貨物堆測量流程

圖7 大貨物堆
具體步驟如下:
(1)因為兩個相機相對拍攝,所以在水平方向上是相反的,先將一個相機的拍攝的點云X軸上的坐標取反操作。
(2)將兩個相機拍攝的點云各自投影到坐標系中的XOY面上,公式與上面的一樣,不在詳解。
(3)使用統(tǒng)計分析法計算兩個投影點云間的平均距離D0,D1和標準差σ0,σ1,然后再求相應的平均值D和σ。
(4)根據(jù)步驟3的平均距離和標準差獲取一個長度值l(獲取方式和小貨物堆相似)。
(5)求待測物點云在x,y上面的極值。
(6)對投影面的點云進行積分方格化。
(7)求出每個小方格中投影點云對應的待測物點云到對應XOY面的平均距離d。
(8)求出每個單元格待測物的體積vi。
vi=(a-d0-d1)*l*l
(14)
式中,d0,d1分別是單元格內待測物兩側點云分別到兩個相機的平均距離。
(9)進行累加求得待測物的體積。
大貨物堆測量流程如圖8所示。
該文是利用標定好的RealSense進行貨物點云拍攝(測小貨物堆使用一臺,測大貨物堆使用兩臺),實驗環(huán)境為處理器AMD Ryzen 7 5800H with Radeon Graphics(16 CPUs),~3.2 GHz,8.00 GB Window11 64位的操作系統(tǒng),點云庫PCL1.11.1版本,編譯環(huán)境Visual Studio 2 019開發(fā)平臺,深度相機RealSense D435,相應的接口版本RealSenseSDK2.0.C++編程語言。利用真實的貨物進行體積比較。
首先,對小貨物體積采用一臺相機從上往下拍的方式進行了測試,本次實驗使用了5個小貨物堆,然后分別使用了傳統(tǒng)的投影法(徐欣等[18]使用的三點高的平均值做三棱柱的高)和本實驗改進的投影法做了對比,并且在每個投影法的實驗環(huán)境分三種:強光、光照均勻、弱光陰暗。實驗結果如表2所示。

圖8 大貨物堆測量流程
然后,對使用兩個相機在大貨物兩側進行拍攝進行了測試,兩個相機相距4.6 m,同樣使用了5個大貨物堆(拍攝的大貨物堆體積受拍攝場地和相機視野限制),進行試驗的條件和對比方案與前者相同,實驗對象以及結果如表3所示。

表2 小貨物堆體積數(shù)據(jù)

表3 大貨物堆體積數(shù)據(jù)
最后,選擇了不同形狀的貨物使用文中方法進行了實驗(包含大小貨物堆的測量),結果如表4所示。

表4 不同貨物形狀體積數(shù)據(jù)
由表2和表3可知,在三種環(huán)境下,光照均勻情況下最佳。而在光照均勻的情況下,文中改進的投影法更接近真實貨物體積值,并且測得的數(shù)據(jù)較為穩(wěn)定。
測量貨物的體積來源于貨物的點云,不同的形狀不會對結果產生影響,該論點由表4可知,不同形狀的貨物測得值穩(wěn)定,且與真實值相差不超過3%。
針對企業(yè)倉庫計算貨物的體積,使用RealSenseD435深度相機獲取點云數(shù)據(jù),該深度相機占地空間小,而且使用起來方便簡單。在對獲取的初始點云進行預處理操作后,先將待測物點云投影到平面上,然后利用統(tǒng)計分析法獲取投影點普遍歐氏距離分布情況,確定利用積分法求取物體體積時的單元格長度,接著求取落在單元格中待測物點云到平面的平均距離,最后獲取到相應的單元體積,累加獲得待測物體積。經(jīng)過實驗證明,測得的數(shù)據(jù)與真實數(shù)據(jù)相差小于3%,滿足現(xiàn)在企業(yè)的使用需求。