APP下载

基于双视角图像的山羊体尺自动测量方法

2023-08-22陆明洲光二颖陈子康张生福熊迎军

农业机械学报 2023年8期
关键词:羊体体尺前景

陆明洲 光二颖 陈子康 王 锋 张生福 熊迎军

(1.南京农业大学人工智能学院, 南京 210031; 2.农业农村部养殖装备重点实验室, 南京 210031;3.南京农业大学动物科技学院, 南京 210095; 4.青海民族大学计算机学院, 西宁 810007)

0 引言

羊的体尺参数能够反映其生长发育状况以及羊体各部位之间的相对发育关系,是筛选优质羊种质资源的重要指标之一[1-2]。此外,畜禽体尺参数还是无损、快速估重[3-5]的重要依据,在规模化养殖生产实践中也有一定的实用价值。传统的羊体尺测量方法一般使用测杖、卷尺等工具测量获得,测量过程中需要对羊只进行保定,工作量大,操作繁琐,对羊带来较大的应激,还可能导致人畜共患病的发生。现阶段,羊养殖生产实践中已经可见一种机电一体化的羊体尺自动测量装置[6],该装置使用检测仓两侧挡板保定羊只,利用伸缩机构的行程距离来测量羊体高、体斜长、胸宽参数。这套装置提高了羊体尺测量效率,但仍属接触式测量方式,保定过程会使羊产生更大应激反应,此外,可以测量的体尺参数数量也较为有限。

随着传感器[7]、机器学习[8-9]、自动控制[10]技术被越来越多地应用于养殖业,精准畜牧成为养殖业的重要发展方向。利用图像分析、点云处理、三维重建等技术自动、无损提取畜禽体表特征信息成为智慧养殖领域[11]的研究热点之一。按照所依赖的技术手段可将现有畜禽体尺参数自动提取方法分为两类:一类是基于二维图像处理;另一类是基于三维重建。

二维图像一般采用可见光相机采集,其数据获取成本及相应的RGB图像处理算法复杂度均较为适中,被较多地应用于畜禽体尺的自动测量[12-14]。从二维图像中自动提取畜禽体尺的不足在于视角单一,图像对外部光照变化较为敏感。随着三维重建技术的发展,也出现了一些对畜禽躯体进行三维建模,进而获取动物体尺参数并进行体重估算的研究[15-17]。三维重建一般需要使用激光扫描仪[18]、深度相机[19-21]或手持设备[22-23]等仪器采集三维重建所需数据。与二维图像相比,三维重建技术可获取更丰富的信息,如表面积、总体积和围度类的体尺,但三维重建所需数据获取成本高,多相机位置校正、点云匹配融合和非刚体建模也需要较为复杂的算法开发。此外点云数据量与活体动物的长时间非刚性形变都对处理器的性能和模型的实时性提出了更高的要求[19,24]。

本文针对山羊体尺无接触自动测量需求,设计一种同时采集山羊俯视、侧视双视角图像的装置,并开发从山羊双视角图像中自动提取山羊的体高、胸深、胸宽、胸围、管围、体斜长等体尺参数的算法。

1 羊体图像数据采集

1.1 图像采集装置

本文设计的羊体双视角图像采集装置由机电一体化图像采集室、PLC控制器、图像采集模块、工控机等部分构成,其整体结构如图1所示。

图1 羊体双视角图像采集装置示意图Fig.1 Schematic of designed dual views image acquisition equipment1.俯视相机 2.侧视相机 3.工控机 4.PLC控制箱 5.入口围栏 6.出口围栏 7、10.减速电机与限位开关 8.仓内光电传感器 9.出口光电传感器

图中,机电一体化图像采集室包括入口通道、入口门禁、出口通道、出口门禁、出入口门禁开关控制电机、门禁位置感知限位开关、羊只位置感知光电传感器、侧视图像采集透光玻璃。PLC控制部分的核心是西门子S7-200 SMART控制器,该控制器接收羊只位置感知光电传感器、门禁位置感知限位开关信号并向门禁开关控制电机发出启停命令。图像采集模块主要由采集室上方的俯视相机以及靠近透光玻璃一侧的侧视相机构成,相机型号为海康MV-CV050-12GC,镜头为维视MV0850,图像分辨率为2 448像素×2 048像素。当光电传感器感知到羊处于图像采集仓中时,PLC控制器向侧视、俯视相机发出图像采集命令,获取羊只的双视角图像,双视角相机采集的图像存储在工控机中。利用所设计的图像采集装置完成羊体双视角图像采集的流程如图2所示。

