APP下载

基于Kinect相机的猪体理想姿态检测与体尺测量

2019-02-15司永胜安露露李保成

农业机械学报 2019年1期
关键词:猪体体尺体长

司永胜 安露露 刘 刚 李保成

(1.河北农业大学信息科学与技术学院, 保定 071001; 2.中国农业大学现代精细农业系统集成研究教育部重点实验室,北京 100083; 3.中国农业大学农业部农业信息获取技术重点实验室, 北京 100083)

0 引言

猪的体尺参数能够反映猪的生长发育状况,可作为衡量猪生长发育情况的一个主要指标。在种猪选育、肉质评价以及饲养管理等方面,猪体体尺也是一个重要指标[1-3]。传统的体尺测量多采用接触式测量方法,一般用皮尺进行手工测量。这种传统的测量方法直接接触猪体,测量难度大,误差也较大,易使猪体受到刺激,影响其生长发育[4-6]。通过机器视觉技术可以实现无接触猪体尺的测量,减少猪体的应激,提高测量效率[7]。

利用机器视觉技术测量动物体尺已有较多研究,取得了较大的进展[4-10]。众多利用机器视觉技术测量猪体尺的研究中,都是对静态图像进行处理[5,7]。基于单帧静态图像进行猪体尺测量,对采集的图像要求较高,要求图像中猪体完整,无歪头、低头现象,背部呈笔直状、无弯曲[5,11-12]。在实际图像采集过程中,由于猪的采食习性和争斗习性,很难采集到满足测量要求的理想图像,因此制约了利用机器视觉技术进行猪体体尺测量的应用。此外,利用传统彩色相机进行猪体尺测量时,受环境和光线影响,猪体上的脏污和地面高光物体容易造成目标轮廓提取错误[7],会增大体尺测量误差。Kinect相机(微软公司)可以输出深度视频数据。将深度视频数据转换为深度图像序列,深度图像可有效避免因背景和目标颜色接近而造成的目标识别错误[13-14]。

本文采用Kinect相机采集视频数据,设计猪体姿态检测算法,从视频中筛选符合体尺测量的理想姿态图像帧(以下简称理想姿态帧)。在此基础上,设计一种猪体体尺测量算法。

1 材料与方法

1.1 数据采集

实验数据采集自北京天鹏兴旺养殖有限公司的规模养猪场和唐山市迁西县太平寨养猪场,猪品种为长白猪和大白猪,猪龄约为60、150、180 d。如图1所示,在猪的采食饮水区和休息区之间安装利用铁栏杆搭建的生猪通道,生猪通道入口处安装有无线射频识别(RFID)装置,猪的耳部装有RFID耳标,当猪进入通道后,RFID识别装置可识别猪的身份,并将其与采集到的视频数据进行对应。通道的入口和出口设计为只允许单向通过。通道的上方和侧方各安装有一台Kinect相机,分别采集猪的俯视图和侧视图,以便测量猪的体长、体宽、体高等体尺参数。上方相机安装点距离地面约170 cm。侧方相机距离通道约110 cm。数据分两次采集,共采集103头猪的103组视频数据,俯视和侧视视频各52 016帧,视频的分辨率为512像素×424像素,帧率为30帧/s。

图1 猪体尺测量系统平台Fig.1 Platform for body size measurement of pigs1、3.Kinect相机 2.生猪通道

1.2 数据处理平台与方法

数据的处理与分析采用Matlab 2017a软件。依次提取视频中图像帧,选取图像中栏杆内部区域为兴趣区,裁剪兴趣区的图像,进行差影法计算并将其转换为二值图像,利用最小外接矩形法[15]将猪体调整到水平方向。利用投影法识别猪的头部位置,利用标记法和骨骼化结合霍夫变换检测耳部是否缺失及头部是否歪斜,筛选出理想姿态帧。基于理想姿态帧,进行体尺测量。

2 理想姿态帧检测算法设计

理想姿态帧的检测算法如图2所示。采集视频数据过程中,猪体只在栏杆内部区域出现,为提高处理速度,将每帧图像中栏杆内部区域设定为兴趣区,只对兴趣区的图像进行处理。在通道内没有猪时拍摄一帧图像,作为背景帧,然后将视频数据中的每帧图像依次与背景帧采用差影法进行猪体识别。在猪体高度处放置一标准长度钢尺,用于算法测量时像素长度转换。利用Otsu法对差影法后的图像进行二值化处理,得到以猪体为目标的二值图像。

