冯俊惠,李志伟,戎有丽,孙志立
(山西农业大学农业工程学院,山西晋中,030801)
通讯作者:李志伟,男,1969年生,山西太谷人,博士,教授,博导;研究方向为精细农业装备及计算机控制技术。E-mail: lizhiweitong@163.com
果蔬收获是果蔬种植业各生产链中最耗时、最费力的一个环节,果蔬采摘机器人可以极大减少劳动力,降低农产品生产成本。果蔬采摘机器人通过计算机视觉等技术手段,根据颜色、形状、纹理等特征信息,将果实从茎叶等背景中识别出来,并进行定位,最后控制机械手协调动作,完成整个采摘和存放过程。因此,基于计算机视觉的成熟果实识别是保证果蔬收获机器人精准作业的重要前提[1-3]。
1987年,美国的Slaughter等[4]研制了柑橘收获机器人,利用彩色摄像机和超声波传感器识别柑橘,并确定果梗位置信息。1992年,日本的Kondo等[5]研制了番茄收获机器人,利用彩色摄像机来识别番茄,但是无法收获被茎叶遮挡的成熟果实。2001年,荷兰的Henten等[6]研制出了黄瓜收获机器人,通过机器视觉传感器识别成熟的黄瓜,并获取三维位置信息。我国对果蔬收获机器人的研究始于20世纪90年代,虽然起步较晚,但也取得了一定的成绩,如陆怀民[7]研制的林木球果采摘机器人,曹其新等[8]研制的草莓采摘机器人,张铁中等[9-11]在草莓、黄瓜、西红柿、茄子等果蔬果实采摘机器人方面进行了深入研究。
在番茄识别时,由于番茄果实近似球形,因此可以采用抗干扰性强的Hough圆变换算法[12-15]。但Hough圆变换算法运算量极大,难以满足采摘机器人对实时性的要求,且由于番茄非标准球形,而且存在多果重叠和茎叶遮挡等问题,所以需要改进Hough圆变换算法(Circular Hough Transform,CHT),以解决上述问题。本文首先对采集的图像进行下采样,然后基于背景分割得到二值化图像,并进行边缘信息提取,最后在此基础上采用改进Hough圆变换算法实现成熟番茄果实识别,为今后番茄收获机器人完成自动化采摘提供研究基础。
试验所用番茄样本采自山西农业大学农业工程学院智能温室,番茄品种为天妃九号,采用智能手机(HONOR 9X Pro)获取番茄RGB图像,摄像头距番茄果实20~60 cm,图像尺寸为4 000像素×3 000像素(4∶3)。图像处理计算机采用Intel Core(TM) i5-4590微处理器,软件开发环境为MATLAB R2019b。图1为采集到的番茄果实图像。
图1 番茄果实图像采集示例Fig. 1 Image acquisition example of tomato fruits
图像像素分辨率越高,图像越清晰,相应的图像处理计算量也越大。为了减少计算量,提高运算速度,在不影响图像处理效果的前提下,对图像进行下采样。本文下采样是将原始图像10像素×10像素的窗口区域用一个像素点来表示,即对原始图像每隔10行、每隔10列采样一个点,将采样到的点依次排放,得到下采样后的图像,图像下采样示意图如图2所示。将原始图像下采样得到的图像尺寸为400像素×300像素,结果如图3所示。
图2 图像下采样示意图Fig. 2 Sketch of image downsampling
图3 原始图像下采样结果图Fig. 3 Result of original image downsampled
背景分割是目标识别的首要问题,可以为目标识别减少运算范围,提高识别准确率。在采集到的RGB图像中,成熟的番茄果实区域R分量要明显高于G分量和B分量,而未成熟果实和枝叶区域则不具备这样的统计特性[16],因此可以通过颜色信息进行背景分割。背景分割的处理方法可以通过伪代码来表示
ifR(x,y)>G(x,y)+50&R(x,y)>B(x,y)+50,
thenPixel(x,y)∈foreground;
elsePixel(x,y)∈background。
根据上述方法可快速实现背景分割,对图3所示的下采样的图像进行背景分割,得到以成熟番茄为目标的二值图像,结果如图4所示。
图4 成熟番茄果实背景分割结果图Fig. 4 Background segmentation result of mature tomatoes
基于颜色信息的背景分割只能完成单个或未遮挡的成熟番茄果实识别,当存在多果重叠和茎叶遮挡等问题,需要采用Hough圆变换算法进一步识别番茄果实,而Hough圆变换算法的前提是边缘信息已知,因此,需要在背景分割的基础上进行成熟番茄果实边缘检测。
边缘检测的算法有很多,有Robert算子、Sobel算子、Prewitt算子、LOG算子、Canny算子等。其中,Sobel算子[17]是一种基于一阶导数的边缘检测算子,计算简单,对噪声有较好的抑制作用,且定位精度较高,适合对成熟番茄果实背景分割得到的二值图像进行边缘检测。图5是基于Sobel算子得到的边缘检测结果图。
图5 成熟番茄果实边缘检测结果图Fig. 5 Edge detection result of mature tomatoes
1.4.1 Hough圆变换算法
Hough变换算法是Paul Hough在1962年提出的一种区域边界状态检测算法[18],将原始图像空间的边缘信息转换到参数空间,参数空间包含了用以表述待检测图形的所有参数,因此,根据Hough变换算法可以检测出原始图像中的待检测图形。待检测图形可以是直线、圆形、椭圆等。
在笛卡尔坐标系中,圆形可以表述为
(x-x0)2+(y-y0)2=r2
(1)
式中: (x,y)——圆上任一点的坐标;
(x0,y0)——圆心坐标;
r——半径。
因此,圆形可以用圆心和半径来描述,Hough圆变换中,参数空间可以描述为(x0,y0,r)。
为了将原始图像中的边缘像素点(x,y)转换到参数空间(x0,y0,r),将式(1)描述为
(2)
式中:θ——边缘像素点(x,y)到圆心的直线与水平轴之间的夹角。
对于任一边缘像素点(x,y),半径r和夹角θ取不同的值时,代入式(2)则可计算出x0,y0取值,从而可以得到相应的(x0,y0,r)组合。遍历所有的边缘像素点,计算出所有的(x0,y0,r)组合。对所有的(x0,y0,r)组合进行投票,票数超过一定阈值的组合即对应检测到的圆形。
Hough变换算法采用了投票制思路,因此对边缘信息不完全及待检测图形非标准等情况都具有很强的鲁棒性。
1.4.2 改进Hough圆变换算法
圆上任一点的坐标(x,y),如果是连续变量,则可以根据式(2)准确转换为(x0,y0,r),但对于离散变量,只能是近似解。在数字图像中,边缘往往是锯齿状,即使是标准圆形,代入式(2)求得的(x0,y0,r)也可能存在偏差,在算法后续投票时可能影响票数而无法被检测。因此,对算法进行改进。根据边缘像素点(x,y)计算得到的(x0,y0,r),不仅对(x0,y0)这一点对应的组合(x0,y0,r)票数值加1,也对(x0,y0)该点8邻域对应的组合(x0-1,y0-1,r)、(x0,y0-1,r)、(x0+1,y0-1,r)、(x0-1,y0,r)、(x0+1,y0,r)、(x0-1,y0+1,r)、(x0,y0+1,r)、(x0+1,y0+1,r)票数分别加1。
计算出所有的(x0,y0,r)组合后要进行投票,票数超过一定阈值的组合即对应检测到的圆形。由于在数字图像中,离散的边缘像素值转换得到的(x0,y0,r)可能存在偏差,数字图像中的标准圆形有可能经过Hough圆变换被检测成多个圆心位置相近且半径相似的圆,因此需要进行聚类,即对票数超过阈值的组合进行聚类。聚类的依据是:若两组合中圆心坐标相近且半径大小近似相等,则可以聚为一类。聚类后将该聚为一类的所有圆心坐标的均值和半径的均值作为该类最终的圆的参数。
改进Hough圆变换算法流程图如图6所示。
图6 改进Hough圆变换算法流程图Fig. 6 Flowchart of modified CHT algorithm
在图6所示的算法流程图中,寻找与组合A中圆心相近且半径相似的其他组合,用数学表达式描述如下。
假设组合A对应的圆心坐标是(x0A,y0A),半径为rA,若另一组合B对应的圆心坐标是(x0B,y0B),半径为rB,则圆心相近可以表示为
(x0A-x0B)2+(y0A-y0B)2<[min(rA,rA)]2
(3)
由式(3)可知,当组合B对应的圆心在组合A对应的圆内部或组合A对应的圆心在组合B对应的圆内部时,认为两圆心相近。而半径相似可以表示为
rA/rB>Tr&rB/rA<1/Tr
(4)
式中:Tr——半径相似比阈值,该值是一个0~1之间的数。
1.4.3 基于改进Hough圆变换提取番茄果实
在边缘检测的基础上,采用改进的Hough圆变换算法进行番茄果实提取。如图7所示,基于改进的Hough圆变换算法,对初步检测到的圆(圆心用圆点表示,边缘用细实线表示)进行聚类,得到最终的结果(圆心用圆圈表示,边缘用加粗的点划线表示)。基于改进Hough圆变换提取的番茄果实在图8中用白色线表示,白色“+”为圆心。
图7 改进Hough圆变换算法检测结果图Fig. 7 Detection result of modified CHT algorithm
图8 成熟番茄果实识别结果图Fig. 8 Identification result of mature tomatoes
在基于改进Hough圆变换算法提取番茄果实时,算法中有一些参数需要设置。
在图6所示的改进Hough圆变换算法流程图中,第3步取一个可能的r和一个可能的θ,r和θ的选取是在一定范围内以一定步长变化取值的。根据实际图像的统计,半径r的范围是20~60像素(针对下采样后尺寸为400像素×300像素的图像),半径r的步长取值为1。θ反映的是边缘像素点到圆心的连线与水平方向的夹角,因此取值范围是0°~360°,步长取值为0.1。
Hough变换算法中,在对所有的(x0,y0,r)组合投票后,要进行票数统计,若已知图像中只有一个圆形,则可以将票数最多的组合检测为圆形,但在圆形个数未知的情况下,需要设置阈值,将票数大于阈值的组合加入到候选集合中。这里,阈值的设置与当前投票的票数最大值有关,它是一个0~1之间的小数,相当于票数最大值的百分比。在多个圆检测时,若存在圆形被遮挡的情况,该值取值要稍微小点,以检测出所有圆形。在本试验中,该值为0.75。
在对候选集合中的组合进行聚类时,是将圆心相近且半径相似的圆聚为一类,在判断半径相似时用到式(4),其中,Tr是半径相似比阈值,该值是一个0~1之间的数。对于标准圆形的检测,该值可以设置的大点,但对于非标准圆,该值要设置的小点。由于番茄是类球形,一个番茄可能识别出多个半径不等甚至相差较大的圆形,因此在聚类时,需要将半径相似比阈值设置较小,这里设置为0.5。
番茄植株每一穗果结果数量不等,其中每个果实的成熟度也可能不同。番茄果实的成熟周期大致可以分为未熟期、绿熟期、转色期、半熟期、成熟期和完熟期等6个阶段[19],采用本文1.2节中的基于颜色信息的背景分割方法,基本可以识别半熟期、成熟期和完熟期的番茄,当存在多个不同成熟周期的番茄果实时,成熟番茄果实的识别较为复杂。当果实被枝叶遮挡或存在多果重叠时,准确识别成熟番茄果实也较为复杂。为了验证本文算法在多种不同情况下的识别效果,采集图像80张进行试验,并与传统的Hough圆变换算法进行对比,图9给出三种不同情况下的试验结果。
图9中,第1组试验图中包含了完熟期、成熟期、转色期和未熟期等不同成熟周期的番茄果实(主要为转色期果实干扰成熟番茄识别),第2组试验图中存在番茄果实被茎叶和果柄遮挡的情况,第3组试验图中存在番茄果实部分重叠的情况。
将图9所示的三组试验分别采用传统Hough圆变换算法和本文改进算法的识别结果进行统计,如表1所示。
表1 图9中三组试验结果统计表Tab. 1 Statistics of three groups of test in Fig. 9
图9 三种不同情况下的成熟番茄果实识别
由表1可知,对于图9所示的三种不同情况下的成熟番茄果实识别,采用传统的Hough圆变换算法能完成基本识别,但由于番茄非标准球形,因此存在一个番茄果实被识别为多个圆形的问题,而本文算法能够得到较为准确的识别结果。
此外,分别计算采用传统的Hough圆变换算法和本文算法识别成熟番茄果实的运行时间,如表2所示。由表2可知,本文算法与传统的Hough圆变换算法相比,极大提高了算法的执行效率。
将采集到的80张图像进行分类试验,并分别统计各类试验的识别率。由于传统的Hough圆变换算法存在一个番茄果实被识别为多个圆形的问题,因此分类试验只对本文算法进行。分类主要包括5类:(1)简单情况,即一穗果中成熟果实为1个,或多个果实无相互遮挡,且茎叶遮挡极少,无转色期果实;(2)包含了完熟期、成熟期、转色期和未熟期等不同成熟周期的番茄果实,即转色期果实干扰成熟番茄识别;(3)存在番茄果实被茎叶和果柄遮挡的情况;(4)存在番茄果实部分重叠的情况;(5)同时包含2、3、4多种不同情况,即复杂情况。表3给出了5类试验的识别结果统计情况。
表2 算法运行时间对比Tab. 2 Contrast of methods running time
在表3中,实际成熟番茄个数是人工统计得到的,识别的番茄个数是采用本文算法识别到的成熟番茄个数,漏检个数是指未被识别到的成熟番茄个数,误检个数是指被错误检测的成熟番茄个数(本试验中的错误检测是一个成熟番茄被错误地识别为多个圆形),正确识别率是指正确识别个数与实际成熟番茄个数的比率,漏检率是指漏检个数与实际成熟番茄个数的比率,误检率是指误检个数与实际成熟番茄个数的比率。计算五类试验平均正确识别率为86.3%,平均漏检率为5.7%,平均误检率为8.0%。
表3 分类试验识别结果统计情况Tab. 3 Statistics of identification in the classification tests
1) 当一穗果中成熟果实为1个,或多个果实无相互遮挡,且茎叶遮挡极少,无转色期果实干扰时,本文算法可以准确识别。
2) 当存在多个不同成熟周期的番茄果实、果实被茎叶遮挡、多果重叠等情况,或多种情况同时存在时,识别准确率降低。识别错误包括漏检、误检等情况,如遮挡严重时会发生漏检,先采摘识别到的果实,然后再次采集图像并进行识别,可以实现漏检番茄的采摘。
3) 番茄果实识别可以与成熟度分级同时进行,这样当存在多个不同成熟周期的番茄果实时,可以按照成熟度分别采摘存放,以提高采摘效率和经济效益。
4) 采用改进的Hough圆变换算法识别番茄果实,可以计算出圆心和半径,用以拟合果实的形心和半径,为控制番茄采摘机器人机械手动作提供数据信息。
1) 本文对采集到的图像进行下采样,以及采用Sobel算子对背景分割后的二值图像进行边缘提取,都是为了减少Hough圆变换算法的运算量,提高运行效率。由于数字图像中边缘信息转换到参数空间时非精确解,而是近似解,因此对Hough圆变换算法进行改进,对转换时计算出的圆心及其8-邻域对应的组合进行投票。由于番茄果实为类球形,采用标准Hough圆变换算法可能将同一个番茄果实识别为多个圆形,因此对Hough圆变换算法进行改进,将圆心相近且半径相似的组合进行聚类,实现了对番茄果实的准确识别。
2) 本文算法对存在不同成熟周期的番茄果实、茎叶遮挡、多果重叠等多种情况都能有效识别,而传统的Hough圆变换算法存在一个番茄果实被识别为多个圆形的问题,因此基本失效。对于上述三种情况,本文算法的准确识别率分别为87.5%、85%、84.8%,漏检率分别为0%,5%,8.7%,误检率分别为12.5%,10%,6.5%,三种情况同时存在的复杂情况下准确识别率为84.6%,漏检率为6.4%,误检率为9%,而简单情况下可以100%准确识别,经统计,平均正确识别率为86.3%,平均漏检率为5.7%,平均误检率为8.0%,平均运行时间为398 ms。