图2 羊体双视角图像采集工作流程Fig.2 Work flow chart of dual views images acquisition for individual goat

1.2 羊体双视角图像数据采集

2021年7月6—13日,在江苏省海门市南京农业大学海门山羊产业研究院试验羊场随机选择1岁龄左右的母山羊40头。使用1.1节设计的羊体双视角图像采集装置在羊舍内采集40头母羊的双视角图像,图像采集时间是08:00—11:00及16:30—18:00。侧视相机、俯视相机的图像采集频率设置为1幅/s,每头羊在图像采集室内的时长为1 min,每头山羊采集到60组图像。由于羊只活动导致图像中存在身体缺失和扭曲等异常情况,通过人工挑选为每头羊只保留至少一组羊体完整、站姿正常的图像,获取侧视、俯视图像共240组。其中200组用于本文所提算法相关模型的训练,剩余40组用于算法测试。一组典型的羊体侧视、俯视图像如图3所示。

图3 羊体侧视和俯视视角图像Fig.3 Top and side view images of goat body

2 羊体双视角图像预处理

羊体双视角图像预处理操作主要针对羊体侧视图像、俯视图像完成前景分割及二值化操作。由于俯视图和侧视图的拍摄光照干扰不同,羊体前景目标分割的难度不同,故使用不同方法对两个视角下的图像进行处理。

2.1 俯视图像预处理

由于羊体俯视图背景固定,使用背景减除法实现俯视图的羊体前景分割。对背景减除后的图像进行灰度化、二值化,即得到俯视二值图像,对二值图像作轮廓分析、形态学处理,选择面积最大的轮廓作为羊体区域即可得到俯视羊体前景分割结果。羊体俯视图像前景提取及二值化处理过程如图4所示。

图4 羊体俯视图像预处理Fig.4 Image pre-processing of top-view image

2.2 侧视图像预处理

2.2.1超像素分割

超像素是指在纹理、颜色、亮度等特征上相似的相邻像素构成的有一定视觉意义的不规则像素块。ACHANTA等[25]提出的SLIC算法将RGB图像转换到CIELAB颜色空间,基于由3个颜色分量和2维坐标组成像素点的5维特征向量构造距离度量标准以实现像素的聚类。SLIC算法在运算速度和保持物体轮廓上都具有较好的表现,故本文使用SLIC算法进行羊体侧视图像超像素分割。SLIC算法利用参数K来确定最终生成的超像素个数。当一个超像素中存在超过一类以上的目标时,会使超像素的特征模糊,分类误差变大,影响羊体前景的分割精度。因此需要确定合适的K值,使得这类误差最小。为寻找最合适的K值,将超像素边缘和羊体轮廓重合度较低的超像素定义为错误分割,计算不同K值下错误分割的超像素数量占前景超像素的比例,计算流程如图5所示。

图5 错误超像素与前景超像素的数量比值计算流程图Fig.5 Flow chart of ratio calculation of error superpixels to total superpixels

图5中,将Val阈值设置为0.2~0.8,不同K值对应的侧视图分割结果将在4.2节进行分析。

2.2.2超像素分类

使用SLIC算法将图像分割为若干个超像素,将超像素分类为羊体前景和背景两类,即可实现羊体前景的分割。由于超像素为非规则形状,故不使用形状特征。前景与背景的超像素在颜色和纹理上具有较大差异,故使用颜色、纹理特征对超像素结果进行分类。本文训练基于支持向量机(Support vector machine, SVM)[26]的分类器实现超像素分类。

