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

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

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

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

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

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

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

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

圖6 小貨物堆測量流程

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

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

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

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

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