图2 理想姿态帧检测流程图Fig.2 Flow chart of ideal posture frame detection

2.1 猪体方向调整

为了方便猪的通过,生猪通道宽度大于猪的体宽,俯视图像中的猪体常呈倾斜状态。为降低后期对耳根、尾根等部位检测难度,采用最小外接矩形法检测猪体的水平状态,并将倾斜猪体调整为水平方向。

对含有猪体的二值图像提取边界并计算边界像素点的凸包多边形,设凸包多边形有n条边,各边端点坐标为(xt,yt) ,t=1,2,…,n。

具体求解最小外接矩形的步骤如下:

(1)任意选取猪体轮廓凸多边形的一条边,设该边的端点为T0(x1,y1)、T1(x2,y2)。计算线段T0T1与X轴之间的角度,定义其为边角θ。以左端点T0为中心顺时针旋转该多边形θ,使边T0T1平行于X轴,边角θ计算式为

(1)

(2)假设凸多边形上各边端点坐标(xt,yt)顺时针旋转θ后,点的坐标为(x′t,y′t),旋转公式为

(2)

(3)根据所求旋转后的各边端点坐标,得到凸多边形顶点的最小坐标值(Xmin和Ymin)和最大坐标值(Xmax和Ymax),即

(3)

最大坐标值和最小坐标值确定的4个点构成一个矩形,即(Xmin,Ymin)、(Xmin,Ymax)、(Xmax,Ymax)、(Xmax,Ymin) 4点确定一个矩形,计算此矩形的面积。

(4)选择凸包多边形的下一条边,重复上述步骤,直到凸包多边形的所有边都执行完毕,得到n个矩形。

(5)比较n个矩形的面积,将面积最小的矩形逆时针旋转,旋转角与凸多边形旋转的边角相同。逆时针旋转后的矩形即为所求最小外接矩形。

获取最小外接矩形后,容易计算俯视图像中的猪体水平角度。如图3a所示,如果水平角度大于1°,则对此图像进行相应旋转,将其调整为水平,如图3b所示。

图3 最小外接矩形法调整猪体为水平Fig.3 Adjusting pig to level by minimum bounding rectangle

2.2 头部、尾部的投影法和差分法识别

猪体长通常为耳根中心到尾根中心的长度[1]。由于猪低头或歪头等行为,造成部分图像帧中耳部缺失或位置偏斜,不适宜体尺测量,需要忽略这些图像帧,为此需要首先检测猪的头部位置[16]。

本文采用投影法和差分法进行猪脖颈、头部和尾部的识别,具体如下:

将猪体调整为水平图像的像素沿水平方向进行垂直投影

(4)

式中h——图像垂直方向的宽度

M——图像水平方向的宽度

I(i,j)——图像中(i,j)坐标处的像素灰度

通过式(4)计算,得到图4中的蓝色曲线。从猪体中心到耳部范围内,投影曲线最小值处为脖颈。一般情况下,在投影曲线上,耳部取得最大值,但由于存在猪歪头情况,以此进行判断可靠性较差。本文对投影曲线进行差分计算

Sd(j)=S(j+3)-S(j)
(j=1,2,…,M-3)

(5)

图4 投影曲线(蓝)和差分曲线(红)Fig.4 Projection curve (blue) and differential curve (red)

得到图4中的红色曲线,从猪体中心到猪头部,差分曲线在脖颈和耳根结合部分取得最大值。在从猪体中心到脖颈和耳根结合部分的范围内,搜索投影曲线的最小值点,得到脖颈位置。脖颈以右的图像即为头部图像。为获得完整的头部图像,将上述方法获得的脖颈位置向左移动30像素,作为脖颈位置。此外,从躯干中心到尾部范围内,红色的差分曲线在尾根位置取得最大值。

2.3 头部姿态检测

体尺测量需要头部和躯干保持一条直线[17],避免存在耳部缺失或头部歪斜等情况。若猪体头部出现歪头、头部被遮挡情况,会造成此帧图像不适宜体尺测量[18]。体长的测量关键是需要检测耳根和尾根的位置,如果耳部缺失,则难以测量体长。本文提出了头部边界标记的算法,来判断猪体是否耳部缺失,利用骨骼化提取猪体主线的方法判断猪头部是否歪斜。

