馬學(xué)磊 薛河儒 周艷青 姜新華 劉 娜
(內(nèi)蒙古農(nóng)業(yè)大學(xué) 計算機與信息工程學(xué)院,呼和浩特 010018)
羊體尺數(shù)據(jù)能夠反映羊的體格大小、體軀結(jié)構(gòu)、生長發(fā)育狀況以及各部位之間相對發(fā)育關(guān)系,是衡量羊生長發(fā)育的主要指標(biāo)。依據(jù)體尺數(shù)據(jù)可以評估羊的生長發(fā)育特性、遺傳特性[1]。傳統(tǒng)的羊體尺參數(shù)利用皮尺或測杖等工具人工測量,不僅工作量大,操作繁瑣,人為誤差較大,而且羊易產(chǎn)生應(yīng)激反應(yīng)。本研究在自然狀態(tài)下對羊進(jìn)行非接觸式體表三維數(shù)據(jù)獲取,并對獲取的數(shù)據(jù)進(jìn)行處理,實現(xiàn)自動化提取羊的體尺數(shù)據(jù)。目前,利用計算機視覺技術(shù)檢測動物的生長信息是研究的熱點,主要的研究對象集中在牛、豬等,采用的自動化指標(biāo)獲取方法主要有2種:1)利用單目或雙目攝像機采集二維圖像,實現(xiàn)動物的體尺參數(shù)測量、體重預(yù)估[2-4]。這種方法對動物的位姿或環(huán)境光照和背景要求較嚴(yán)格,在實際生產(chǎn)中難以得到滿足。2)使用三維激光掃描儀或其它點云獲取設(shè)備用于動物體尺測量及三維重構(gòu),但其非常昂貴,不易用于農(nóng)業(yè)生產(chǎn)環(huán)境[5]。本研究擬采用三維點云處理算法對羊體點云進(jìn)行預(yù)處理、法向量估計、點云分割及測點提取,以期實現(xiàn)羊體尺參數(shù)的無接觸式測量。
點云數(shù)據(jù)采集使用易福門制造的三維攝像機,型號O3D303。攝像機孔徑角為60°×45°,圖像分辨率為352像素×264像素。易福門三維攝像機工作原理基于光飛時間技術(shù)(Time of Flight),通過給目標(biāo)連續(xù)發(fā)送光脈沖,用傳感器接收從物體返回的光,通過探測光脈沖的飛行時間得到目標(biāo)物距離。攝像機由獨立電源為其供電,通過以太網(wǎng)和計算機進(jìn)行通信,并實時記錄獲取的點云數(shù)據(jù),環(huán)境參數(shù)也通過以太網(wǎng)進(jìn)行修改。本研究試驗對象選取3周歲的蘇尼特羊標(biāo)本,使用1臺三維攝像機采集羊體點云數(shù)據(jù)(圖1),共獲取19 496個點云數(shù)據(jù)。而使用三維掃描儀可獲取492 030個點云數(shù)據(jù),數(shù)據(jù)量龐大且操作比較復(fù)雜。
圖1 三維攝像機采集的羊體點云數(shù)據(jù)Fig.1 Sheep body point cloud data captured by 3D camera
在獲取的原始點云數(shù)據(jù)中,除羊體信息外還有一些無效點云,如墻壁、地面、辦公桌等。因此,需要在原始點云數(shù)據(jù)中使用點云濾波去除無效點云。首先,對原始點云數(shù)據(jù)使用條件濾波。原始羊體點云數(shù)據(jù)在x、y、z方向上的取值范圍分別為0.95~0.65 m、-0.6~0.65 m、1.1~1.9 m。條件濾波通過設(shè)定濾波條件,把不在范圍內(nèi)的數(shù)據(jù)濾除。其次,使用半徑濾波去除點云數(shù)據(jù)中的離群點及噪聲點。離群點為游離在場景中物體表面之外的噪聲點,它會對算法造成干擾,影響算法的精度。半徑濾波設(shè)定每個點在搜索半徑內(nèi)至少有足夠多的近鄰點,不滿足則被刪除。設(shè)定半徑濾波的搜索半徑為0.03 m,搜索半徑內(nèi)最少的近鄰點數(shù)為4個,原始羊體點云經(jīng)過點云預(yù)處理后的結(jié)果見圖2。羊體點云經(jīng)條件濾波和半徑濾波處理后點云數(shù)據(jù)量分別為8 287、7 724個。
圖2 羊體點云預(yù)處理結(jié)果Fig.2 Preprocessing result of sheep body point cloud
有效地估計點云法向量是許多點云數(shù)據(jù)處理的基礎(chǔ)。本研究采用主成分分析(PCA)計算點云法向量。平面方程定義為:
ax+by+cz+d=0
(1)
式中:a、b、c為平面參數(shù);d為原點到平面的距離。點云集合Q內(nèi)任一點pi(xi,yi,zi)的k近鄰點的協(xié)方差矩陣C為:
(2)
(3)
(4)
主成分分析容易受到外點的干擾,影響算法的精度。因此,在平面擬合之前應(yīng)先去除點云集合中的外點。本研究首先使用隨機采樣一致性算法去除點集內(nèi)的外點,然后由內(nèi)點數(shù)據(jù)使用主成分分析計算點云法向量和曲率。
隨機采樣一致性算法(RANSAC)是一種隨機參數(shù)估計算法。它通過在樣本空間中隨機抽取1個子集來初始化模型,然后計算樣本空間中所有樣本與該模型的偏差,并與設(shè)定的閾值進(jìn)行比較,將所有偏差小于閾值的樣本(內(nèi)點) 組成1個一致集,并記錄其大小。按照一定的次數(shù)重復(fù)上述操作后,選取內(nèi)點最多的一致集,根據(jù)該子集計算的模型為該樣本集的最佳模型估計。
使用主成分分析和隨機采樣一致性算法估計點云法向量的步驟如下:
1)從點pi的k近鄰點中隨機選取3個點生成平面,計算近鄰點pj到該平面的距離dj。
2)選取閾值t,若dj≤t則pj被認(rèn)為是內(nèi)點,統(tǒng)計出此平面的內(nèi)點個數(shù)N。
3)重復(fù)以上步驟n次,比較選取內(nèi)點最多的平面。
4)利用步驟3)中得到內(nèi)點最多的平面,將近鄰集合P中到平面的距離大于閾值t的外點去除,利用內(nèi)點數(shù)據(jù)使用主成分分析計算點pi的法向量和曲率。
利用上述方法估計的法向量具有二義性,需要對點云數(shù)據(jù)的法向量重定向,使法向量方向一致。若點pi的法向量不滿足式(5),則對其重定向。
n·(vp-pi)>0
(5)
式中:n為點pi的法向量,vp為視點。
為了驗證本研究法向量估計方法的有效性,使用不同方法估計點云法向量(圖3)。試驗生成160個高斯分布的數(shù)據(jù),其中內(nèi)點數(shù)據(jù)100個(圖(3)藍(lán)色點),外點數(shù)據(jù)60個(圖(3)紅色點),近鄰點數(shù)k=10,距離閾值t=0.03,迭代次數(shù)n=100。從圖(3)看出,使用主成分分析和隨機采樣一致性算法可以使內(nèi)點數(shù)據(jù)法向量方向基本一致。
圖3 不同方法估計點云法向量的結(jié)果Fig.3 Result of different methods for estimating normal of point cloud
使用主成分分析和隨機采樣一致性算法對羊體點云法向量估計的結(jié)果見圖4,試驗中取近鄰點數(shù)k=50,距離閾值t=0.03,迭代次數(shù)n=100。
圖4 主成分分析和隨機采樣一致性算法對羊體點云法向量估計的結(jié)果Fig.4 Result of normal estimation of sheep point cloud using PCA and RANSAC
點云分割將使用特定設(shè)備獲取的雜亂無章的點云數(shù)據(jù),分割成若干個互不相交的子集,每個子集中的數(shù)據(jù)具有相同的屬性特征。點云的區(qū)域生長選定初始種子點,作為生長的起點;然后將種子點的近鄰點與種子點進(jìn)行比較,將具有相似性質(zhì)的點合并起來繼續(xù)向外生長,直到?jīng)]有滿足條件的點被包括進(jìn)來為止。本研究在此基礎(chǔ)上做了如下改進(jìn):1)從點云表面變化最小的地方開始生長,會得到比較好的分割效果,選取點云數(shù)據(jù)中曲率最小的點作為初始種子點;2)使用正交距離、歐式距離和法向量夾角作為區(qū)域生長中判斷點云相似性的度量。在區(qū)域生長中,除法向量夾角的閾值需要提前設(shè)定外,其它兩個距離閾值自動計算獲得;3)曲率閾值取近鄰點的曲率均值,避免了過分割和欠分割現(xiàn)象。
點pi到擬合平面的正交距離d1定義為:
(6)
t1=di,med+2×di,mad
(7)
式中:di,med為近鄰點集P內(nèi)任一點的正交距離的中位數(shù);di,mad為距離的中位數(shù)中誤差,其定義為:
di,mad=1.482 6×|di-di,med|med
(8)
式中:di為近鄰點到擬合平面的正交距離。
點云區(qū)域生長中,如果種子點和近鄰點具有相似特征,則它們的空間距離較近。使用歐式距離度量兩個點的空間距離。點pi到pj的歐式距離d2為:
(9)
如果點pj到種子點的歐式距離大于閾值t2,則pj為外點。t2取近鄰點到種子點的歐式距離的中位數(shù)。
點pi和pj的法向量夾角θ定義為:
(10)
式中:ni和nj分別是點pi和pj的法向量。
改進(jìn)的區(qū)域生長法步驟如下:
1)找到點云集合Q中曲率最小的點pi,作為區(qū)域生長的初始種子,將種子所在區(qū)域作為當(dāng)前區(qū)域。
2)對種子的k近鄰點采用隨機采樣一致性算法擬合平面,計算近鄰點到平面的正交距離d1,近鄰點與種子點的歐式距離d2、法向量夾角θ。
3)計算正交距離和歐式距離的閾值t1、t2,選取夾角閾值θt;若d1≤t1,d2≤t2,θ≤θt,則將該近鄰點添加到當(dāng)前區(qū)域。
4)若種子點的近鄰點曲率小于曲率的均值,則該近鄰點加入種子點序列,并刪除當(dāng)前的種子點,循環(huán)執(zhí)行該過程直到種子序列中沒有種子。
5)若當(dāng)前區(qū)域點的數(shù)目超過Nmin,則當(dāng)前區(qū)域加入分割序列;迭代上述過程直到所有點已經(jīng)劃歸為某個區(qū)域。
改進(jìn)區(qū)域生長法對羊體點云數(shù)據(jù)的分割結(jié)果見圖5,取Nmin=10,k=300,法向量角度閾值θt=35°??梢钥闯觯倪M(jìn)的區(qū)域生長法能有效對羊體進(jìn)行分割,且不受外點影響。
圖5 改進(jìn)的區(qū)域生長法對羊體點云的分割結(jié)果Fig.5 Segmentation result of sheep body point cloud by improved region growing method
利用獲取的羊體點云數(shù)據(jù),從中選取各體尺測點計算羊體尺參數(shù)。羊體尺參數(shù)及測點見圖6。
羊體點云中肩端點和坐骨結(jié)節(jié)后端點的連線距離為體長,耆甲測量點到胸深測點的距離為胸深;體長和胸深參數(shù)依據(jù)歐式距離式(11)計算:
(11)
式中:(xi,yi,zi)和(xj,yj,zj)為體長或胸深參數(shù)兩端測點的三維坐標(biāo),L為體尺參數(shù)計算值。前蹄最低點和后蹄最低點的連線為地面基準(zhǔn)線,地面基準(zhǔn)線表示為l1:Ax+By+Cz=0;耆甲測量點和臀部最高點到地面基準(zhǔn)線的距離分別為體高和臀高。體高和臀高利用相應(yīng)測點到l1的距離公式(12)計算。
a,體長;b,體高;c,臀高;d,胸深a, Body length; b, Body hight; c, Hip hight; d, Chest depth1.坐骨結(jié)節(jié)后端點;2.耆甲測量點;3.前蹄最低點;4.后蹄最低點;5.胸深測點;6.臀部最高點;7.肩端點。1.The distal end point of the ischial tuberosity; 2.The measurement point of withers; 3.The lowest point of fore leg; 4.The lowest point of hind leg; 5.The measurement point of chest depth; 6.The highest point of hip; 7.The shoulder end point.圖6 羊體尺參數(shù)及測點Fig.6 Body size parameters and measuring points of sheep
(12)
式中:x、y、z為測點三維坐標(biāo);d為相應(yīng)的體尺參數(shù)計算值。
在Matlab平臺下手動選取羊體點云數(shù)據(jù)上各測點的三維坐標(biāo),結(jié)果見表1。為降低手動選點帶來的誤差,各測點均選取4次。
羊體尺參數(shù)的手工實測值與三維點云檢測結(jié)果見表2。實測值通過手工使用卷尺測量獲得,卷尺精度為1 mm,考慮到人為測量誤差,實際測量羊體長、體高、臀高、胸深各3次,取平均值作為其實測值,并且保持人工測點與體尺算法測點一致。
表1 羊體點云測點坐標(biāo)Table 1 Measuring point coordinates of sheep body point cloud
表2 羊體尺三維點云檢測值與實測值的比較
計算得出,體長的相對誤差為1.56%,臀高和胸深的相對誤差分別為1.97%和2.27%;體高相對誤差為2.36%,誤差相對較高。羊體尺參數(shù)的最大相對誤差為2.36%,在農(nóng)業(yè)應(yīng)用上達(dá)到動物體尺測量的誤差要求。總體看,使用羊體點云檢測得到的體尺值比實測值略大,誤差主要來源由3部分組成:1)三維攝像機獲取數(shù)據(jù)本身的誤差;2)羊毛厚度引起的誤差,因羊毛較長,手工測量體尺數(shù)據(jù)存在誤差;3)用戶選取測點不精確帶來的誤差,各測點均為手動選取,與真實測點有偏差。
本研究提出基于改進(jìn)區(qū)域生長法的羊體點云分割及體尺參數(shù)測量方法,使用易福門三維攝像機采集羊體點云數(shù)據(jù)。利用點云預(yù)處理、點云分割算法從原始點云數(shù)據(jù)中提取羊體數(shù)據(jù);手動選取羊體尺測點數(shù)據(jù),依據(jù)測點三維坐標(biāo)計算羊體尺參數(shù)。羊體尺參數(shù)最大相對誤差為2.36%,精度較高。本研究實現(xiàn)了基于三維點云的羊體尺參數(shù)的測量,后續(xù)可推廣到活體羊或其他的養(yǎng)殖行業(yè),為羊養(yǎng)殖業(yè)提供福利化生產(chǎn)思路。