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