2.3.1耳部缺失检测

体长测量需要图像中两个耳部完整。获取猪的头部图像后,提取猪头部图像的轮廓,如图5a所示。在头部轮廓图像中,利用标记法将猪头部轮廓图像转换为函数图像:以猪颈部连线中点O点为起点,分别计算该点到图像边缘各个像素的距离,以像素的顺序为横坐标,以猪颈部连线中点到边缘各个像素的距离为纵坐标,将二维边界转换为一维函数,如图5b中蓝色曲线。根据图像尺寸,选取适当阈值(本文选取60像素),将一维距离函数转换为矩形波。标准猪头图像呈3个波峰。在猪低头时,图像中鼻子部分会减小,在转换为矩形波时,中间的高电平部分会较窄甚至消失,而两侧的高电平宽度以及两侧高电平之间的距离变化较小。因此,采用下述条件判断图像中耳部是否有缺失:①头部轮廓的矩形波含有2个或3个高电平。②两侧高电平间距离为80~120像素。③两侧高电平宽度为30~65像素。

图5 耳部缺失检测Fig.5 Detection of partial loss of ears

当满足全部上述条件时,则判断耳部完整,否则存在耳部缺失,不适宜体长测量。

2.3.2头部歪斜检测

剔除猪耳部缺失的图像后,还需要保证猪头部和躯干保持直线,为此需要检测猪头部歪斜情况。首先对猪体图像骨骼化处理,然后进行剪枝,最后利用霍夫变换判别头部是否歪斜。骨骼化算法用于表示平面区域结构形状,是一种细化结构的方法,是对目标的一种拓扑描述[19]。F的骨架可以表达为

(6)

其中

SKr(F)=(FΘrG)-(FΘrG)∘G

R=max{r|(FΘrG)≠∅}

式中F——二值图像 ∘——开运算

G——一个结构元素

(FΘrG)表示对F的连续r次腐蚀

(FΘrG)=(…((FΘG)ΘG)Θ…)ΘG

第r次是F被腐蚀为空集合前进行的最后一次迭代。

对图6a和图6b的理想姿态图像和歪斜图像进行骨骼化处理后,分别得到图6c和图6d的骨骼化图像。骨骼化后的图像中存在毛刺,需要对骨骼化图像进行剪枝处理[20-21],最终得到猪体主线。采用的剪枝算法如下:①搜索骨架的所有分支端点,删除所有端点。②设定循环次数q,重复步骤①q次。

循环次数需要根据图像中毛刺长短进行设定,本文中毛刺长35像素,即大部分毛刺小于35像素。上述剪枝算法会对主线也进行相应缩短,但不影响后期霍夫变换直线检测的应用。

剪枝后的图像如图6e、6f所示。剪枝后的骨架表征了猪体的基本姿态,以肩部与脖颈的连接处为分界点,将猪骨架分为左右两部分,左边的躯干部分和右边的脖颈部分。如果猪头部歪斜,左右两部分的骨架有较大角度,否则二者近似在一条直线上。寻找肩部与脖颈连接处分界点方法如下:首先在剪枝后骨架中找到肩部点(躯干中部到脖颈之间,投影曲线上最大值处为肩部),然后连接肩部点与头部中心成一线段,取线段中心偏左10个像素,作为分界点。对其左右两部分骨架像素分别进行霍夫变换(Hough transform)的直线检测。右部分骨架中在剪枝后还存在由于耳部等形成的毛刺,为避免其干扰,在右侧骨架中寻找最左侧的节点,取该节点左侧骨架像素进行霍夫变换直线检测。头部挺直及歪斜的图像直线提取效果如图6e、6f所示。两直线夹角大于10°时,表明猪头部歪斜,不适宜进行体尺测量。

图6 猪头部歪斜检测Fig.6 Skew detection of pig head

2.4 体尺测量

体长测量需首先找到耳根和尾根的精确位置[18]。

以猪头部图像的中心为原点,水平方向和垂直方向为两个坐标轴建立坐标系,在第2象限和第3象限分别检测到原点距离最近的边缘点,分别为两个耳根位置点,如图7a所示。

以猪体中心为左右分界点,图4中差分曲线在图像左侧取得最大值处为尾根大致位置。设该处的横坐标为x3,作直线x=x3, 该直线与猪体轮廓交于两点A和B。A、B两点不是精确的尾根位置。经过AB中心点C,作一水平线,在水平线上C点右侧找到一点D,使

