刘 刚 张伟洁 郭彩玲
(1.中国农业大学现代精细农业系统集成研究教育部重点实验室, 北京 100083;2.中国农业大学农业农村部农业信息获取技术重点实验室, 北京 100083; 3.唐山学院机电工程系, 唐山 063000)
叶冠是果树光合作用的主要场所,其空间形态结构直接影响冠内的光照分布、光合生产力及枝叶器官的生理状态,进而影响果实品质和产量[1-2]。叶片作为叶冠的主要组成部分,获取其空间分布规律及生长参数对获取精确的叶冠结构具有重要的研究价值,也是进一步研究冠层光照分布计算的基础[3],可为果树的自动化修形剪枝提供技术支持[4-6]。
叶片的识别方法多局限于二维空间中,虽然存在运算速度快等优点[7-8],但难以进一步提取生长参数。地面三维激光扫描仪在农业领域的应用[9-12]使得快速获取果树冠层三维空间信息成为可能,进而可实现冠层叶片的自动分割及生长参数的提取,能在较大程度上减少人力,提高作业效率[13-15]。
国内外研究人员对点云分割方法进行了大量研究,主要分为6类[16]:基于区域边界的分割方法适用于边界明显、分布规则的数据[17-18];基于区域增长的分割方法适用于有明显分布差异的点云[19];基于图的分割方法和基于模型匹配的分割方法对规则点云有很好的聚类效果[20];基于机器学习的分割方法对训练样本的要求较高[21];基于聚类的分割方法采用特征聚类,根据不同的点云分布特征,选择适当的特征检测方法[22-23]。果树叶片空间分布相对密集,枝叶连续生长难以区分,因此利用特征聚类实现叶片分割较为合理。
叶片生长参数提取研究中,吴升等[24]通过计算叶片点云法向量与XOY坐标平面的夹角,实现点云在XOY坐标平面的正投影,进而将叶片几何参数求解降维到二维空间上;郑一力等[25]采用主成分分析与线性评判分析相结合的方法,实现了叶片的多特征降维计算。降维法计算叶片生长参数简单快速,但忽略了叶片的三维空间特性。针对以上问题,本文提出一种叶片点云聚类分割算法,融合局部凹凸性算法(Locally convex connected patches,LCCP)并改进K-means算法,动态获取K值,进而研究叶片的生长参数提取方法。
随机选取中国农业大学苹果树采摘机器人试验基地(北京市昌平区南口镇辛力庄村)的1棵富士苹果树作为研究对象,树高3.1 m,树龄4年,采用美国Trimble 公司TX8型地面三维激光扫描仪(具体参数如表1所示)进行点云扫描。由于试验果树周围还生长有其他果树,遮挡较多,为了获得高质量的点云,数据获取试验采用5站扫描,如图1所示。其中的s1~s5为5个扫描点位,扫描仪的工作位置与被测果树树干的距离为3.5~5 m,c1~c6为用于配准定位的6个标靶球(标准直径100 mm),分布于试验果树周围,保证在每站扫描能识别3个以上标靶球,以便多站点云的配准,扫描实地场景如图2a所示。本试验不考虑环境(如风速、温湿度、光照度等)的影响。
表1 Trimble TX8型扫描仪产品参数Tab.1 Product parameters of Trimble TX8
图1 扫描仪布置示意图Fig.1 Scanner layout diagram
图2 点云数据采集Fig.2 Point cloud acquisition
利用基于标靶球提取的算法[26]配准多站点云,点云数据获取过程中由于外界环境干扰和设备自身的误差,产生大量的噪点,采用前期研究成果[27]——基于距离均值计算的方法,剔除噪点。点云密度大且分布不均匀,采用均匀网格法完成抽稀处理,最终所得的苹果树冠层点云数据如图2b所示,图2a中白色小球为标靶球。
本研究算法由C++语言编写实现,点云处理库为点云库(Point cloud library,PCL)。获取的点云数据以三维坐标(x,y,z)的形式存储,数据量庞大,约有115万点。为了简化果树叶片点云的搜索和存储,创建新的叶片点云PCD存储格式,每条记录存储一个叶片节点,包括的属性有叶片中心点Li(xi,yi,zi)、叶片法向量Ni、叶长Lleni和叶宽Lwidi。
本文研究方法流程主要分为4部分(图3):数据获取、点云预处理、叶片点云聚类分割和叶片生长参数提取。数据获取试验需在晴朗无风条件下进行;点云预处理主要包括点云配准、去噪和抽稀;采用基于动态K阈值的算法,融合LCCP算法和改进的K-means算法,随机选取冠层的一个枝条,作为研究对象,进行叶片点云聚类分割;叶片生长参数提取方法采用PCA方法和边界提取方法,分别实现叶片生长角度和叶长叶宽参数值的获取。
图3 叶片点云分割及生长参数提取流程图Fig.3 Flow chart of apple tree point cloud segmentation and growth parameters extraction
1.2.1叶片点云的聚类方法
叶片点云聚类分割,采用基于动态K阈值的算法,融合LCCP算法,并采用改进的K-means算法,实现K阈值的动态获取。该算法主要包含以下过程:超体聚类、LCCP聚类[28]、K阈值获取和K-means分割。
超体聚类是一种过分割方法,过分割涉及的参数有体素距离Rv、晶核距离Rs。八叉树初始化点云,过分割生成独立的超体素块pi=(xi,ni,Ei),其中pi为超体素索引、xi为体素中心、ni为体素法向量、Ei为邻接体素边集合,计算邻接体素相似度完成超体聚类
(1)
式中D——体素合并的概率
wc、ws、wn——颜色、空间、法向量的信息权重
Dc、Ds、Dn——颜色、空间、法向量容差
以超体聚类所得体素集合为研究对象,建立体素索引向量,采用CC(Extended convexity criterion)和SC(Sanity criterion)方法判定邻接体素凹凸性关系完成LCCP聚类。
(2)
(3)
β=∠(n1,n2)
(4)
式中 CCb(pi,pj)——邻接体素块凹凸性
n1、n2——邻接体素块法向量
βT——法向量角度偏差阈值
i、j——体素索引号
当邻接体素面不连接时,CC的判定准则不适用,此时需要使用SC准则对邻接体素关系进行判定,SC判定依据为
(5)
其中θ(pi,pj)=min(∠(d,s),∠(d,-s))=
min(∠(d,s),180°-∠(d,s))
(6)
(7)
s=n1×n2
(8)
式中 SCb(pi,pj)——邻接体素凹凸性
conv(pi,pj)=CCb(pi,pj)∧SCb(pi,pj)
(9)
式中 conv(pi,pj)——pi、pj的凹凸性
动态K阈值的获取主要分为两个步骤:一方面计算K=4时,K-means聚类后各点集三维质心间欧氏距离;另一方面计算叶片中心点到拟合直线的距离均值,作为距离阈值。动态获取K阈值的具体方法如下:
(1)根据LCCP所得类簇,设定K=4,进行K-means聚类分割,并计算4个点群的中心点Ckm(xm,ym,zm)。
(2)计算4个中心点之间的6组欧氏距离(其中m、n为类簇中心点编号)
(10)
(3)手动截取枝条叶片点云,计算所有叶片点云中心点Cs(xs,ys,zs),根据所得点云中心点拟合直线L,计算叶片中心点到直线L的距离均值,作为距离阈值Dt,此阈值为统计结果,不需要重复计算。
(4)将步骤(2)所得的中心点欧氏距离,与距离阈值Dt进行比较,大于、小于距离阈值的个数分别为a、b,根据a与b的大小关系,确定此点群需要分割的点群个数K,其中K值的选定准则为