按照2.2.1节中的方法生成羊体前景和背景超像素。使用颜色和纹理特征构建超像素的特征向量,常用的颜色模型有RGB、Lab、HSV、YCbCr、YUV等。通过比较不同颜色分量下背景与前景的差异,选择RGB、Lab和HSV颜色空间。提取超像素颜色的平均值,构建超像素的颜色特征向量C=(S,V,L,B,G,R),其中,S和V分别是HSV颜色空间像素颜色的饱和度和明亮度,L是Lab颜色空间像素的亮度,B和R分别为RGB颜色空间像素的蓝色和红色分量,G是像素点灰度。由于本文生成的超像素的形状不规则,像素间的相对位置关系特征较弱,且身体的不同区域受光程度不同导致不存在整体相似的排列结构,故使用基于灰度直方图的统计特征描述超像素的纹理特征,具体包括均值m、方差σ2和一致性U,计算公式为

(1)

(2)

(3)

式中ri——图像颜色级

n——图像像素点数

P——某颜色级概率

i——像素点索引号

首先对超像素执行灰度化操作,并求各超像素的灰度直方图,基于直方图利用式(1)~(3)计算3个纹理描述子组成的特征向量E=(m,σ2,U)。将颜色特征向量和纹理特征向量合并成向量FV=(S,V,L,B,G,R,m,σ2,U),对FV做归一化处理得到超像素的特征向量,记为F′V。训练以径向基函数(RBF)作为核函数的SVM分类器实现羊体前景超像素的分类。将羊体超像素正样本标记为“1”,背景超像素负样本标记为“0”。使用训练样本训练SVM分类器,测试模型并得到每个超像素的预测值,若超像素预测值小于0.5,则被判定为背景超像素,分类标签为0,若预测值大于等于0.5,则被判定为羊身体超像素,分类标签为1。

表1为部分超像素及其预测值,其中正确分类的前景超像素预测值大于0.9,背景超像素预测值小于0.1,而错误分类的超像素预测值介于0.1~0.9之间。

表1 超像素样本与预测值Tab.1 Sample of superpixel and predictive value

2.2.3分类结果修正

使用SVM分类器对羊体侧视图像中所有超像素特征向量分类,将预测值大于0.5的超像素填充为白色,其余填充为黑色,得到初步分割的二值图。错误分类的超像素有两种,一种是将背景分类为前景,在初分割的二值图中主要表现为多个较小面积的连通域。另一种是前景分类为背景,表现为身体局部的缺失。针对第1种错误类型,可通过分析图像轮廓,将该类连通域置为背景。针对第2种错误,构建超像素区域邻接图[27](Region adjacency graph,RAG),分析超像素的邻接矩阵对结果进行修正,区域邻接图的原理如图6所示。

图6 区域邻接图生成过程Fig.6 Process of region adjacency graph

对前述被分类为背景的超像素,若其置信度处于0.1~0.9之间,则统计与该超像素相邻的前景超像素的数量,若数量超过4个,则将其修正为前景超像素。

3 羊体尺测量方法

根据山羊标准对羊体尺参数的定义[28],结合生产上手工测量羊体尺的方式,在侧视图和俯视图中确定需要测量的体尺示意图如图7所示。

图7 羊体尺测量方式示意图Fig.7 Measuring method of body size in double view images

基于图7所示双视角体尺测量方式,设计算法自动定位各体尺参数测量所需的特征点,基于特征点间欧氏距离计算获得体斜长、体高、胸深、胸宽的体尺参数像素距离,通过曲线拟合计算得到管围和胸围的体尺参数像素距离。最后使用标定板确定像素距离与真实距离之间的换算比例,将图像中的体尺像素距离Spix转换为真实距离Sreal的公式为

(4)

式中Lpix、Lreal——图像中标定板确定的像素距离与真实距离

3.1 体尺特征点自动定位及体尺计算

根据图7所示的体尺测量方式,分别在羊体侧视、俯视二值图中划定如图8中4个虚线框对应的各体尺参数提取所需的局部感兴趣区域(Region of interest, ROI),以便在局部范围内定位各体尺测量所需的特征点。

图8 双视角图像中的ROI示意Fig.8 ROIs in side and top view images

