基于深度图像的多姿态肉牛体尺自动测量方法
1.
2.
3.
Automatic Measurement of Multi-Posture Beef Cattle Body Size Based on Depth Image
1.
2.
3.
通讯作者: 刘 刚(1966-),男,博士,教授,研究方向为电子信息技术农业应用。E-mail:pac@cau.edu.cn
收稿日期: 2022-10-06
基金资助: |
|
Received: 2022-10-06
作者简介 About authors
叶文帅(1997-),男,硕士研究生,研究方向为农业关键信息技术。E-mail:
养殖场中肉牛较为活跃,采集得到的图像数据中肉牛姿态多变,肉牛姿态端正帧较少,导致自动测量肉牛体尺困难。针对以上问题,本研究通过分析肉牛骨架特征和肉牛图像边缘轮廓特征,提出一种多姿态肉牛体尺自动测量方法。首先,利用深度相机Azure Kinect DK从正上方采集肉牛俯视深度视频数据,对视频数据进行分帧处理;其次,对原始深度图像进行预处理,将肉牛从复杂的背景中提取出来;再次,利用Zhang-Suen算法提取目标图像肉牛骨架,检测骨架交点和端点,分析肉牛头部特征,并确定头部去除点,去除图像中肉牛头部信息;最后,利用改进的U弦长曲率算法提取肉牛轮廓曲率曲线,根据曲率值确定体尺测点,将体尺测点转换到三维空间中,计算体尺参数。本研究通过分析大量深度图像数据,将图像中肉牛姿态分为左歪、右歪、姿态端正、低头和抬头五类。试验结果表明,本研究提出的基于骨架的多姿态肉牛头部去除方法在5种姿态下的头部去除成功率均高于92%;在23头肉牛不同姿态共46帧深度图像中,利用基于改进U弦长曲率的体尺测点提取方法,测得体直长测量的平均绝对误差为2.73 cm,体高测量的平均绝对误差为2.07 cm,腹宽测量的平均绝对误差为1.47 cm。研究结果可为精确测量多姿态下肉牛体尺提供支撑。
关键词:
Beef cattle in the farm are active, which leads the collection of posture of the beef cattle changeable, so it is difficult to automatically measure the body size of the beef cattle. Aiming at the above problems, an automatic measurement method for beef cattle's body size under multi-pose was proposed by analyzing the skeleton features of beef cattle head and the edge contour features of beef cattle images. Firstly, the consumer-grade depth camera Azure Kinect DK was used to collect the top-view depth video data directly above the beef cattle and the video data were divided into frames to obtain the original depth image. Secondly, the original depth image was processed by shadow interpolation, normalization, image segmentation and connected domain to remove the complex background and obtain the target image containing only beef cattle. Thirdly, the Zhang-Suen algorithm was used to extract the beef cattle skeleton of the target image, and calculated the intersection points and endpoints of the skeleton, so as to analyze the characteristics of the beef cattle head to determine the head removal point, and to remove the beef cattle head information from the image. Finally, the curvature curve of the beef cattle profile was obtained by the improved U-chord curvature method. The body measurement points were determined according to the curvature value and converted into three-dimensional spaces to calculate the body size parameters. In this paper, the postures of beef cattle, which were analyzed by a large amount of depth image data, were divided into left crooked, right crooked, correct posture, head down and head up, respectively. The test results showed that the head removal method proposed based on the skeleton in multiple postures hads head removel success rate higher than 92% in the five postures. Using the body measurement point extraction method based on the improved U-chord curvature proposed, the average absolute error of body length measurement was 2.73 cm, the average absolute error of body height measurement was 2.07 cm, and the average absolute error of belly width measurement was 1.47 cm. The method provides a better way to achieve the automatic measurement of beef cattle body size in multiple poses.
Keywords:
本文引用格式
叶文帅, 康熙, 贺志将, 李孟飞, 刘刚.
YE Wenshuai, KANG Xi, HE Zhijiang, LI Mengfei, LIU Gang.
1 引 言
国内外已有较多基于计算机视觉的牲畜体尺测量技术的研究,且取得了较好的研究进展。Spoliansky等[4]使用Kinect相机自动提取牧场中每头奶牛的个体特征,并设计回归模型对奶牛的身体状况评分,结果表明机器学习方法可自动评测奶牛体况。Nir等[5]使用单个Kinect V2传感器获取奶牛深度图像,采用机器学习方法、椭圆拟合方法和分位数回归方法提取奶牛肩高、臀高等体尺参数,结果表明利用深度相机采集到的深度信息可自动测量奶牛体尺参数,且测量精度较高。Salau等[6]使用六个Kinect相机采集奶牛深度图像,结合手动标记的前乳头和坐骨结节点,通过标记点成功计算出静止和行进状态下奶牛坐骨长度和坐骨结节的高度。赵建敏等[7]提出一种基于Kinect v4传感器的肉牛体测量方法,采集彩色和深度图像,结合目标检测和边缘检测等方法,测量牛体鬐甲高、体斜长和体直长等参数,体尺测量误差仅为0.76%、1.68%和2.14%。李嘉位等[8]使用Kinect DK深度相机、红外对射光栅触发器和射频识别搭建三维点云采集系统,实现了肉牛点云的三维重建与分析,采集成功率为91.89%,体尺重建误差为0.6%。赵新强[9]通过凸包算法去除牛头和牛尾获取奶牛身体区域,通过角点分析方法获取奶牛体高、体宽、体长数据,体尺平均误差均在3.2%以内。常海天[10]将牛体姿态分为抬头和低头,在不同姿态下设计不同的体尺测量算法,实现了牛只体高的测量,体高测量的平均误差为1.9%,胸围和腹围的预估误差分别为2.865%和3.463%。以上研究中,牲畜体尺测量多是基于姿态端正图像数据,但在实际自动化测量应用中,这些被测牲畜多是处于运动状态,采集图像中的牲畜姿态也多是不端正的,导致牲畜体尺测量效率较低。
针对上述问题,为提高牲畜体尺测量效率,本研究利用肉牛骨架特征和肉牛轮廓边缘特征,开展图像中多姿态下肉牛头部去除方法和体尺测点提取方法研究,实现自动测量多姿态下肉牛体尺参数。
2 材料与方法
2.1 数据获取
试验数据采集于河北省保定市定兴县某肉牛养殖场,采集对象为10月龄左右的西门塔尔肉牛共34头,采集时间为2021年9月30日。数据采集区域长2.37 m,宽1.53 m,采集装置如图1所示。当肉牛进入数据采集区域后,关闭前后门,利用深度相机采集肉牛俯视深度视频数据,采集完毕后打开前门,肉牛进入休息区域。深度相机支架架设在墙体外侧,以降低牛的应激反应。调整相机高度和角度使其能拍摄到完整的肉牛图像,相机距离体重秤所在平面2.92 m,调整相机为NFOV2×2装箱模式,帧率为15 f/s。利用ffmpeg工具对采集到的肉牛俯视深度视频数据进行分帧,得到肉牛俯视深度图像。
图1
2.2 图像预处理
图2
图2
相机矫正前后肉牛数据采集效果
Fig. 2
Data collection effect of beef cattle before and after depth camera correction
由于养殖场环境复杂,采集到的原始深度图像中除包含肉牛外,还有栏杆、地面和地磅秤等复杂的背景信息,这些背景信息影响体尺测点的提取精度,因此本研究去除了图像中的背景信息,处理效果如图3所示,具体步骤如下。
图 3
本研究中青绿色图像均是经处理后的可视化图像,原始图像为16位深度图像,可视化效果不佳。
(4)利用提取图像连通域方法得到只含有肉牛的目标图像,如图3(d)所示。
2.3 基于骨架的多姿态下肉牛头部去除
针对牛头摆动造成体尺测量误差较大的问题,赵新强[9]采用凸包分析方法去除牛头信息,将牛只身体区域作为体尺测量对象。但凸包分析方法只适用于牛姿态端正图像,鲁棒性较差。
图4
图4
利用Zhang-Suen算法获取肉牛主骨架
Fig. 4
Getting the main skeleton of beef cattle by using Zhang-Suen algorithm
交点约束条件为
端点约束条件为
其中,
扫描图4(b)中主骨架像素点,存在两个8邻域内
由于图像中肉牛骨架为离散点,利用后向差分方法求
分割线的直线方程为
利用Canny算子提取
图5
图5
凸包分析方法获取肉牛图像上下轮廓边缘
Fig. 5
Getting the upper and lower contour edges by convex hull analysis method
图6
图6
欧氏距离确定肉牛头部去除点
Fig. 6
Determining the head removal point by Euclidean distance
确定肉牛头部去除点后,连接肉牛头部去除点,得到不含头部的肉牛二值图像,将二值图像与原深度图像进行逻辑“与”操作,得到不含肉牛头部的深度图像,如图7所示。
图7
从图7中看出,本研究方法能够去除图像中多姿态下肉牛头部信息,头部去除后的躯干均可用于提取体尺测点。
2.4 肉牛体尺测量
2.4.1 基于改进U弦长曲率的体尺测点提取
通过分析图像中肉牛轮廓特征,发现轮廓曲线中肩部曲率最大点和腹部曲率最大点是体尺测点。相比于k余弦曲率、带曲线平滑的差分曲率和L弦长曲率,U弦长曲率有更强的抗旋转性和抗噪性,并且U弦长所对应的曲率与离散曲线真实曲率之间存在着一种线性关系[15]。
计算离散曲线的U弦长曲率时首先要确定其支持邻域[15]。为防止支持邻域端点落在肉牛轮廓曲线的毛刺点上,影响体尺测量精度,本研究提出了一种基于改进U弦长曲率的肉牛体尺测点提取方法。
记
图8
点
支持邻域的约束条件见
本研究通过分析大量数据,发现肉牛轮廓存在毛刺点,主要分为四类类型,如图9所示,以及分别将它们顺时针方向旋转90°、180°和270°的结果。
图9
图10
图10
划分5×5的卷积核正负区域
Fig. 10
Divide the positive and negative areas of the convolution kernel of 5×5
其中,
由于肉牛轮廓曲线为离散曲线,可能在肉牛轮廓曲线上不存在满足
根据
U弦长曲率的计算公式如
其中,(
本研究提出的改进U弦长曲率算法,首先判断前景点是否为毛刺点;若是毛刺点,则删除该点,再利用前景点周围像素点坐标均值重新定位前景点的位置坐标,来提高U弦长曲率计算的准确性。
利用改进U弦长曲率算法提取肉牛轮廓各像素点曲率值,依次连接肉牛轮廓各像素点的曲率值,得到曲率曲线,利用五点去差值法和线性五点平滑法,对该曲率曲线进行平滑处理,提取曲线肩部曲率值极值点和腹部曲率值极值点,即为体尺测点。
2.4.2 肉牛体尺计算
图11
首先在背景深度图像地面位置筛选n个像素点,根据相机的内参将像素点转换到三维坐标系下,通过n个点拟合出地平面,获取平面方程,如
获取腹部区域中曲率极值点为腹宽测点
当肉牛身体歪斜严重时,肩部区域会出现两个曲率极值点。为获取体直长前端点,先判断肩部曲率极值点个数,若存在两个极值点,则取两个极值点的均值点作为体直长前端点
3 结果与分析
3.1 头部去除结果分析
随机选取23头肉牛的深度图像数据,由于相邻帧之间的肉牛姿态差异较小,利用抽帧的方法,每间隔10帧抽取1帧作为测试数据,共得到674帧图像数据。首先,通过人眼观察的方法对674帧深度图像进行姿态的初步分类,分别为姿态端正、左歪(本研究中左歪指牛头部和躯干不在一条直线上,且头颈部歪向通道左侧)、右歪(本研究中右歪指牛头部和躯干不在一条直线上,且头颈部歪向通道右侧)、低头和抬头5类;然后,再计算图像中肉牛姿态歪斜角度值和低头抬头幅度值,来进一步确定肉牛姿态。
图12
图12
肉牛姿态不端正度评价
Fig. 12
Evaluation method of beef cattle posture skew degree θ
为计算肉牛低头和抬头的幅度值,将深度图像转换为三维点云,利用CloudCompare软件标注牛只头部和肩部的高度,并计算高度差值
表1 五种姿态下肉牛头部去除结果
Table 1
肉牛姿态图像 | 姿态端正图像 | 左歪图像 | 右歪图像 | 低头图像 | 抬头图像 |
---|---|---|---|---|---|
总帧数/帧 | 298 | 194 | 182 | 252 | 30 |
凸包分析方法成功帧数/帧 | 126 | 90 | 36 | 90 | 18 |
本文方法成功帧数/帧 | 282 | 186 | 168 | 235 | 30 |
凸包分析方法成功率/% | 42.28 | 46.39 | 19.78 | 35.71 | 60 |
本文方法成功率/% | 94.63 | 98.88 | 92.31 | 93.25 | 100 |
表 2 左歪姿态细分后肉牛头部去除结果
Table 2
肉牛姿态 | 总帧 数/帧 | 凸包分析方法成功帧数/帧 | 本研究方法成功帧数/帧 | |
---|---|---|---|---|
轻度左歪图像 | 100 | 62 | 98 | 21.75 |
重度左歪图像 | 94 | 28 | 88 | 47.46 |
表 3 右歪姿态细分后肉牛头部去除结果
Table 3
肉牛姿态 | 总帧 数/帧 | 凸包分析方法成功帧数/帧 | 本研究方法成功帧数/帧 | |
---|---|---|---|---|
轻度右歪图像 | 84 | 24 | 82 | 22.09 |
重度右歪图像 | 98 | 10 | 86 | 42.56 |
综合考虑图像中肉牛低头和抬头幅度以及姿态歪斜程度对本研究提出的头部去除方法去除结果的影响,对244帧深度图像的姿态歪斜角度
图 13
图 13
在不同低头幅度
Fig.13
Head removal results of beef cattle under different head-down posture
3.2 体尺测量结果分析
图14
图14
U弦长曲率算法改进前后计算得到肉牛轮廓曲率曲线
Fig. 14
Curvature curve of beef cattle contour calculated by U-chord length curvature algorithm before and after improvement
利用人工标注方法和本研究体尺测点提取方法,在3.1节获取测试数据的基础上,针对每头肉牛随机选取2帧深度图像,共获取到23头不同姿态下肉牛46帧深度图像,进行体高、体直长和腹宽的测量。选用点云处理软件CloudCompare对俯视点云进行体尺参数的标注,对于每个体尺参数人工标注三次,求其平均值作为真实值,肉牛体尺参数测量值与真实值的结果见表4,肉牛标号方法为:将第1头肉牛的两帧图像分别标记为1号和2号,第2头肉牛的两帧图像分别标记为3号和4号……第23头肉牛的两帧图像分别标记为45号和46号。
表 4 改进U弦长曲率算法测量肉牛体尺参数结果
Table 4
肉牛编号 | 本文方法测量值 | 人工测量值 | 姿态 | ||||
---|---|---|---|---|---|---|---|
体高 | 腹宽 | 体直长 | 体高 | 腹宽 | 体直长/m | ||
1 | 1.2803 | 0.5991 | 1.2922 | 1.2651 | 0.5806 | 1.3146 | 低头 |
2 | 1.2784 | 0.5968 | 1.2577 | 1.2651 | 0.5806 | 1.3146 | 右歪 |
3 | 1.2528 | 0.5661 | 1.2546 | 1.2678 | 0.5790 | 1.2615 | 低头 |
4 | 1.2984 | 0.5968 | 1.2577 | 1.2678 | 0.5790 | 1.2615 | 右歪 |
5 | 1.2941 | 0.5852 | 1.2547 | 1.3121 | 0.5521 | 1.2520 | 右歪 |
6 | 1.3226 | 0.5761 | 1.2472 | 1.3121 | 0.5521 | 1.2520 | 姿态端正 |
7 | 1.3161 | 0.5531 | 1.2726 | 1.2946 | 0.5440 | 1.2260 | 姿态端正 |
8 | 1.3283 | 0.5595 | 1.2613 | 1.2946 | 0.5440 | 1.2260 | 左歪 |
9 | 1.2455 | 0.6524 | 1.3217 | 1.2259 | 0.6522 | 1.3523 | 低头 |
10 | 1.2392 | 0.6706 | 1.3115 | 1.2259 | 0.6522 | 1.3523 | 左歪 |
11 | 1.1279 | 0.6435 | 1.3749 | 1.2258 | 0.6486 | 1.3192 | 姿态端正 |
12 | 1.2420 | 0.6542 | 1.3389 | 1.2258 | 0.6486 | 1.3192 | 左歪 |
13 | 1.2813 | 0.5836 | 1.2308 | 1.2793 | 0.5575 | 1.3111 | 低头 |
14 | 1.3032 | 0.5765 | 1.2477 | 1.2893 | 0.5575 | 1.3111 | 左歪 |
15 | 1.2773 | 0.5829 | 1.1892 | 1.2348 | 0.6002 | 1.1899 | 右歪 |
16 | 1.2645 | 0.5904 | 1.1791 | 1.2348 | 0.6002 | 1.1899 | 姿态端正 |
17 | 1.2872 | 0.5736 | 1.1327 | 1.2606 | 0.5909 | 1.1365 | 右歪 |
18 | 1.2767 | 0.6093 | 1.1140 | 1.2606 | 0.5909 | 1.1365 | 低头 |
19 | 1.2565 | 0.6164 | 1.1514 | 1.2348 | 0.6002 | 1.1899 | 右歪 |
20 | 1.2422 | 0.6187 | 1.1553 | 1.2348 | 0.6002 | 1.1899 | 右歪 |
21 | 1.3331 | 0.5295 | 1.2316 | 1.3187 | 0.5189 | 1.2039 | 姿态端正 |
22 | 1.3414 | 0.5291 | 1.2271 | 1.3187 | 0.5189 | 1.2039 | 右歪 |
23 | 1.2987 | 0.5972 | 1.2444 | 1.2554 | 0.6207 | 1.2914 | 右歪 |
24 | 1.2768 | 0.6066 | 1.2731 | 1.2554 | 0.6207 | 1.2914 | 低头 |
25 | 1.2527 | 0.6408 | 1.2174 | 1.2635 | 0.6209 | 1.2267 | 低头 |
26 | 1.2793 | 0.6392 | 1.1921 | 1.2635 | 0.6209 | 1.2267 | 右歪 |
27 | 1.2690 | 0.6048 | 1.2176 | 1.2506 | 0.6144 | 1.2206 | 左歪 |
28 | 1.2631 | 0.5996 | 1.2079 | 1.2506 | 0.6144 | 1.2206 | 姿态端正 |
29 | 1.3248 | 0.5848 | 1.2481 | 1.3444 | 0.5956 | 1.2821 | 端正 |
30 | 1.3271 | 0.6140 | 1.3003 | 1.3444 | 0.5956 | 1.2821 | 低头 |
31 | 1.2858 | 0.6969 | 1.1688 | 1.2549 | 0.6986 | 1.2005 | 右歪 |
32 | 1.2360 | 0.6890 | 1.1303 | 1.2549 | 0.6986 | 1.2005 | 右歪 |
33 | 1.2803 | 0.6457 | 1.2163 | 1.2631 | 0.6465 | 1.2443 | 姿态端正 |
34 | 1.2509 | 0.6486 | 1.2287 | 1.2631 | 0.6465 | 1.2443 | 左歪 |
35 | 1.3167 | 0.5935 | 1.3026 | 1.3263 | 0.5825 | 1.3017 | 低头 |
36 | 1.3260 | 0.5947 | 1.3298 | 1.3263 | 0.5825 | 1.3017 | 端正 |
37 | 1.2250 | 0.6359 | 1.2869 | 1.2403 | 0.6508 | 1.2896 | 低头 |
38 | 1.1959 | 0.6546 | 1.2919 | 1.2403 | 0.6508 | 1.2896 | 端正 |
39 | 1.2190 | 0.5985 | 1.2307 | 1.2321 | 0.6069 | 1.2356 | 右歪 |
40 | 1.1941 | 0.5960 | 1.2789 | 1.2321 | 0.6069 | 1.2356 | 端正 |
41 | 1.3209 | 0.6147 | 1.1853 | 1.3187 | 0.6285 | 1.2179 | 右歪 |
42 | 1.3093 | 0.6183 | 1.1557 | 1.3187 | 0.6285 | 1.2179 | 右歪 |
43 | 1.2517 | 0.6017 | 1.1886 | 1.2674 | 0.6176 | 1.2035 | 姿态端正 |
44 | 1.2472 | 0.5744 | 1.1662 | 1.2674 | 0.6176 | 1.2035 | 右歪 |
45 | 1.4028 | 0.5970 | 1.2225 | 1.3737 | 0.6276 | 1.2762 | 右歪 |
46 | 1.3898 | 0.6091 | 1.2561 | 1.3737 | 0.6276 | 1.2762 | 右歪 |
由表4可知,体直长测量的平均绝对误差为2.73 cm;体高测量的平均绝对误差为2.07 cm;腹宽测量的平均绝对误差为1.47 cm。11号肉牛体高测量误差较大,误差为9.79 cm,主要原因是深度相机分辨率较高,数据采集时存在少量因加工食料而产生的粉尘在牛体上空漂浮,体高测点提取方法误将粉尘到深度相机平面的距离看作是牛体背部到相机平面的距离,体高测点选取错误。44号肉牛的腹宽测量误差较大,误差为4.32 cm,主要原因是该深度图像肉牛轮廓边缘信息缺失严重,本研究虽重新确定了为毛刺点的前景点的位置,但仍使腹宽测点的提取出现较大误差,该因素也导致体直长的测量误差高于均值。
为验证体尺测点提取方法针对非端正姿态下肉牛的体尺测量精度,将46帧深度图像分为姿态端正图像和非端正姿态图像,分别计算两类图像的体高平均误差、体直长平均误差和腹宽平均误差,结果如表5所示。可知,本研究体尺测点提取方法在端正姿态和非端正姿态下肉牛体尺测量误差均较低。与端正姿态下的肉牛体尺测量误差相比较,非端正姿态下的肉牛体高测量误差小于0.81 cm、体直长测量误差高于0.264 cm、腹宽测量误差高于0.418 cm。充分表明改进U弦长曲率的体尺测点提取方法在肉牛的体尺测量效果也较好。
表 5 不同姿态下肉牛体尺测量平均误差
Table 5
肉牛姿态 | 体高平均 误差/cm | 体直长平均 误差/cm | 腹宽平均 误差/cm |
---|---|---|---|
端正姿态 | 2.742 | 2.515 | 1.126 |
非端正姿态 | 1.932 | 2.779 | 1.544 |
为验证体尺测点提取方法在多姿态下肉牛的体尺测量效果,将体尺测点提取方法测得的肉牛体尺结果与文献[18] 3D特征提取方法、文献[19]基于Mask RCNN的体尺测量方法和文献[7]基于YOLOv5的体尺测量方法体尺测量结果进行对比分析,且后者均是针对端正姿态下牛只进行的体尺测量,如表6所示。可知,本研究方法测得肉牛体直长误差与文献[7]测得体直长误差相差较小,且小于文献[19]测得体直长误差;本研究测得肉牛体高误差高于文献[7]测得体高误差0.86%,且小于文献[18]和文献[19]测得体高误差。充分表明本研究提出的体尺测点提取方法可以在实现多姿态下肉牛体尺测量的同时,还能较大提高体尺测量精度。
表 6 不同方法肉牛体尺测量平均相对误差
Table 6
4 结 论
肉牛体尺参数可以作为肉牛生长发育状况及选种育种重要判断依据。而养殖场的肉牛较为活跃,采集到的图像中姿态端正帧较少,且姿态各异,传统方法难以测量其体尺。本研究通过分析肉牛骨架特征和肉牛轮廓边缘特征,提出基于深度图像的多姿态肉牛体尺自动测量方法:
(1)提出了一种基于骨架的多姿态下肉牛头部去除方法。随机选取肉牛在不同姿态下的深度图像674帧,并将其划分为五种姿态:姿态端正图像298帧、左歪图像194帧、右歪图像182帧、低头图像252帧和抬头图像30帧。本研究所提肉牛头部去除方法在五种姿态下的头部去除成功率分别为94.63%、98.88%、92.31%、93.25%和100%,均优于基于凸包的头部去除方法。
(2)提出了一种基于改进U弦长曲率的体尺测点提取方法。随机选取23头肉牛在不同姿态下的深度图像共46帧,利用改进U弦长曲率算法提取体尺测点,并计算体尺参数,测得肉牛体直长平均绝对误差为2.73 cm,体高平均绝对误差为2.07 cm,腹宽平均绝对误差为1.47 cm,且本研究所提方法测得非端正姿态下肉牛图像的体直长平均绝对误差为2.779 cm,体高平均绝对误差为1.932 cm,腹宽平均绝对误差为1.544 cm。充分表明,改进U弦长曲率的体尺测点提取方法可以提取不同姿态下肉牛体尺测点,且在不同姿态下体尺测量误差均较小。