李梅竹 王胜
摘 要:针对葡萄种植中切根虫的危害,采用基于OpenCV的图像处理方法设计葡萄树干精准对靶施药系统的视觉模块。通过图像处理实验,得出基于mean shift 的图像分割结果,边缘检测结果以及直线检测结果。实验结果证明该模块设计可有效的区别出葡萄园中弯曲的葡萄树干和笔直的树桩。
关键词:OpenCV;视觉模块;图像处理
中图分类号:TP23 文献标识码:A
1 引 言
对于世界葡萄种植来说,切根虫(一种夜蛾的幼虫)是危害葡萄树生长的主要害虫之一。精准对靶施药系统可在葡萄树干上施加一个均匀的、宽度大于等于20cm的“障碍药带”,可有效的阻止切根虫夜晚从树根爬到树冠啃食新芽。由于在实际葡萄园中,每隔几棵葡萄树就会立一根树桩拉着铁丝牵引葡萄藤,所以在施药时需要区分笔直的树桩和弯曲的葡萄树干,避免不必要的施药。因此本文基于OpenCV的图像处理方法进行精准对靶施药系统视觉模块设计。
2 基于OpenCV的图像处理
OpenCV软件由C函数以及C++函数组成,可以进行例如特征检测、目标分割、三维重建等图像分析。在图像处理、计算机视觉等方面,OpenCV起到了无可取代的重要作用。在不远的将来,OpenCV对工业、航天、军事、人机对话等领域都起到了及其关键的作用。随着图像分析、视觉技术的发展,OpenCV将逐渐适用于更多的场合[1]。本文研究中采用计算机视觉技术,通过CCD摄像头采集图片,使用OpenCV来检测采集到的葡萄树干和木桩图片的外轮廓线,从而判断喷药设备前方的物体是弯曲的葡萄树干还是笔直的木桩,若判定为弯曲的葡萄树干则喷药,若判定为笔直的木桩,则发出信号,让拖车继续前行。
2.1 图像预处理
在进行轮廓检测前,首先要对采集到的葡萄树干和木桩的图片进行预处理,主要是进行形态学去噪以及图像平滑处理[2]。
2.1.1 形态学去噪
数学形态学,其本质是通过一些方法实现图像处理,比如:利用结构元素提取图像形状等。数学形态学的基本操作有两种:膨胀和腐蚀。膨胀使图像区域变大,可以实现小空间和缝隙的填充。腐蚀使图像区域变小,可以用来去掉图像菱角。膨胀和腐蚀两者没有互为逆运算,可以结合使用,对图像先膨胀再腐蚀,或者先腐蚀再膨胀。前一种运算称为闭运算,后一种称为开运算。两种运算在数学形态学中都很重要。闭运算可以弥补裂缝、填补孔洞,开运算可以去除毛刺和孤立小点,两种运算对物体的形状和位置不造成改变。本文中先用CCD相机拍摄照片,然后对照片进行闭运算和开运算,使轮廓平滑,没有毛刺和缺口。
2.1.2 利用中值滤波进行图像平滑处理
图像平滑处理多用于减少图像噪声,是数字图像处理技术的一种。对于在葡萄种植园中采集到的葡萄树干或者木桩的图片,由于场地等的原因,不可避免的存在许多噪声,进行平滑处理时最重要的是要保持葡萄树干或者木桩轮廓的清晰,还可以去除高频噪声,综合考虑,我们选择中值滤波。
中值滤波属于非线性滤波,它可以抑制图像噪声和脉冲干扰,保护图像,使图像的边缘不变模糊。也可以将图像的灰度信息保留的更多,提高对图像轮廓检测的质量[3]。
2.2 基于mean shift 的图像分割
mean shift 是通过迭代,运用非参数进行概率密度估算的方法。基于原理简单、参数少、不需要预处理等特点,mean shift 主要被运用在追踪目标、分割图像等方向[4]。使用mean shift 进行图像分割可以被当作特征空间聚类问题处理,因为被选取的空间的色彩、灰度、梯度不同,概率密度函数将会梯度上升,mean shift 沿着该方向找到局部最大值,可是将具特征类似的向量分割开来,归为一类。
2.3 边缘检测
边缘检测多是指检测图像中灰度或者亮度变化最大的部位,一般是指前景、背景的交界处,这些部位会导致数学算法模型中的一阶导数不连续,所以需要利用图像的阶梯函数,以此来求图像的边缘[5]。用的最多的方法有:Roberts 算子、Sobel 算子、Prewitt 算子和Canny 算子。
由于Canny 算子既用到了一阶导数,也用到了二阶导数,所以它的结果更加精确,因此本文运用Canny 算子对图像边缘进行检测。对于图像处理,先对原图进行灰度处理,然后通过Canny 算子就可以将图片中的物体轮廓较为精准的找出。
运用Canny 算子进行边缘检测,需要符合2个要求:①信噪比;②单位边缘响应。计算算子的零交叉点的平均距离,若该距离满足式①,则单位边缘只存在一个响应[6]。
3 图像处理试验及结果
本文利用OpenCV 提供的图像处理函数来对获得的靶标图像进行处理,先基于mean shift 进行图像分割,然后通过Canny 算子进行边缘检测,得到靶标外轮廓线,最后运用直线检测的方式来分析靶标的曲直,其工作流程如图1所示。
图1 工作流程图
计算技术与自动化2016年6月
第35卷第2期李梅竹等:基于OpenCV精准对靶施药系统视觉模块设计
3.1 基于mean shift 的图像结果
一般而言一副图像的特征点至少可以提取出5 维,即(x,y,r,g,b),众所周知,mean shift 经常用来寻找模态点,即密度最大的点。所以这里同样可以用它来寻找这5 维空间的模态点,由于不同的点最终会收敛到不同的峰值,所以这些点就形成了一类,这样就完成了图像分割的目的,有点聚类的意思在里面。
需要注意的是图像像素的变化范围和坐标的变化范围是不同的,所以在使用窗口对这些数据点进行模态检测时,需要使用不同的窗口半径。因此在OpenCV自带的mean shift分割函数pyrMeanShiftFiltering( )函数中,就专门有2个参数供选择空间搜索窗口半径和颜色窗口搜索半径的。 由函数名pyrMeanShiftFiltering可知,这里是将mean shift算法和图像金字塔相结合用来分割的,所以其参数列表中就有一个专门定义所需金字塔层数的变量。本次试验的主要过程是,首先设置好参数,然后用函数pyrMeanShiftFiltering( )对输入的图像进行分割。分割后的结果保存在该函数的第二个参数即输出图像中,最后根据该分割图像的特点用floodFill( )函数对其分割的结果用不同的颜色进行填充。试验中选取的树干原图如图2(a)、1(b)所示,图像分割后的结果如图3(a)、2(b)所示。endprint
3.2 边缘检测结果
对图像基于mean shift的图像分割后,采用Canny算子进行边缘检测。Canny算法的步骤是①降噪,任何边缘检测算法不可能在未经处理的原始数据上工作,第一步是对原始数据与高斯mask作卷积,得到的图像与原始图像相比有些轻微的模糊。②寻找图像中的亮度梯度。图像中的边缘可能会指向不同的方向,所以Canny算法使用了4个mask检测水平、数值以及对角线方向的边缘。③在图像中跟踪边缘。较高的亮度梯度比较有可能是边缘,但是没有一个确定的值来限定多大的亮度梯度是边缘,所以Canny使用了滞后阈值。上述过程完成可得到一个二值图像。通过Canny算子就可以将图片中树干的轮廓找出,其试验结果如图4所示。从图中可以看出采用OpenCV的Canny算子进行边缘检测可以较为完整的将前景区从背景区域中分离出来,得到比较理想的树干轮廓线,为进一步判断轮廓线的曲直打下基础。3.3 直线检测结果
OpenCV使用霍夫变换函数来进行直线检测。该变换利用点与线的对偶性,通过曲线表达形式,将空间中的曲线转变为一个点,于是,对于原图的曲线检测问题变为在参数空间内寻找峰值的问题。 具体的说,利用直线的参数方程ρ=xcosθ+ysinθ将(x,y)空间中的一个点变成了一条正弦曲线,如果若干个点在一条直线上,那么它们对应的正弦曲线也会交于同一个点。所以检测直线的问题,就转化为了判断交点峰值的问题。设置一个峰值,大于这个值,就判为直线。
需要注意以下几点:首先,HoughLines检测出来的不是线段,而是(ρ,θ)对,使用std vector
4 结束语
由于在实际葡萄园中,每隔几棵葡萄树就会立一根树桩拉着铁丝牵引葡萄藤,所以在施药时需要区分笔直的树桩和弯曲的葡萄树干。本文主要介绍了基于OpenCV的图像处理方法,并给出了对一棵弯曲的树和一棵笔直的树的基于mean shift的图像分割结果、边缘检测结果以及直线检测结果。实验结果证明该模块设计可有效的区别出葡萄园中弯曲的葡萄树干和笔直的树桩。
参考文献
[1] 于仕琪,刘瑞祯.OpenCV教程(基础篇)[M].北京:北京航空航天出版社,2007.
[2] 景晓军.图像处理技术及其应用[M].北京:国防工业出版社,2005.
[3] 刘慧英,王小波.基于OpenCV的车辆轮廓检测[J].科学技术与工程,2010(12): 2987-2991.
[4] SONG N, GU I Y H, CAO Z, et al. Enhanced spatial-range mean shift color image segmentation by using convergence frequency and position[C]//Prof. of 14th European Signal Processing Conference (EUSIPCO 2006), Florence, Italy. 2006.
[5] 阴国富.基于阈值法的图像分割技术[J].现代电子技术,2008,30(23):107-108.
[6] 马颂德,张正友.计算机视觉:计算理论与算法基础[M].北京:科学出版社,1998.