为减少双视角图像采集过程对羊只带来的应激,图1所示的图像采集室宽度大于羊体宽度,羊体中轴线可能与透光玻璃不平行。为减少由此带来的体尺测量误差,使用霍夫变换[29]对俯视图做直线检测,将所有检测到的直线角度的平均值作为羊体倾斜角度θ,对图4d所示的俯视二值图旋转角度θ后得到图8b所示的校正俯视图。体尺特征点定位及体尺自动计算的伪代码如图9所示。

图9 体尺自动测量伪代码Fig.9 Pseudo code for body size measurement

图9所示伪代码行1、2用于定位图8a中的红色虚线区域所示的ROI-1,通过侧视图像羊体轮廓分析定位羊四肢接触地面的点(对应伪代码中的Point1、Point2、Point3、Point4),点A为Point1与Point2连线的中点。过点A作垂线与羊体背部轮廓的交点记为点B,则点A与点B间的距离即为体高。关键点A确定后,利用伪代码中行7、8定位图8a中绿色虚线区域所示的ROI-2,其中,点H为Point2与Point3连线的中点。在ROI-2中从左向右提取每点的垂线上白色像素的数量并绘制变化曲线,结果如图10a所示。定位图10a曲线中最小值点(标记为红色点),该点对应羊体胸深下端点,记为点C。过点C作垂线与羊体背部轮廓的交点记为点D,则点C与点D间的距离即为胸深。

图10 胸深、管径、胸宽体尺计算特征点定位曲线Fig.10 Curve for calculation of body size parameters of chest depth, pipe diameter, and chest width

图9所示伪代码行18~21用于定位图8a中的黄色虚线区域所示的ROI-3(两个前腿中垂直度较大的一只)。按纵轴方向自上而下绘制区域内宽度变化曲线如图10b所示,按照管径定义,选取所示曲线中波动较小的一段区域中的最小值点作为管径,图10b中的红色点的纵坐标即为管径值,管径计算方法伪代码如图9行24~27所示。完成管径Pd提取后,拟合计算出管围CCB为

(5)

图9所示伪代码的第30行用于确定图8b所示的红色虚线区域ROI-4。首先绘制羊体二值化俯视图的宽度曲线(图10c),然后定位曲线的极大值和极小值,取极大值中的最大值到极小值中的最小值之间的区域作为ROI-4,在图10c中表现为两个绿色点之间的区域,其中两个绿点分别对应羊体腹部宽度最大值点与脖子处最小值点。分析ROI-4区域内的曲线,利用文献[30]提出的方法定位曲线上的最优拐点,该最优拐点纵坐标值(图10c)即为胸宽。胸深和胸宽提取完成后,以胸深为长轴,胸宽为短轴,利用椭圆周长拟合胸围CG为

CG=2πb+4(a-b)

(6)

式中a、b——拟合椭圆长半轴和短半轴的长度

3.2 体斜长后端点定位

过胸深上端点D作倾斜角为45°的线并记其与前胸轮廓的交点为P,将点P作为体斜长的前端点。

根据定义,体斜长后端点位于羊坐骨结节后缘,在图像中应选择尾巴根部所在点。在实际的图像采集过程中,羊尾巴呈现多种姿态,单一的方法难以实现准确定位。本文根据尾巴跟羊体在侧视、俯视图像中的特征,将羊尾姿态分为图11所示的3类,其中第1行图像是尾巴局部区域的侧视图,第2行是其对应的俯视图。

图11 体斜长后端点定位曲线Fig.11 Curves for locating end point of body slanting length

图11a所示尾巴姿态的特点是俯视图中尾巴与身体无重叠,在侧视图中尾巴完整露出。对于具有这一类型的尾巴姿态,绘制如图11a所示的侧视图中尾部宽度曲线,曲线的最优拐点[25]即为对应的体斜长后端点。图11b所示尾巴姿态的特点是在俯视图中尾巴与身体部分重叠,但俯视图的背部宽度有明显减小的特征点。对于这一类型的尾巴姿态,在俯视尾部宽度变化曲线(图11b)的尾部区域定位最优拐点,即为后端点x值,选择侧视轮廓中最右侧点的y值,则点(x,y)构成后端点。图11c所示尾巴姿态的特点是在俯视图中尾巴与身体完全贴合,且俯视图中无明显特征点,在侧视图中尾部轮廓存在突变点。对于具有这一类型的尾巴姿态,首先定位侧视轮廓最右侧端点,对最右侧端点的左侧和上方轮廓拟合,得到如图11c所示的轮廓曲线,则曲线上的拐点即为后端点。将体斜长的后端点记为点E,体斜长为P、E两点间的距离。

