司永勝 安露露 劉 剛 李保成
(1.河北農(nóng)業(yè)大學(xué)信息科學(xué)與技術(shù)學(xué)院, 保定 071001; 2.中國農(nóng)業(yè)大學(xué)現(xiàn)代精細(xì)農(nóng)業(yè)系統(tǒng)集成研究教育部重點(diǎn)實(shí)驗(yàn)室,北京 100083; 3.中國農(nóng)業(yè)大學(xué)農(nóng)業(yè)部農(nóng)業(yè)信息獲取技術(shù)重點(diǎn)實(shí)驗(yàn)室, 北京 100083)
豬的體尺參數(shù)能夠反映豬的生長發(fā)育狀況,可作為衡量豬生長發(fā)育情況的一個(gè)主要指標(biāo)。在種豬選育、肉質(zhì)評價(jià)以及飼養(yǎng)管理等方面,豬體體尺也是一個(gè)重要指標(biāo)[1-3]。傳統(tǒng)的體尺測量多采用接觸式測量方法,一般用皮尺進(jìn)行手工測量。這種傳統(tǒng)的測量方法直接接觸豬體,測量難度大,誤差也較大,易使豬體受到刺激,影響其生長發(fā)育[4-6]。通過機(jī)器視覺技術(shù)可以實(shí)現(xiàn)無接觸豬體尺的測量,減少豬體的應(yīng)激,提高測量效率[7]。
利用機(jī)器視覺技術(shù)測量動(dòng)物體尺已有較多研究,取得了較大的進(jìn)展[4-10]。眾多利用機(jī)器視覺技術(shù)測量豬體尺的研究中,都是對靜態(tài)圖像進(jìn)行處理[5,7]。基于單幀靜態(tài)圖像進(jìn)行豬體尺測量,對采集的圖像要求較高,要求圖像中豬體完整,無歪頭、低頭現(xiàn)象,背部呈筆直狀、無彎曲[5,11-12]。在實(shí)際圖像采集過程中,由于豬的采食習(xí)性和爭斗習(xí)性,很難采集到滿足測量要求的理想圖像,因此制約了利用機(jī)器視覺技術(shù)進(jìn)行豬體體尺測量的應(yīng)用。此外,利用傳統(tǒng)彩色相機(jī)進(jìn)行豬體尺測量時(shí),受環(huán)境和光線影響,豬體上的臟污和地面高光物體容易造成目標(biāo)輪廓提取錯(cuò)誤[7],會(huì)增大體尺測量誤差。Kinect相機(jī)(微軟公司)可以輸出深度視頻數(shù)據(jù)。將深度視頻數(shù)據(jù)轉(zhuǎn)換為深度圖像序列,深度圖像可有效避免因背景和目標(biāo)顏色接近而造成的目標(biāo)識(shí)別錯(cuò)誤[13-14]。
本文采用Kinect相機(jī)采集視頻數(shù)據(jù),設(shè)計(jì)豬體姿態(tài)檢測算法,從視頻中篩選符合體尺測量的理想姿態(tài)圖像幀(以下簡稱理想姿態(tài)幀)。在此基礎(chǔ)上,設(shè)計(jì)一種豬體體尺測量算法。
實(shí)驗(yàn)數(shù)據(jù)采集自北京天鵬興旺養(yǎng)殖有限公司的規(guī)模養(yǎng)豬場和唐山市遷西縣太平寨養(yǎng)豬場,豬品種為長白豬和大白豬,豬齡約為60、150、180 d。如圖1所示,在豬的采食飲水區(qū)和休息區(qū)之間安裝利用鐵欄桿搭建的生豬通道,生豬通道入口處安裝有無線射頻識(shí)別(RFID)裝置,豬的耳部裝有RFID耳標(biāo),當(dāng)豬進(jìn)入通道后,RFID識(shí)別裝置可識(shí)別豬的身份,并將其與采集到的視頻數(shù)據(jù)進(jìn)行對應(yīng)。通道的入口和出口設(shè)計(jì)為只允許單向通過。通道的上方和側(cè)方各安裝有一臺(tái)Kinect相機(jī),分別采集豬的俯視圖和側(cè)視圖,以便測量豬的體長、體寬、體高等體尺參數(shù)。上方相機(jī)安裝點(diǎn)距離地面約170 cm。側(cè)方相機(jī)距離通道約110 cm。數(shù)據(jù)分兩次采集,共采集103頭豬的103組視頻數(shù)據(jù),俯視和側(cè)視視頻各52 016幀,視頻的分辨率為512像素×424像素,幀率為30幀/s。
圖1 豬體尺測量系統(tǒng)平臺(tái)Fig.1 Platform for body size measurement of pigs1、3.Kinect相機(jī) 2.生豬通道
數(shù)據(jù)的處理與分析采用Matlab 2017a軟件。依次提取視頻中圖像幀,選取圖像中欄桿內(nèi)部區(qū)域?yàn)榕d趣區(qū),裁剪興趣區(qū)的圖像,進(jìn)行差影法計(jì)算并將其轉(zhuǎn)換為二值圖像,利用最小外接矩形法[15]將豬體調(diào)整到水平方向。利用投影法識(shí)別豬的頭部位置,利用標(biāo)記法和骨骼化結(jié)合霍夫變換檢測耳部是否缺失及頭部是否歪斜,篩選出理想姿態(tài)幀?;诶硐胱藨B(tài)幀,進(jìn)行體尺測量。
理想姿態(tài)幀的檢測算法如圖2所示。采集視頻數(shù)據(jù)過程中,豬體只在欄桿內(nèi)部區(qū)域出現(xiàn),為提高處理速度,將每幀圖像中欄桿內(nèi)部區(qū)域設(shè)定為興趣區(qū),只對興趣區(qū)的圖像進(jìn)行處理。在通道內(nèi)沒有豬時(shí)拍攝一幀圖像,作為背景幀,然后將視頻數(shù)據(jù)中的每幀圖像依次與背景幀采用差影法進(jìn)行豬體識(shí)別。在豬體高度處放置一標(biāo)準(zhǔn)長度鋼尺,用于算法測量時(shí)像素長度轉(zhuǎn)換。利用Otsu法對差影法后的圖像進(jìn)行二值化處理,得到以豬體為目標(biāo)的二值圖像。
圖2 理想姿態(tài)幀檢測流程圖Fig.2 Flow chart of ideal posture frame detection
為了方便豬的通過,生豬通道寬度大于豬的體寬,俯視圖像中的豬體常呈傾斜狀態(tài)。為降低后期對耳根、尾根等部位檢測難度,采用最小外接矩形法檢測豬體的水平狀態(tài),并將傾斜豬體調(diào)整為水平方向。
對含有豬體的二值圖像提取邊界并計(jì)算邊界像素點(diǎn)的凸包多邊形,設(shè)凸包多邊形有n條邊,各邊端點(diǎn)坐標(biāo)為(xt,yt) ,t=1,2,…,n。
具體求解最小外接矩形的步驟如下:
(1)任意選取豬體輪廓凸多邊形的一條邊,設(shè)該邊的端點(diǎn)為T0(x1,y1)、T1(x2,y2)。計(jì)算線段T0T1與X軸之間的角度,定義其為邊角θ。以左端點(diǎn)T0為中心順時(shí)針旋轉(zhuǎn)該多邊形θ,使邊T0T1平行于X軸,邊角θ計(jì)算式為
(1)
(2)假設(shè)凸多邊形上各邊端點(diǎn)坐標(biāo)(xt,yt)順時(shí)針旋轉(zhuǎn)θ后,點(diǎn)的坐標(biāo)為(x′t,y′t),旋轉(zhuǎn)公式為
(2)
(3)根據(jù)所求旋轉(zhuǎn)后的各邊端點(diǎn)坐標(biāo),得到凸多邊形頂點(diǎn)的最小坐標(biāo)值(Xmin和Ymin)和最大坐標(biāo)值(Xmax和Ymax),即
(3)
最大坐標(biāo)值和最小坐標(biāo)值確定的4個(gè)點(diǎn)構(gòu)成一個(gè)矩形,即(Xmin,Ymin)、(Xmin,Ymax)、(Xmax,Ymax)、(Xmax,Ymin) 4點(diǎn)確定一個(gè)矩形,計(jì)算此矩形的面積。
(4)選擇凸包多邊形的下一條邊,重復(fù)上述步驟,直到凸包多邊形的所有邊都執(zhí)行完畢,得到n個(gè)矩形。
(5)比較n個(gè)矩形的面積,將面積最小的矩形逆時(shí)針旋轉(zhuǎn),旋轉(zhuǎn)角與凸多邊形旋轉(zhuǎn)的邊角相同。逆時(shí)針旋轉(zhuǎn)后的矩形即為所求最小外接矩形。
獲取最小外接矩形后,容易計(jì)算俯視圖像中的豬體水平角度。如圖3a所示,如果水平角度大于1°,則對此圖像進(jìn)行相應(yīng)旋轉(zhuǎn),將其調(diào)整為水平,如圖3b所示。
圖3 最小外接矩形法調(diào)整豬體為水平Fig.3 Adjusting pig to level by minimum bounding rectangle
豬體長通常為耳根中心到尾根中心的長度[1]。由于豬低頭或歪頭等行為,造成部分圖像幀中耳部缺失或位置偏斜,不適宜體尺測量,需要忽略這些圖像幀,為此需要首先檢測豬的頭部位置[16]。
本文采用投影法和差分法進(jìn)行豬脖頸、頭部和尾部的識(shí)別,具體如下:
將豬體調(diào)整為水平圖像的像素沿水平方向進(jìn)行垂直投影
(4)
式中h——圖像垂直方向的寬度
M——圖像水平方向的寬度
I(i,j)——圖像中(i,j)坐標(biāo)處的像素灰度
通過式(4)計(jì)算,得到圖4中的藍(lán)色曲線。從豬體中心到耳部范圍內(nèi),投影曲線最小值處為脖頸。一般情況下,在投影曲線上,耳部取得最大值,但由于存在豬歪頭情況,以此進(jìn)行判斷可靠性較差。本文對投影曲線進(jìn)行差分計(jì)算
Sd(j)=S(j+3)-S(j)
(j=1,2,…,M-3)
(5)
圖4 投影曲線(藍(lán))和差分曲線(紅)Fig.4 Projection curve (blue) and differential curve (red)
得到圖4中的紅色曲線,從豬體中心到豬頭部,差分曲線在脖頸和耳根結(jié)合部分取得最大值。在從豬體中心到脖頸和耳根結(jié)合部分的范圍內(nèi),搜索投影曲線的最小值點(diǎn),得到脖頸位置。脖頸以右的圖像即為頭部圖像。為獲得完整的頭部圖像,將上述方法獲得的脖頸位置向左移動(dòng)30像素,作為脖頸位置。此外,從軀干中心到尾部范圍內(nèi),紅色的差分曲線在尾根位置取得最大值。
體尺測量需要頭部和軀干保持一條直線[17],避免存在耳部缺失或頭部歪斜等情況。若豬體頭部出現(xiàn)歪頭、頭部被遮擋情況,會(huì)造成此幀圖像不適宜體尺測量[18]。體長的測量關(guān)鍵是需要檢測耳根和尾根的位置,如果耳部缺失,則難以測量體長。本文提出了頭部邊界標(biāo)記的算法,來判斷豬體是否耳部缺失,利用骨骼化提取豬體主線的方法判斷豬頭部是否歪斜。
2.3.1耳部缺失檢測
體長測量需要圖像中兩個(gè)耳部完整。獲取豬的頭部圖像后,提取豬頭部圖像的輪廓,如圖5a所示。在頭部輪廓圖像中,利用標(biāo)記法將豬頭部輪廓圖像轉(zhuǎn)換為函數(shù)圖像:以豬頸部連線中點(diǎn)O點(diǎn)為起點(diǎn),分別計(jì)算該點(diǎn)到圖像邊緣各個(gè)像素的距離,以像素的順序?yàn)闄M坐標(biāo),以豬頸部連線中點(diǎn)到邊緣各個(gè)像素的距離為縱坐標(biāo),將二維邊界轉(zhuǎn)換為一維函數(shù),如圖5b中藍(lán)色曲線。根據(jù)圖像尺寸,選取適當(dāng)閾值(本文選取60像素),將一維距離函數(shù)轉(zhuǎn)換為矩形波。標(biāo)準(zhǔn)豬頭圖像呈3個(gè)波峰。在豬低頭時(shí),圖像中鼻子部分會(huì)減小,在轉(zhuǎn)換為矩形波時(shí),中間的高電平部分會(huì)較窄甚至消失,而兩側(cè)的高電平寬度以及兩側(cè)高電平之間的距離變化較小。因此,采用下述條件判斷圖像中耳部是否有缺失:①頭部輪廓的矩形波含有2個(gè)或3個(gè)高電平。②兩側(cè)高電平間距離為80~120像素。③兩側(cè)高電平寬度為30~65像素。
圖5 耳部缺失檢測Fig.5 Detection of partial loss of ears
當(dāng)滿足全部上述條件時(shí),則判斷耳部完整,否則存在耳部缺失,不適宜體長測量。
2.3.2頭部歪斜檢測
剔除豬耳部缺失的圖像后,還需要保證豬頭部和軀干保持直線,為此需要檢測豬頭部歪斜情況。首先對豬體圖像骨骼化處理,然后進(jìn)行剪枝,最后利用霍夫變換判別頭部是否歪斜。骨骼化算法用于表示平面區(qū)域結(jié)構(gòu)形狀,是一種細(xì)化結(jié)構(gòu)的方法,是對目標(biāo)的一種拓?fù)涿枋鯷19]。F的骨架可以表達(dá)為
(6)
其中
SKr(F)=(FΘrG)-(FΘrG)°G
R=max{r|(FΘrG)≠?}
式中F——二值圖像 °——開運(yùn)算
G——一個(gè)結(jié)構(gòu)元素
(FΘrG)表示對F的連續(xù)r次腐蝕
(FΘrG)=(…((FΘG)ΘG)Θ…)ΘG
第r次是F被腐蝕為空集合前進(jìn)行的最后一次迭代。
對圖6a和圖6b的理想姿態(tài)圖像和歪斜圖像進(jìn)行骨骼化處理后,分別得到圖6c和圖6d的骨骼化圖像。骨骼化后的圖像中存在毛刺,需要對骨骼化圖像進(jìn)行剪枝處理[20-21],最終得到豬體主線。采用的剪枝算法如下:①搜索骨架的所有分支端點(diǎn),刪除所有端點(diǎn)。②設(shè)定循環(huán)次數(shù)q,重復(fù)步驟①q次。
循環(huán)次數(shù)需要根據(jù)圖像中毛刺長短進(jìn)行設(shè)定,本文中毛刺長35像素,即大部分毛刺小于35像素。上述剪枝算法會(huì)對主線也進(jìn)行相應(yīng)縮短,但不影響后期霍夫變換直線檢測的應(yīng)用。
剪枝后的圖像如圖6e、6f所示。剪枝后的骨架表征了豬體的基本姿態(tài),以肩部與脖頸的連接處為分界點(diǎn),將豬骨架分為左右兩部分,左邊的軀干部分和右邊的脖頸部分。如果豬頭部歪斜,左右兩部分的骨架有較大角度,否則二者近似在一條直線上。尋找肩部與脖頸連接處分界點(diǎn)方法如下:首先在剪枝后骨架中找到肩部點(diǎn)(軀干中部到脖頸之間,投影曲線上最大值處為肩部),然后連接肩部點(diǎn)與頭部中心成一線段,取線段中心偏左10個(gè)像素,作為分界點(diǎn)。對其左右兩部分骨架像素分別進(jìn)行霍夫變換(Hough transform)的直線檢測。右部分骨架中在剪枝后還存在由于耳部等形成的毛刺,為避免其干擾,在右側(cè)骨架中尋找最左側(cè)的節(jié)點(diǎn),取該節(jié)點(diǎn)左側(cè)骨架像素進(jìn)行霍夫變換直線檢測。頭部挺直及歪斜的圖像直線提取效果如圖6e、6f所示。兩直線夾角大于10°時(shí),表明豬頭部歪斜,不適宜進(jìn)行體尺測量。
圖6 豬頭部歪斜檢測Fig.6 Skew detection of pig head
體長測量需首先找到耳根和尾根的精確位置[18]。
以豬頭部圖像的中心為原點(diǎn),水平方向和垂直方向?yàn)閮蓚€(gè)坐標(biāo)軸建立坐標(biāo)系,在第2象限和第3象限分別檢測到原點(diǎn)距離最近的邊緣點(diǎn),分別為兩個(gè)耳根位置點(diǎn),如圖7a所示。
以豬體中心為左右分界點(diǎn),圖4中差分曲線在圖像左側(cè)取得最大值處為尾根大致位置。設(shè)該處的橫坐標(biāo)為x3,作直線x=x3, 該直線與豬體輪廓交于兩點(diǎn)A和B。A、B兩點(diǎn)不是精確的尾根位置。經(jīng)過AB中心點(diǎn)C,作一水平線,在水平線上C點(diǎn)右側(cè)找到一點(diǎn)D,使
(7)
式中l(wèi)CD、lAB——線段CD、AB的長度
以D點(diǎn)為原點(diǎn),在第2象限和第3象限分別檢測距離原點(diǎn)最近的邊緣點(diǎn),分別為兩個(gè)尾根位置點(diǎn),如圖7b所示。連接尾根和耳根的中心,可得到豬的體長。體寬為肩胛骨頂點(diǎn)處豬體的寬度[1]。在豬體中心到脖頸的范圍內(nèi),投影曲線在肩部取得最大值。設(shè)該處的橫坐標(biāo)為x4,獲取直線x=x4,該直線與豬體輪廓交于兩點(diǎn),該兩點(diǎn)間的距離為體寬。
圖7 耳根尾根位置示意圖Fig.7 Detection sketch of ear root and tail root
體高一般是測量肩胛骨頂點(diǎn)垂直地面的高度[1]。檢測到豬體理想姿態(tài)幀,選擇與俯視圖對應(yīng)的側(cè)視圖進(jìn)行體高測量,選取通道區(qū)域?yàn)閳D像興趣區(qū),用自動(dòng)迭代選擇閾值法對圖像進(jìn)行閾值分割[19],獲得檢測出目標(biāo)的二值圖像。對二值圖像采用開運(yùn)算去除邊緣不規(guī)則部分,并填充孔洞,最后根據(jù)面積信息去噪,清除小于300像素的噪聲,得到圖像如圖8a所示??紤]到豬體不一定與拍攝平面平行,因此,測量的地面基準(zhǔn)線由豬前、后兩只腳的連線確定[22]。肩胛骨頂點(diǎn)位置確定方法如下:利用投影法搜索從豬頭部到豬體中心范圍內(nèi)投影曲線的最大值處,對應(yīng)的輪廓點(diǎn)即為肩胛骨頂點(diǎn),然后計(jì)算肩胛骨頂點(diǎn)到地面的距離,即為豬的體高。
最終得到的體高、體長、體寬測量結(jié)果如圖8所示。
圖8 體尺測量結(jié)果Fig.8 Measurement results of body size
利用上述算法,對103組視頻的52 016幀俯視、側(cè)視圖像是否適宜體尺測量進(jìn)行了自動(dòng)檢測。為檢驗(yàn)篩選效果,對上述圖像進(jìn)行了人工篩選,耳根、尾根位置清晰、頭頸部沒有明顯彎曲則認(rèn)為適宜體尺測量,否則認(rèn)為不適宜。將人工篩選結(jié)果作為真實(shí)值,如果某幀圖像人工篩選為理想姿態(tài)幀,而算法篩選為不適宜測量,則為漏報(bào),反之則為誤報(bào)。如表1所示,為方便統(tǒng)計(jì),依據(jù)豬的品種及生長天數(shù),將103頭豬的視頻數(shù)據(jù)分為5類:長白豬60 d、長白豬150 d、大白豬150 d、長白豬180 d和大白豬180 d??値瑪?shù)包括算法篩選理想姿態(tài)幀和算法篩選非理想姿態(tài)幀,算法篩選理想姿態(tài)幀共2 592幀,占總幀數(shù)52 016幀的4.98%,比例較小,其余49 424幀由于豬體不完整、頭部歪斜和耳部缺失原因被算法篩選為非理想姿態(tài)幀,適宜測量的理想姿態(tài)幀占比例很小,也說明了設(shè)計(jì)理想姿態(tài)檢測算法的必要性。算法共篩選出理想姿態(tài)幀2 592幀,而人工檢測為3 024幀,漏報(bào)共計(jì)432幀,誤報(bào)幀數(shù)為0幀。漏報(bào)幀屬于算法非理想姿態(tài)幀分類,對漏報(bào)的圖像幀進(jìn)行分析,出現(xiàn)漏報(bào)的主要原因是這些圖像幀中耳根部位清晰,但耳部受遮擋或噪聲影響,輪廓不完整,在利用耳部輪廓矩形波法檢測過程中被判定為不適宜檢測幀。這種情況下出現(xiàn)漏報(bào)是由于算法本身的局限性。另外有3、4幀漏報(bào)是由于豬的頭部歪斜11°左右,人工篩選認(rèn)為可以測量,而算法將其歸類為非理想檢測幀。視頻數(shù)據(jù)中,有部分理想姿態(tài)幀即可進(jìn)行體尺測量,因此,相對于誤報(bào),漏報(bào)的危害性較小。誤報(bào)將非理想姿態(tài)幀判別為理想姿態(tài)幀,會(huì)加大體尺測量誤差,103組視頻數(shù)據(jù)的測試中均未出現(xiàn)誤報(bào)現(xiàn)象。
所有的理想姿態(tài)幀均可進(jìn)行體尺測量,但理想姿態(tài)幀的選取策略將影響體尺測量效果。理想姿態(tài)幀的選取策略,取決于同組理想姿態(tài)幀之間的差異性。如果同組理想姿態(tài)幀之間差異過大,將增加理想姿態(tài)幀選取難度。為對比每組理想姿態(tài)幀之間的差異,按表1中的視頻數(shù)據(jù)分類方法,對103組理想姿態(tài)幀圖像進(jìn)行了體長算法測量,并計(jì)算了體長絕對偏差。體長絕對偏差為單幀測量值與本組測量均值的差值。
利用箱線圖對體長絕對偏差進(jìn)行分析,103組體長絕對偏差的箱線圖如圖9所示。
表1 理想姿態(tài)幀檢測結(jié)果Tab.1 Ideal posture frames detection results 幀
由圖9可知,每幀圖像的體長絕對偏差絕大部分小于6像素。5類數(shù)據(jù)中,同一組視頻內(nèi),最大值和最小值的差值小于10像素,即測得的最大體長與最小體長差值約為10像素。在圖像幀中,60、150、180 d豬齡的體長測量均值分別在262~324像素、331~390像素、363~428像素范圍內(nèi),因此,3種不同豬齡圖像的體長偏差與本組均值的百分比分別小于2.3%、1.8%和1.7%,同組內(nèi)測得的體長最大值和最小值差異占體長均值的百分比分別小于3.8%、3.0%和2.8%。隨著豬齡的增長,每幀圖像的體長偏差與本組均值的百分比以及同組內(nèi)體長最大最小值差異占體長均值的百分比均略有減小,可能原因是較小豬齡的豬應(yīng)激性較大,外界的干擾更容易影響圖像質(zhì)量。但從總體上說,測量結(jié)果的一致性較好。
測量結(jié)果良好的一致性一方面說明了姿態(tài)檢測算法篩選出的理想姿態(tài)幀之間差異性較小,也驗(yàn)證了體長測量算法的有效性。部分組內(nèi)數(shù)據(jù)差異非常小,低于5像素,如圖9a中的第4、14、15組,圖9b中的第20組,圖9c中的第13組,圖9d中第5、8、15組,圖9e中的第15組,上述組內(nèi)數(shù)據(jù)差異小的主要原因是部分組內(nèi)理想姿態(tài)幀較少,且時(shí)間間隔非常近,各圖像幀間差異很小,另外一個(gè)原因是豬經(jīng)過通道在理想姿態(tài)時(shí)有停頓,拍攝到多幅類似的理想幀圖像。圖9a、9c、9d、9e中,有6組數(shù)據(jù)出現(xiàn)了異常值,其中5組異常值較小,小于6像素,可以忽略,圖9a中的第7組異常值產(chǎn)生的主要原因是該幀圖像中豬的尾部甩動(dòng),尾部與臀部結(jié)合在一起,造成尾根位置檢測不準(zhǔn)確。
圖9 體長絕對偏差箱線圖Fig.9 Boxplot of body length absolute deviation
為驗(yàn)證體尺測量算法的精確度,在采集視頻數(shù)據(jù)后,采用測杖和皮尺等工具手工測量了對應(yīng)豬體的體長、體寬和體高數(shù)據(jù)。為減小誤差,體長、體寬、體高數(shù)據(jù)手工測量3次,取平均值作為測量值。利用本文算法對篩選出的理想姿態(tài)幀進(jìn)行了體尺測量,取每組平均值為算法測量值。將手工測量值作為真實(shí)值,計(jì)算了利用103組視頻數(shù)據(jù)的算法測量值的測量精確度。體尺算法測量精確度如圖10所示。在103組數(shù)據(jù)中,只有5組體長精確度低于95%,其余的體長精確度都高于95%,體長的精確度高于體寬和體高精確度,主要原因是相對于肩胛骨處的體寬測量點(diǎn)和體高測量點(diǎn),體長測量中的耳根和尾根位置更容易確定。體高測量的最低和最高精確度分別為92.3%和99.9%,平均精確度為96.3%。體寬測量的最低和最高精確度分別為91.7%和99.9%,平均精確度為95.5%。體長測量的最低和最高精確度分別為93.3%和99.9%,平均精確度為97.3%。由圖10可看出,最低精確度的測量數(shù)據(jù)為體寬測量值,且有多組體寬精確度接近最低精確度,表明體寬測量難度大于其他兩項(xiàng)指標(biāo)。
圖10 體尺測量精確度Fig.10 Measurement accuracy of body size
(1)為降低姿態(tài)檢測難度,采用最小外接矩形法檢測豬體的水平狀態(tài),并將傾斜豬體根據(jù)最小外接矩形的傾斜角度自動(dòng)調(diào)整為水平方向。
(2)對于已經(jīng)調(diào)整水平的豬體,提出了投影法和差分法識(shí)別豬脖頸、頭部和尾部位置。
(3)關(guān)于豬的姿態(tài)檢測,提出頭部邊界標(biāo)記的算法判斷豬是否耳部缺失,利用骨骼化提取豬體的主線并結(jié)合霍夫變換的算法判斷豬頭部是否歪斜。利用103組視頻、52 016幀俯視和側(cè)視圖像進(jìn)行測試,檢測出理想姿態(tài)2 592幀、漏報(bào)432幀、誤報(bào)0幀,漏報(bào)率略高,但誤報(bào)率為0。同組理想幀之間差異較小。
(4)提出的體長、體寬和體高測量算法,經(jīng)與手工測量數(shù)據(jù)對比,體長測量的平均精確度為97.3%,體寬的平均精確度為95.5%,體高的平均精確度為96.3%,測量的精確度較高。