(7)

式中lCD、lAB——线段CD、AB的长度

以D点为原点,在第2象限和第3象限分别检测距离原点最近的边缘点,分别为两个尾根位置点,如图7b所示。连接尾根和耳根的中心,可得到猪的体长。体宽为肩胛骨顶点处猪体的宽度[1]。在猪体中心到脖颈的范围内,投影曲线在肩部取得最大值。设该处的横坐标为x4,获取直线x=x4,该直线与猪体轮廓交于两点,该两点间的距离为体宽。

图7 耳根尾根位置示意图Fig.7 Detection sketch of ear root and tail root

体高一般是测量肩胛骨顶点垂直地面的高度[1]。检测到猪体理想姿态帧,选择与俯视图对应的侧视图进行体高测量,选取通道区域为图像兴趣区,用自动迭代选择阈值法对图像进行阈值分割[19],获得检测出目标的二值图像。对二值图像采用开运算去除边缘不规则部分,并填充孔洞,最后根据面积信息去噪,清除小于300像素的噪声,得到图像如图8a所示。考虑到猪体不一定与拍摄平面平行,因此,测量的地面基准线由猪前、后两只脚的连线确定[22]。肩胛骨顶点位置确定方法如下:利用投影法搜索从猪头部到猪体中心范围内投影曲线的最大值处,对应的轮廓点即为肩胛骨顶点,然后计算肩胛骨顶点到地面的距离,即为猪的体高。

最终得到的体高、体长、体宽测量结果如图8所示。

图8 体尺测量结果Fig.8 Measurement results of body size

3 结果分析

利用上述算法,对103组视频的52 016帧俯视、侧视图像是否适宜体尺测量进行了自动检测。为检验筛选效果,对上述图像进行了人工筛选,耳根、尾根位置清晰、头颈部没有明显弯曲则认为适宜体尺测量,否则认为不适宜。将人工筛选结果作为真实值,如果某帧图像人工筛选为理想姿态帧,而算法筛选为不适宜测量,则为漏报,反之则为误报。如表1所示,为方便统计,依据猪的品种及生长天数,将103头猪的视频数据分为5类:长白猪60 d、长白猪150 d、大白猪150 d、长白猪180 d和大白猪180 d。总帧数包括算法筛选理想姿态帧和算法筛选非理想姿态帧,算法筛选理想姿态帧共2 592帧,占总帧数52 016帧的4.98%,比例较小,其余49 424帧由于猪体不完整、头部歪斜和耳部缺失原因被算法筛选为非理想姿态帧,适宜测量的理想姿态帧占比例很小,也说明了设计理想姿态检测算法的必要性。算法共筛选出理想姿态帧2 592帧,而人工检测为3 024帧,漏报共计432帧,误报帧数为0帧。漏报帧属于算法非理想姿态帧分类,对漏报的图像帧进行分析,出现漏报的主要原因是这些图像帧中耳根部位清晰,但耳部受遮挡或噪声影响,轮廓不完整,在利用耳部轮廓矩形波法检测过程中被判定为不适宜检测帧。这种情况下出现漏报是由于算法本身的局限性。另外有3、4帧漏报是由于猪的头部歪斜11°左右,人工筛选认为可以测量,而算法将其归类为非理想检测帧。视频数据中,有部分理想姿态帧即可进行体尺测量,因此,相对于误报,漏报的危害性较小。误报将非理想姿态帧判别为理想姿态帧,会加大体尺测量误差,103组视频数据的测试中均未出现误报现象。

所有的理想姿态帧均可进行体尺测量,但理想姿态帧的选取策略将影响体尺测量效果。理想姿态帧的选取策略,取决于同组理想姿态帧之间的差异性。如果同组理想姿态帧之间差异过大,将增加理想姿态帧选取难度。为对比每组理想姿态帧之间的差异,按表1中的视频数据分类方法,对103组理想姿态帧图像进行了体长算法测量,并计算了体长绝对偏差。体长绝对偏差为单帧测量值与本组测量均值的差值。

利用箱线图对体长绝对偏差进行分析,103组体长绝对偏差的箱线图如图9所示。

表1 理想姿态帧检测结果Tab.1 Ideal posture frames detection results 帧