4 结果与分析

4.1 俯视图分割结果

当不使用补光灯时,俯视图像的亮度随室内光线变化,需要为每只羊的俯视图提供单独的背景图像,因此,在装置上安装补光灯,保证所有羊只俯视图仅使用1幅背景图像,即可通过背景减除法完成俯视羊体图像二值化。选择20幅俯视图,手工制作模板,结果表明算法获取的二值图与模板图像的交并比(IoU)为97.5%。

4.2 侧视图分割结果与分析

不同K取值条件下SLIC算法错误分割的超像素占前景超像素的比例变化曲线如图12a所示,随着K值的增加,错误率整体呈先下降后有所上升趋势。但过高的K值也会导致超像素数量增加,加大后续对超像素分类时的计算量。本文采用K为800的SLIC算法分割羊体侧视图像获得的超像素如图12b所示。

图12 不同K时的羊体侧视图超像素分割Fig.12 Superpixel segmentation for side-view goat image in different K values

综合利用SLIC(K=800)、SVM及RAG对羊体侧视图像进行前景分割,部分结果如图13所示。随机选择20幅图像,手工制作其羊体前景区域二值图,超像素分割方法获取的羊体前景与手工制作获得的羊体前景的IoU平均值为96.1%。

图13 侧视图前景分割结果Fig.13 Results of side-view image segmentation

4.3 体尺测量结果与分析

利用40组海门山羊双视角图像测试本文所提的体尺自动测量方法。使用软尺人工测量体高、体斜长、胸深、胸宽、管围和胸围6个体尺参数,使用前述方法对侧视图、俯视图预处理,并评估侧视图的分割结果,然后由算法自动测量6个体尺参数,并与人工测量值比较,得到的误差率均值箱形图如图14所示。图中,箱形框内蓝色线段和红色圈分别为误差中位值和均值,横轴参数CCB、BH、CD、CW、CG及BSL分别表示管围、体高、胸深、胸宽、胸围和体斜长。

图14 算法提取与手工测量体尺参数结果的相对误差Fig.14 Errors of body sizes extracted using developed algorithm and measured manually

管围人工测量值处于7.5~10.5 cm之间,算法的测量结果处于7.1~10.4 cm之间,相对误差的平均值、中位数、最大值和最小值分别为5.5%、5.4%、14.3%和1.1%。管围误差的主要原因是羊毛蓬松,造成算法测量值偏大,其次手工测量时,测量位置靠近膝盖,而算法测量局部最细处。同时腿部与地面不垂直的站姿也会造成误差,且使用的拟合公式本身也会带来一定的误差。

体高人工测量值处于50~66 cm之间,算法的测量结果处于47~63 cm之间,相对误差的平均值、中位数、最大值和最小值分别为3.7%、4.1%、9.0%和0.2%。当羊只头部抬起时,算法会测出更大的结果,因此体高测量受姿态影响较大,同时羊蹄区域是否被准确分割也会影响体高的测量值。本文使用两脚中点作为地平面,减小了耆甲特征点消失引起的误差。

胸深人工测量值处于24~34 cm之间,算法的测量结果处于24~34.4 cm之间,相对误差的平均值、中位数、最大值和最小值分别为2.6%、2.5%、7.5%和0。胸深误差是6个体尺参数中最小的,原因是胸深在非接触的装置中受姿态影响较小,且关键点的特征明显,定位时的偏移很小,其主要误差来源是胸深区域的分割精度。

胸宽人工测量值处于13.6~22.5 cm之间,算法的测量结果处于14.8~22.4 cm之间,相对误差的平均值、中位数、最大值和最小值分别为5.2%、4.5%、10.7%和0.4%。在人工测量羊体宽时,难以贴合到羊躯体上测量,只能使用目测读数,故体宽的人工对比数据本身存在误差。体宽误差的主要原因是羊的躯体扭曲,在俯视图中羊头是否向前伸也影响体宽点的定位。

