刘永波,雷 波,胡 亮,唐江云,曹 艳,尹亚琳
(1四川省农业科学院农业信息与农村经济研究所,成都 610011;2四川农业大学,成都 611130)
稻瘟病是水稻最常见的病害之一,稻瘟病可能引起水稻大幅度减产,该病在世界范围各水稻种植区均有发生。水稻是中国第一大粮食作物,研究如何防治稻瘟病具有重要意义。稻瘟病因发病部位不同分为苗瘟、叶瘟、节瘟、穗颈瘟、谷粒瘟,其中叶瘟发病期主要呈现为叶片出现大小不同的病斑。科研人员根据稻瘟病病斑面积占叶片面积的比例将稻瘟病病害程度分为5 个等级[1]。在研究过程中由于病斑大小不一、形状不规则,无法通过标尺或仪器精确测量病斑面积,因此稻瘟病病程分级主要依靠有经验的研究人员目测判定。该方法主观性强、精确度低,且严重依赖于科研人员的经验水平[2],无法满足对病斑区域的精确测量和分级判定。
目前基于机器视觉的图形识别、图形测量等技术在农业领域广泛应用,为实现稻瘟病病程精确分级判定提供了新的可能。莫洪武[3]等利用计算机视觉技术有效识别出水稻空行,提高了杂交种产量和纯度。钟平川[4]等以机器视觉技术原理结合OpenCV 编程成功提取原木最大轮廓,计算出原木切面最大面积,提高原木出材率。汪成龙[5]等采用机器视觉与SVM 支持向量机算法模型成功判定马铃薯是否畸形。张楠等[6]基于softmax 分类器实现对水稻稻瘟病的自动识别。从上述文献可知,利用机器视觉技术可快速、有效的实现对农作物的检验、测量、识别等操作。本研究设计了一套基于GrabCut、高斯滤波、OTSU二值化、颜色空间转换、反向阈值切割等处理的水稻稻瘟病分级判定算法模型。该算法模型利用OpenCV 与python 语言实现,以反向阈值切割为核心策略分离叶片与病斑,再以循环遍历模式统计像素点得出病斑面积占比,实现对稻瘟病的快速、精确分级。
试验所使用的水稻稻瘟病图片均采集自四川省成都市蒲江县水稻基地,图像采集设备为华为P20、小米mix2s 手机,拍摄环境为自然光照条件下的开放式大田。试验模型需通过算法提取叶片与病斑的特征区域,因此拍摄时将完整的水稻叶片置于镜头中央,并引入标尺为参考系,便于验证算法准确性。本试验采集稻瘟病人工判定分别为1~5级的图片共计189张。
为实现研究人员能够在大田环境中方便快速的获得稻瘟病分级结果,本试验算法采用手机端APP作为图像采集前端。系统架构由服务层、控制层、计算存储层三部分构成。其中服务层负责将手机采集图像数据源通过传输API传入MiniServer统一传到控制层。控制层包含:DataSource、Workflow、Operator、Model操作4 个部分,负责后端各个功能模块的调度。计算存储层包含HDFS数据存储模块,图像算法处理模块,数据库模块,该层负责实现试验算法,并将原始图片和结果存储进数据库[7]。系统整体架构如图1所示。
本试验研究目标是通过机器视觉技术获取稻瘟病图片中病斑占叶片总面积的比例,将结果对应稻瘟病分级标准,最后获得分级结果。首先从试验图片中提取感兴趣的目标区域,将水稻目标叶片从背景中分离出来;然后对目标区域图片预处理,降低目标图片噪音干扰,将降噪后的图片转换为HSV 通道,对目标图片在HSV颜色通道下的色彩分布进行分析,确定阈值范围,最后反向阈值切割图片获取病斑区域计算面积占比。具体稻瘟病分级判定算法流程如图2所示。
1.3.1 目标图像与背景分割 常用的图像目标区域分割方法包括颜色阈值分割、分水岭算法、GrabCut 算法、轮廓检测等[8]。由于水稻叶片较小,为保证采集图像的质量需在手机微距模式下拍摄,微距模式下水稻叶片作为目标图像会有较高的清晰度,而叶片外远景会呈现相对模糊的状态。因此本研究采用GrabCut算法对稻瘟病叶片进行提取,GrabCut 算法对于分离前景清晰背景模糊的图像具有良好的效果,算法原理如图3所示。
将图像中的每一个像素看成图中的1 个节点,然后在Graph 中增加2 个Node,分别为F 和B,F 代表Foreground 前景,而B 代表Background 背景,每2 个相邻像素点用1条边相连,每1个像素点和F点用1条边相连,每1个像素点和B点也用1条边相连。最后将图像切割分成两部分,第1 部分的像素点和F 相连为前景,第2部分的像素点和B相连为背景[9]。整幅图像的Gibbs能量函数可以表示为公式(1)。
其中,其中U函数部分表示能量函数的区域数据项,V函数表示能量函数的光滑项(边界项),参数α 代表分离后的前景或背景,αn=0或1(背景或前景);参数k是一个向量,k={k1,k2......kn},每个kn属于{1,2...k}集合,对应着k个高斯分量;θ代表每个高斯分量中参数;参数z是一个向量,z={z1....zn},每个zn代表着每个像素的灰度值。图像分割的过程就是使式(1)不断减小的过程,当它不能再减小,即趋于某一个恒定的值时,就表示图像分割完成。
1.3.2 图像预处理 在高清设备采集的水稻叶片图像上,即使健康的叶片也并非是完全光滑的绿色,叶片表面会存在一些细微的纹理,这些纹理后期会对图像处理产生一定干扰。图像预处理的目的在于增强我们需要的信息,排除干扰的部分。常用的图像预处理包括高斯滤波、双边滤波、中值滤波等。水稻叶片边缘一般呈自然弯曲的形态,无需保留直线边缘,因此选择通用性较好的5x5卷积核的高斯滤波器[10-12]。
1.3.3 病斑特征提取 普通相机或手机拍摄的图像通常为RGB 通道,但RGB 通道并不能很好地反映出物体具体的颜色信息,相对于RGB 空间,HSV 空间能够非常直观的表达色彩的明暗、色调、以及饱和度,方便进行颜色区间的获取。因此本文对稻瘟病病斑的提取方式采用HSV颜色空间下的阈值切割实现,阈值切割通常是对HSV 颜色空间下一定取值范围内的颜色进行捕捉,但经观察可发现稻瘟病的病斑往往不是单一的黄色。较大的病斑通常边缘呈现黑色,病斑内部枯黄色,较小的病斑呈现淡黄色没有黑色边缘。若直接对黄色范围内的颜色分割会产生较大的误差,因此本研究提出反向阈值切割法,将叶片健康的绿色部位作为阈值搜索范围,切割去掉病斑部分的叶片图像标记为img_n,将完整全叶图像标记为img_N,两者相减所得差即为病斑部分。具体实现步骤如下:
(1)颜色空间转换。颜色阈值切割需在HSV颜色空间下进行。通过手机拍摄的图片通常为RGB通道,可利用OpenCV 中的cv2.cvtColor 函数实现图像由RGB转为HSV通道[13-15]。
(2)反向阈值切割。阈值切割需明确给定阈值范围,定义切割范围最小值为Lower_green,最大值为Upper_green,将阈值切割所得部分图像生成掩模,原图与掩模部分作图像与运算即可获得去除病斑部分的叶片。
(3)OTSU二值化。OTSU算法又名最大类间方差法,其原理为利用阈值将原图像分成前景,背景2个图像。用ω0、ω1分别表示前景点、背景点所占比例,μ0、μ1分别表示前景、背景灰度均值,则有μ值,见公式(2)。
前景与背景的方差为公式(3)。
将公式(2)带入公式(3)则得公式(4)。
在本文中主要利用OTSU 算法将步骤(2)中切割所得图像二值化为白色底片,因此将OTSU 算法中的阈值设定为0(即图中所有有效像素点转化为白色)[16-17]。
1.3.4 计算机面积比 在机器视觉技术中,若没有参考系通常无法直接计算图形的真实面积,但可以通过一种抽象的方式获得图像的面积参数,即图像的像素点个数。经过二值化处理的图像都呈现白色,设i为像素横坐标、j为纵坐标,[i,j]代表某个有效像素点。利用嵌套循环遍历每个像素点,并判断当该像素点为白色时,则像素点个数加1。以此方法分别计算出全叶像素点面积Img_N 和去掉病斑的像素点面积Img_n,病斑面积可表示为(Img_N-Img_n),病斑占叶片的面积比result即可表示为公式(5)。
采用1.3.1 节所述的GrabCut 算法对背景实施分离。经试验发现,由于图像前景部分除水稻叶片外还存在其他干扰信息,直接对原图全局GrabCut 切割的效果不理想。为提高背景分离准确度,在手机端传入图片时实现用户手动框选一个矩形区域Rect(x,y,w,h)作为参考域,其中x、y为矩形起点坐标,w、h为起点相对坐标[18]。手机端操作界面如图4所示。
两组稻瘟病叶片经GrabCut算法分离后的效果如图5所示。由图5可看出,试验过程虽然加入了少量的人机交互,整个操作过程在5 s 内可完成,但经过Rect区域约束后图像切割较好的保留了叶片边缘的信息。
HSV 颜色空间下H、S、V三者的取值范围分别为H:[0,180];S:[0,255];V:[0,255]。利用1.3.3 节中提出的反向阈值切割法提取病斑,需得到HSV颜色空间下绿色的阈值范围,在标准化HSV空间中绿色的取值范围为H:[35,77],S:[43,255],亮度V对绿色影响较小,可适当扩大搜寻范围[19-21]。经试验发现,使用标准化绿色阈值范围切割所得结果误差较大,绿色部分获取不够完整,导致所得病斑面积大于实际面积。为获得精确的阈值范围,提高模型可靠性,笔者选择了4组人工分级分别为1、2、3、5级的稻瘟病叶片绘制色调与饱和度关系直方图[22],其中纵坐标H代表色调,横坐标S代表饱和度,其结果如图6所示。
图6a 中1 级稻瘟病叶片病斑非常小,直方图中色彩集中分布在H值40左右的绿色区域,未出现明显的色彩界限。图6d由于病程达到最高的5级,叶片表面几乎全部被病斑覆盖,绿色区域与病斑的黄色区域连成一片,无法分辨明显的色彩界限,参考价值较低。观察图6b和图6c可知,绿色部分集中分布在H色调值为[30,60],S饱和度为[50,200]区间,30 以上存在黑色的阴影区,到H值为20 又出现部分较为集中的色彩分布,通过查询HSV 颜色空间分布值可知,H值20 左右为橙、黄色区域,因此可推断该部分色彩为病斑分布区。
为验证此推断,试验设定反向阈值切割的取值范围为色调H=[30,60],饱和度S=[50,200],亮度V=[0,255],将设定好的参数模型分别测试不同的稻瘟病叶片,测试结果如图7所示。
由图7可知在该取值范围内反向阈值切割法效果良好,黄色病斑、黑色病斑以及较大的病斑均成功从叶片中分离,同时可观察到病斑分布密集时,算法对于病斑的边缘控制与原图存在细微的误差。
经反向阈值切割分离病斑后,通过1.3.3节提到的二值化操作分别计算出全叶像素点面积Img_N和去掉病斑的像素点面积Img_n,再将两者带入公式(5)运算得到面积占比值,最后将面积占比值对应稻瘟病分级标准得出分级结果。按照稻瘟病测报调查规范GB/T 1570—1995国家标准稻瘟病叶瘟可分为5级[23-24],如表1所示,分级标准如下。
表1 稻瘟病分级标准
将试验采集的189 张1~5 级稻瘟病图片分别编号测试算法,所得分级结果与人工判定统计结果对比如表2所示。
表2 样本分级测试结果
从表2算法测试结果可知稻瘟病分级为1级时,判定结果与人工判定结果一致,准确度较高。分级为2、3级的样本中有2组分级结果与人工分级不同。4、5级的样本中有6 组分级结果不同,将分级结果出现偏差的图像样本测试数据单独列出到表3。表3数据显示,1、2号样本面积占比均接近5%,介于2、3级临界值,人工判定存在一定主观性,造成与机器算法约1%的误差。4~8 号样本经模型运算面积占比均超过50%,但人工判定为4 级,经笔者对比原图发现,4~8 号样本除病斑区域外,叶片自身主体部分呈现枯黄色,但未生长病斑,模型将该区域识别为病斑区域因此与人工分级不同,根据GB/T 1570—1995 国家标准,5 级稻瘟病呈现病斑占比大全叶枯死,因此4~8 样本判定为5 级也符合文件标准。
表3 与人工分级结果不同的样本
本算法对稻瘟病病斑分割效果较好,但也存在以下问题:(1)当叶片上存在其他病害和客观因素造成叶片枯黄时,算法会将枯黄部分识别为病斑区域影响判定结果。因此,该算法目前适用范围限定在仅发生稻瘟病单一病害的水稻上。(2)GrabCut分离目标背景时候引用了参考域,该方法有效提高了分离精确度,但降低了算法的智能化程度。
在未来的研究中,考虑在背景分离时通过算法定位到叶片区域自动生成参考域,减少人机交互,同时在算法识别时,加入病害种类识别功能,优先判断是否为稻瘟病再计算病斑面积比,提高算法的准确性和适应性。
本研究基于计算机视觉技术提出一种在HSV 颜色空间下的阈值切割法,可有效实现水稻稻瘟病的病斑分离和病程分级判定。经试验验证该算法模型与专业研究人员人工判定的结果匹配度达95.77%,且不依赖专业仪器设备,用户只需使用智能手机拍照,即可实时获得稻瘟病精确的分级结果,提高了稻瘟病分级判定的精确性和客观性[25]。该算法在处理因其他因素造成水稻叶片枯黄时存在一定误差,同时智能化程度也有提升空间,这将是未来课题研究的重点。