由图9可知,每帧图像的体长绝对偏差绝大部分小于6像素。5类数据中,同一组视频内,最大值和最小值的差值小于10像素,即测得的最大体长与最小体长差值约为10像素。在图像帧中,60、150、180 d猪龄的体长测量均值分别在262~324像素、331~390像素、363~428像素范围内,因此,3种不同猪龄图像的体长偏差与本组均值的百分比分别小于2.3%、1.8%和1.7%,同组内测得的体长最大值和最小值差异占体长均值的百分比分别小于3.8%、3.0%和2.8%。随着猪龄的增长,每帧图像的体长偏差与本组均值的百分比以及同组内体长最大最小值差异占体长均值的百分比均略有减小,可能原因是较小猪龄的猪应激性较大,外界的干扰更容易影响图像质量。但从总体上说,测量结果的一致性较好。

测量结果良好的一致性一方面说明了姿态检测算法筛选出的理想姿态帧之间差异性较小,也验证了体长测量算法的有效性。部分组内数据差异非常小,低于5像素,如图9a中的第4、14、15组,图9b中的第20组,图9c中的第13组,图9d中第5、8、15组,图9e中的第15组,上述组内数据差异小的主要原因是部分组内理想姿态帧较少,且时间间隔非常近,各图像帧间差异很小,另外一个原因是猪经过通道在理想姿态时有停顿,拍摄到多幅类似的理想帧图像。图9a、9c、9d、9e中,有6组数据出现了异常值,其中5组异常值较小,小于6像素,可以忽略,图9a中的第7组异常值产生的主要原因是该帧图像中猪的尾部甩动,尾部与臀部结合在一起,造成尾根位置检测不准确。

图9 体长绝对偏差箱线图Fig.9 Boxplot of body length absolute deviation

为验证体尺测量算法的精确度,在采集视频数据后,采用测杖和皮尺等工具手工测量了对应猪体的体长、体宽和体高数据。为减小误差,体长、体宽、体高数据手工测量3次,取平均值作为测量值。利用本文算法对筛选出的理想姿态帧进行了体尺测量,取每组平均值为算法测量值。将手工测量值作为真实值,计算了利用103组视频数据的算法测量值的测量精确度。体尺算法测量精确度如图10所示。在103组数据中,只有5组体长精确度低于95%,其余的体长精确度都高于95%,体长的精确度高于体宽和体高精确度,主要原因是相对于肩胛骨处的体宽测量点和体高测量点,体长测量中的耳根和尾根位置更容易确定。体高测量的最低和最高精确度分别为92.3%和99.9%,平均精确度为96.3%。体宽测量的最低和最高精确度分别为91.7%和99.9%,平均精确度为95.5%。体长测量的最低和最高精确度分别为93.3%和99.9%,平均精确度为97.3%。由图10可看出,最低精确度的测量数据为体宽测量值,且有多组体宽精确度接近最低精确度,表明体宽测量难度大于其他两项指标。

图10 体尺测量精确度Fig.10 Measurement accuracy of body size

4 结论

(1)为降低姿态检测难度,采用最小外接矩形法检测猪体的水平状态,并将倾斜猪体根据最小外接矩形的倾斜角度自动调整为水平方向。

(2)对于已经调整水平的猪体,提出了投影法和差分法识别猪脖颈、头部和尾部位置。

(3)关于猪的姿态检测,提出头部边界标记的算法判断猪是否耳部缺失,利用骨骼化提取猪体的主线并结合霍夫变换的算法判断猪头部是否歪斜。利用103组视频、52 016帧俯视和侧视图像进行测试,检测出理想姿态2 592帧、漏报432帧、误报0帧,漏报率略高,但误报率为0。同组理想帧之间差异较小。

(4)提出的体长、体宽和体高测量算法,经与手工测量数据对比,体长测量的平均精确度为97.3%,体宽的平均精确度为95.5%,体高的平均精确度为96.3%,测量的精确度较高。

猜你喜欢

猪体体尺体长
家畜体尺自动测量技术研究进展
脖子占体长一半的巨龙——新疆巨龙
夏季养猪要做好防暑降温
外泌体长链非编码RNA在膀胱癌中的研究进展
猪舍热舒适性评价及夏季湿帘作用下的CFD模拟
肉羊体尺测量 用上“智慧眼”
猪应激反应综合征的防治措施
新式猪场猪的产热产湿量计算
金川成年母牦牛一年消长的体尺体重测定
马站红鸡生长与繁殖性状的主成分分析