胸围人工测量值处于60~92 cm之间,算法的测量结果处于62~86.3 cm之间,相对误差的平均值、中位数、最大值和最小值分别为4.1%、3.5%、13.6%和0.1%。本文采用椭圆拟合公式基于胸深和胸宽来拟合胸围,由于羊胸围不可能呈理想的椭圆形,因此该近似拟合方法存在固有误差,且在羊只较瘦的状态下,该误差会进一步扩大。

体斜长人工测量值处于52~86 cm之间,算法的测量结果处于52.2~82 cm之间,相对误差的平均值、中位数、最大值和最小值分别为3.9%、3.0%、11.6%和0.7%。体斜长的前端点定位方式较为理想,误差的主要原因是体斜长后端点能否准确定位,本文将羊尾姿态归纳为3类,并针对不同的羊尾姿态确定相应的体斜长后端点定位方法,提升了体斜长提取精度。

使用二维相机测量羊体尺参数需要设置标定板计算像素距离与实际距离的换算比例,但在实际使用中,羊只的体高不同造成不同羊只与俯视相机的距离不同,羊只在检测仓内的左右移动造成羊只与侧视相机距离不同,使得总体误差变大。本文将标定板放置在可移动距离的中值,但仍有较大误差。因此在使用中应针对不同日龄或体型相近的羊群设置不同的标定板,设置多种换算比例可近一步减小误差。

虽然三维模型可提取更丰富的表型信息,且已有众多与畜禽体尺相关的研究,但采用三维相机构建羊体点云模型的文献仍然较少,主要原因是羊的多视角三维数据难以采集:其生理习性灵活好动,难以与牛或猪一样,保持相对静止的姿态或逐个低速通过设计好的通道。此外基于深度相机对活体类动物的三维建模仍处于研究阶段,在实际场景下的建模精度、算法实时性、计算器性能与整体成本等因素难以满足。本文设计了双视角图像采集装置,并开发相应的图像分割算法和山羊体尺测量算法,可较好地满足山羊体尺快速计算需求,较低的成本也有利于系统的产业化应用。

本研究存在的不足之一是需要人工选择站姿较为理想的山羊图像进行处理,后续可通过提取羊体骨架点,并设计基于骨架点的理想站姿的羊体图像自动筛选,实现体尺参数获取的全自动化。二是对体尺参数差距较大的种群,需要分别设计标定板的位置,得出不同的换算比例,以此降低误差。

5 结论

(1)设计了一种可自动采集山羊侧视和俯视双视角图像的图像采集装置。提出了一种基于超像素分割和支持向量机的羊体侧视图像前景分割方法。首先使用SLIC算法将图像分割为多个超像素,并构建其特征向量,然后使用SVM对每个超像素分类,基于区域邻接原理对结果进一步修正,得到羊体侧视图像的二值图。在侧视图中错误分割的超像素占前景超像素的比例小于6%,交并比为96.1%。

(2)在海门山羊养殖场采集山羊侧视图、俯视图数据集,并利用所提算法自动提取山羊的6个体尺数据,与人工测量数据对比,结果表明:算法提取的管围、体高、胸深、胸宽、胸围及体斜长的平均误差分别为5.5%、3.7%、2.6%、5.2%、4.1%和3.9%。

(3)为实现山羊体尺无接触自动测量提供了一套装置和方法,可满足山羊体尺参数自动测量与体重自动估测的应用需求,为研发基于体尺的山羊优质种质资源高效筛选技术与平台奠定了基础。

猜你喜欢

羊体体尺前景
家畜体尺自动测量技术研究进展
基于Kinect相机的猪弯曲体尺测量算法研究
我国旅游房地产开发前景的探讨
四种作物 北方种植有前景
肉羊体尺测量 用上“智慧眼”
基于改进区域生长法的羊体点云分割及体尺参数测量
秋季管好羊群要加强卫生工作
离岸央票:需求与前景
量子纠缠的来历及应用前景
春季养羊的注意事项