徐金陽,徐愛俊*,周素茵,葉俊華,夏 芳
(1.浙江農(nóng)林大學(xué)信息工程學(xué)院,杭州311300;2.浙江省林業(yè)智能監(jiān)測(cè)與信息技術(shù)研究重點(diǎn)實(shí)驗(yàn)室,杭州311300;3.浙江農(nóng)林大學(xué)環(huán)境與資源學(xué)院,杭州311300;4.浙江農(nóng)林大學(xué)經(jīng)濟(jì)管理學(xué)院,杭州311300)
生長(zhǎng)和發(fā)育監(jiān)測(cè)對(duì)生豬養(yǎng)殖至關(guān)重要。體尺是衡量生豬生長(zhǎng)狀況重要指標(biāo)[1-2],也是育種、質(zhì)量預(yù)估、肉質(zhì)評(píng)價(jià)重要參考依據(jù)[3]。傳統(tǒng)體尺測(cè)量需人工接觸,難度大、成本高,同時(shí)對(duì)豬只產(chǎn)生應(yīng)激,影響其生長(zhǎng)發(fā)育。隨著機(jī)器視覺技術(shù)發(fā)展日趨成熟,基于該技術(shù)的豬體體尺非接觸式測(cè)量可大幅減小豬只應(yīng)激反應(yīng),提高生產(chǎn)效率[4]。
傳統(tǒng)相機(jī)采集的RGB豬體圖像,易受光照和豬體顏色等因素影響,豬體輪廓提取不準(zhǔn)確,導(dǎo)致體尺測(cè)量誤差較大[5-6],深度圖像對(duì)光照和豬體顏色不敏感,基于深度圖像的豬體體尺測(cè)量誤差相對(duì)較小。豬只體尺測(cè)量包括體尺測(cè)點(diǎn)(用于計(jì)算豬只體長(zhǎng)、體寬和體高的測(cè)量點(diǎn))提取和體尺還原兩個(gè)步驟,現(xiàn)有豬只體體尺測(cè)點(diǎn)提取算法主要針對(duì)豬體背部呈現(xiàn)無彎曲和無歪頭情況,如司永勝等利用深度圖像,通過最小外接矩調(diào)整豬體到水平方向,使用影差法和差分法找到豬體體尺測(cè)點(diǎn)[7]。Pezzuolo等利用Kinect相機(jī)采集豬體點(diǎn)云數(shù)據(jù),通過豬體形態(tài)特征確定體尺測(cè)點(diǎn)[8]。Guo等利用LSSA_CAU軟件合成豬體世界點(diǎn)云數(shù)據(jù)進(jìn)而完成體尺測(cè)量[9]。劉同海等利用輪廓和凸包絡(luò)線交點(diǎn)獲取頭尾部和肩臀部體尺測(cè)點(diǎn)[10]。李卓等結(jié)合凸包分析和形態(tài)特征確定體尺測(cè)點(diǎn)[11]。豬只脖頸或背部通常呈彎曲狀態(tài)[12-14],導(dǎo)致實(shí)際采集圖像與理想圖像存在差異。此外,現(xiàn)有生豬體尺測(cè)量算法在還原生豬真實(shí)體尺時(shí),通常需利用標(biāo)定尺輔助得到真實(shí)世界與圖像比例關(guān)系[15-16],這種體尺還原方式增加圖像采集復(fù)雜程度,降低工作效率。現(xiàn)有豬體體尺測(cè)量算法存在一定局限性。
針對(duì)現(xiàn)有生豬體尺測(cè)量算法中存在問題,本文基于Kinect相機(jī)采集生豬深度圖像,利用凸包絡(luò)和最大外接輪廓提取豬體自然狀態(tài)下體尺測(cè)點(diǎn),通過像素坐標(biāo)系與世界坐標(biāo)系變換,得到體尺點(diǎn)真實(shí)坐標(biāo),實(shí)現(xiàn)自然狀態(tài)下豬體體尺高精度測(cè)量。
2020年12月,在紹興市新昌縣大市聚新豐規(guī)模養(yǎng)殖場(chǎng)使用Azure Kinect DK深度像機(jī)采集長(zhǎng)白豬圖像,日齡為120~150 d。圖像大小為640像素×576像素,利用Visual Studio 2020作為編輯軟件處理圖像數(shù)據(jù)。上方相機(jī)與地面垂直距離約180 cm,側(cè)方相機(jī)與豬體側(cè)面水平距離約110 cm,采集俯視和側(cè)視圖共800張。采集方法如圖1所示。
圖1 數(shù)據(jù)采集方法Fig.1 Data acquisition method
首先對(duì)采集目標(biāo)的深度圖像通過影差法剔除背景信息,增強(qiáng)目標(biāo)信息;利用動(dòng)態(tài)閾值分割處理豬體圖像,采用中值模糊濾波多次迭代作去噪處理,最大程度消除噪聲;其次基于形態(tài)學(xué)運(yùn)算和canny算法完成豬體圖像邊界修飾和豬體輪廓提??;最后采用最大外接輪廓和凸包絡(luò)、提取體尺測(cè)點(diǎn)像素坐標(biāo),還原體尺測(cè)點(diǎn)三維信息,算法流程如圖2所示。
圖2 豬體輪廓及體尺測(cè)點(diǎn)提取算法流程Fig.2 Pig contour and measurement point extraction algorithm flow
豬體頭尾部體尺測(cè)點(diǎn)為輪廓頭尾部最大凹陷處,圖3為部分豬體輪廓線,C為頭部體尺測(cè)點(diǎn)。首先求得輪廓和凸包絡(luò)線交點(diǎn)A、B坐標(biāo)和直線AB線性方程,計(jì)算輪廓線AB上的點(diǎn)到直線AB距離d,當(dāng)d取最大值時(shí)對(duì)應(yīng)輪廓點(diǎn)即為頭部測(cè)點(diǎn)C,尾部體尺測(cè)點(diǎn)識(shí)別算法類同。
圖3 頭部體尺測(cè)點(diǎn)提取Fig.3 Head measurement point extraction
由圖3中幾何關(guān)系可知,線段AB長(zhǎng)度計(jì)算公式為:
式中,A點(diǎn)坐標(biāo)為(xA,yA),B點(diǎn)坐標(biāo)為(xB,yB)。
直線AB在二維坐標(biāo)系下方程一般式為:
式中,a、b、c為常數(shù),-a/b表示直線斜率。點(diǎn)(x,y)表示直線AB上任意一點(diǎn)的坐標(biāo)。通過A點(diǎn)和B點(diǎn)坐標(biāo)求得a、b和c的值。
輪廓線上點(diǎn)到直線AB的距離d計(jì)算公式為:
式中,(x',y')為輪廓線AB上任意一點(diǎn)坐標(biāo),通過在規(guī)定區(qū)間內(nèi),求出最大值的距離dmax和對(duì)應(yīng)體尺測(cè)點(diǎn)C坐標(biāo)。
確定頭尾部測(cè)點(diǎn)后,利用最大外接輪廓,獲取豬體彎曲狀態(tài)下肩臀部和體高體尺測(cè)點(diǎn)。以提取肩部體尺測(cè)點(diǎn)W為例說明,圖4a為豬體背部最大外接輪廓,采用差值法和曲率法識(shí)別體尺測(cè)點(diǎn),具體如下。
圖4 肩部體尺測(cè)點(diǎn)提取Fig.4 Shoulder measurement point extraction
首先把靠近體尺測(cè)點(diǎn)W的最大外接輪廓邊界作為基準(zhǔn)值,對(duì)基準(zhǔn)值和其水平對(duì)應(yīng)輪廓點(diǎn)做差值計(jì)算,差值Di計(jì)算公式為:
式中,(xi,yi)為輪廓點(diǎn)坐標(biāo),(xbase,ybase)為基準(zhǔn)值坐標(biāo),i和base取值為1,2,3,…,n。
以頭尾部體尺測(cè)點(diǎn)為邊界,通過式(4)計(jì)算,得到4b差值函數(shù)曲線y(Di)。由豬形態(tài)學(xué)知識(shí)可知,其臀部和肩部相對(duì)凸起,因此通過輪廓差值曲線曲率可求得體尺測(cè)點(diǎn)。差值函數(shù)曲率計(jì)算公式為:
式中,y'(Di)為差值函數(shù)上點(diǎn)的斜率,y''(Di)為差值函數(shù)y'(Di)的導(dǎo)數(shù)。
綜上可知,差值函數(shù)曲線上兩處曲率最小值分別是一側(cè)肩部和臀部的體尺測(cè)點(diǎn),點(diǎn)W即為肩部對(duì)應(yīng)體尺測(cè)點(diǎn),臀部和體高測(cè)點(diǎn)算法類同。
在提取體尺測(cè)點(diǎn)坐標(biāo)基礎(chǔ)上,通過體尺還原算法得到豬只真實(shí)體尺,算法流程如圖5所示。
圖5 體尺還原算法流程Fig.5 Flow of body size restore algorithm
豬只體尺測(cè)點(diǎn)從像素坐標(biāo)系轉(zhuǎn)換到世界坐標(biāo)系的原理如圖6所示,轉(zhuǎn)換公式如式(7)所示。
圖6 體尺還原算法原理Fig.6 Schematic diagram of body size restore algorithm
式中,(u,v)為像素平面中點(diǎn)的坐標(biāo),dx和dy為感光芯片上像素的實(shí)際大小,ZC為相機(jī)坐標(biāo)系下點(diǎn)的深度距離,f是相機(jī)的焦距,R為3×3矩陣,t為3×1,0為1×3矩陣。
完成體尺測(cè)點(diǎn)從像素坐標(biāo)系到世界坐標(biāo)系的轉(zhuǎn)換后,使用歐式距離公式計(jì)算豬只真實(shí)體尺,計(jì)算示意圖如7所示。體長(zhǎng)是從耳根中點(diǎn)沿背部脊梁經(jīng)肩部中點(diǎn)、臀部中點(diǎn)到尾根中點(diǎn)距離,體高為肩胛骨頂點(diǎn)到水平底面的垂直距離,肩寬為兩側(cè)肩部頂點(diǎn)距離,臀寬為兩側(cè)臀部頂點(diǎn)距離。
在動(dòng)態(tài)閾值分割和形態(tài)學(xué)修飾基礎(chǔ)上,利用canny算法、凸包絡(luò)和最大外接輪廓算法分別提取豬只輪廓、凸包絡(luò)和最大外接輪廓,結(jié)果如圖8所示。
圖7 豬彎曲體尺測(cè)量Fig.7 Pig bending size measurement
圖8 體尺測(cè)點(diǎn)提取Fig.8 Body size measurement point extraction
實(shí)驗(yàn)場(chǎng)地豬只各測(cè)點(diǎn)提取的坐標(biāo)值如表1所示。在提取測(cè)點(diǎn)坐標(biāo)值基礎(chǔ)上,可進(jìn)一步通過歐式距離公式計(jì)算豬只體尺。
表1 提取體尺測(cè)點(diǎn)坐標(biāo)值Table 1 Extract the coordinate value of the measuring point of the body size
分析計(jì)算現(xiàn)場(chǎng)采集的800張生豬圖片可知豬體彎曲弧度范圍一般為0°~40°。為研究本文彎曲體尺測(cè)點(diǎn)算法提取的魯棒性和精度,隨機(jī)采集養(yǎng)殖場(chǎng)中品種相同、生長(zhǎng)狀況類似的20頭長(zhǎng)白豬的圖像,每頭豬在不同彎曲弧度(0°~10°、10°~20°、20°~30°、30°~40°)范圍內(nèi)共800張圖片。
3.2.1 魯棒性驗(yàn)證
圖9 為隨機(jī)選取不同位置和不同角度的6幅生豬深度圖像及體尺測(cè)點(diǎn)提取結(jié)果,試驗(yàn)結(jié)果表明,該算法能準(zhǔn)確提取豬體不同彎曲弧度下體尺測(cè)點(diǎn),測(cè)點(diǎn)提取成功率為100%。
圖9 不同方位和彎曲狀態(tài)體尺測(cè)點(diǎn)提取效果Fig.9 Extraction effect of measurement points in different azimuths and bending states
3.2.2精度驗(yàn)證
首先通過皮尺和米尺測(cè)量豬體體尺數(shù)據(jù),測(cè)量點(diǎn)位置和體尺算法提取的測(cè)點(diǎn)位置相同,實(shí)際測(cè)量其體長(zhǎng)、肩寬、臀寬和體高各3次,取平均值作為實(shí)測(cè)值。利用本文測(cè)量方法得到測(cè)量值與實(shí)測(cè)值相對(duì)誤差見圖10。由圖10可知,本文方法測(cè)得的體尺中,肩寬測(cè)量精確度較高,其最大、最小相對(duì)誤差分別為5.03%和0.43%,平均相對(duì)誤差為1.92%;臀寬最大、最小相對(duì)誤差分別為5.45%和0.71%,平均相對(duì)誤差為2.00%;體高最大、最小相對(duì)誤差分別為6.10%和0.69%,平均相對(duì)誤差為2.64%;體長(zhǎng)測(cè)量誤差較大,其最大、最小相對(duì)誤差分別為5.12%和0.77%,平均相對(duì)誤差為2.93%。豬只不同彎曲弧度下體尺測(cè)量相對(duì)誤差見表2。
圖10 豬不同彎曲狀態(tài)體尺實(shí)測(cè)值和測(cè)量值相對(duì)誤差Fig.10 Relative error between field measured and measured body size of pigs in different bending states
表2 豬不同彎曲狀體尺測(cè)量相對(duì)誤差Table 2 Relative error of measuring different curved body size of pigs
隨機(jī)選取20頭長(zhǎng)白豬各10張不同角度的筆直狀圖片共200張,分別計(jì)算本文方法和國(guó)內(nèi)外其他方法豬體體尺測(cè)量方法的精確度,取平均值作為測(cè)量值,結(jié)果見圖11。
由圖11中試驗(yàn)數(shù)據(jù)可知,本方法測(cè)量精確度較高,體長(zhǎng)、肩臀寬和體高相對(duì)誤差分別為2.33%、1.29%、1.26%和1.92%;方法3測(cè)量精確度次之,體長(zhǎng)、肩臀寬和體高相對(duì)誤差分別為2.15%、2.95%、2.36%和1.53%;方法5體長(zhǎng)、肩臀寬和體高相對(duì)誤差分別為2.60%、3.09%、2.99%和3.17%;方法2體長(zhǎng)、肩臀寬和體高的相對(duì)誤差分別為2.87%、3.86%、4.15%和3.72%;方法1體長(zhǎng)、肩臀寬的相對(duì)誤差分別為2.76%、3.64%和4.20%;方法4測(cè)量精確度較低,體長(zhǎng)、肩臀寬和體高相對(duì)誤差分別為3.21%、5.95%、5.97%和6.00%。
采用凸包絡(luò)和最大外接輪廓提取豬彎曲狀態(tài)下的體尺測(cè)點(diǎn),提取成功率為100%。根據(jù)提取的體尺測(cè)點(diǎn)提出一種基于深度信息和坐標(biāo)系變換的豬體尺還原算法,無需標(biāo)定尺,即可較為準(zhǔn)確地還原豬體尺。豬體非彎曲狀態(tài)下體尺測(cè)量結(jié)果表明,本文方法精確度總體較高,在4個(gè)體尺指標(biāo)中,肩寬和臀寬測(cè)量精確度明顯優(yōu)于現(xiàn)有測(cè)量方法;體長(zhǎng)和體高測(cè)量精度與現(xiàn)有測(cè)量方法相差較小。豬體不同彎曲弧度(0°~40°)下測(cè)量結(jié)果表明,肩寬測(cè)量誤差較小,平均相對(duì)誤差不高于1.92%;臀寬和體高平均相對(duì)誤差分別不高于2.00%和2.64%;體長(zhǎng)測(cè)量誤差較大,平均相對(duì)誤差不高于2.93%。綜上,該方法適用于豬自然狀態(tài)下體尺測(cè)量,尤其是對(duì)彎曲體尺測(cè)量效果較好,滿足生豬實(shí)際生長(zhǎng)監(jiān)測(cè)需要。
本文對(duì)豬體肩臀部測(cè)量相對(duì)誤差較低,可能是獲取體尺測(cè)點(diǎn)深度信息時(shí)肩臀部測(cè)點(diǎn)離相機(jī)中心相較近;彎曲體尺測(cè)量需將把豬體按骨架分成若干段,測(cè)量誤差隨豬體彎曲弧度(0°~40°)的增加而增大,但在可接受范圍內(nèi)。