农业机器人自主导航技术得到了国内外学者的广泛研究和关注,目前主要使用的导航方法有卫星导航、惯性导航、机器视觉导航等。基于机器视觉的导航方法[1],由于具有很强的适应能力,并且能够充分利用农田图像中的信息,目前逐渐成为广大科研人员研究的热点[2]。导航线检测是视觉导航的先决条件,农业机器人在农田中作业时,利用视觉导航系统来识别出导航线,再根据自身的位置和导航线之间的偏差位移和偏差角,就可以通过转向机构来跟踪它期望的行进路线[3]。
目前,国内外科研人员已经对农田图像的导航线提取技术进行了广泛和深入的研究。Reid[4]在1986年提出了利用霍夫变换检测导航线的方法,并验证成功。Chen[5]通过对霍夫变换算法的改进,实现了插秧机器人在农田中作业时对导航线的检测。张志斌[6]使用霍夫变换和Fisher准则相结合的导航线检测算法进行农田导航线检测。袁左云[7]提出了利用垂直投影法进行农作物行的检测,该方法能够准确得到作物的行中心线。周俊[8]对基于区域的导航路径的检测方法和基于边缘的导航路径的检测方法进行研究。
1 农田图像预处理本文在Windows操作系统环境下使用MATLAB[9]和Visual studio 2013+OpenCV[10]完成算法的研究和实验。对农田图像进行预处理的步骤为:颜色空间的选取[11]、图像灰度化、图像增强[12]、图像滤波、图像分割和形态学滤波。本文选择在RGB颜色空间采用2g-r-b算子对农田图像进行灰度化[13]。采用直方图均衡化对灰度化后的农田图像进行增强,选择改进后的自适应中值滤波算法进行滤波[14],利用Otsu算法进行图像分割[15],使用先闭后开操作对分割后的图像进行形态学滤波[16],进行这些操作后的农田图像如图1所示。
Download:
|
|
一幅农田图像中同时会存在很多农作物列,在进行导航线提取前首先要统计出图像中的农作物的列数和农作物列的边缘信息。使用基于图像灰度的垂直投影法可以用来检测农田图像中农作物的列数和农作物列的边缘信息[17]。
假设在一幅大小为
$C(j + 1), \; j = 1,2, \cdots ,m$ | (1) |
$A = \frac{1}{M}\sum\limits_{j = 1}^M {c(j)} ,j = 1,2, \cdots ,m$ | (2) |
农田图像中作物作列检测算法的运算过程如下:
1)将整幅图像横向等分成K份(取K=8),取第K份的图像为进行运算的图像。
2)计算图像内各列像素之和
3)从左往右比较
4)如果
5)用
6)令
本文对灰度垂直投影法做了如下优化,使其更适合用来检测农作物列及其边界信息。
1)因为经过步骤3)处理后
2)将找到的边界列存入vector<int>b容器中,该容器中元素的数量n有两种情况:偶数或者奇数。当n为偶数时,n/2即为农作物的列数且从容器的第一个元素起的每两个元素就是一个列的左右边界;当n为奇数时,则表明容器中第一个元素为第一个农作物列的右边界,其后的每相邻两个元素为农作物列的左右边界,n/2+1即为农作物的列数。
改进后算法的步骤为:
1)读取分割后的图像并确定运算区域,设src为图像文件,roi为用于作物列检测的区域;
2)求运算区域中各列的像素和并存入容器C中,求出所有列的像素和的平均值a;
3)对列和数据进行处理,从左向右比较C[i]和a,若C[i]>=a则令C[i]=a,否则令C[j]=0;
4)判断图像中各列是否为农作物列的边界,从左向右比较C[i]的左侧元素C[i−1]和右侧元素C[i+1],当C[i−1]与C[i+1]不相等时,则可判断第i列为作物列的边界,将其存入容器b中;
5)寻找有效边界并求出农作物的列数,设n为容器b中元素的个数,当n奇数时,表明作物列起始于图像的左边缘,此时应将0存入容器y中,表明图像中的第1列是第一个农作物列的左边界;当n为偶数时,表明容器b中的元素均为有效边界信息。因为农田中的杂草等因素的影响会导致假作物列的出现,此时需要对边界信息就行筛选。设定农作物列的最短宽度为图像宽度的二十分之一,即
图2是二值化后的农田图像,图3是截取后的检测区域,图4为检测结果。在图4中横坐标是列信息,纵坐标为对应列中像素值的和,图中的横向的虚线为投影区域内的像素平均灰度值,下方区域为满足条件的作物列,我们可以看到图中明显有3条作物列满足条件,其中边界数据为0、26、87、148、221和275。
Download:
|
|
Download:
|
|
Download:
|
|
霍夫变换[18]是最常用的导航线检测算法,但存在计算量大、空间复杂度高、准确度低等缺点[19]。本文对过已知点的导航线检测算法进行研究,该算法的核心思想是缩小投票范围,将算法的投票范围从整幅图像上的有效像素点缩小到几个已知点,这样就可以有效地减少算法的运算量,从而达到提高运算速度、降低运行时间的目的。
过已知点的直线检测算法的思想是:设斜率为
$y - {y_0} = m\left( {x - {x_0}} \right)$ | (3) |
定义区域内目标像素
${m_i} = \frac{{{y_i} - {y_0}}}{{{x_i} - {x_0}}}$ | (4) |
创建一个累加器,用来存储相应斜率值的累积次数。在目标区域内对像素点进行扫描,求取该像素点和已知点所组成直线的斜率值,根据该值将对应的累加器值加1。扫描结束后,对累加器的值进行统计,找到值最大的累加器所对应的斜率,该斜率就是所求的直线斜率。在实际的运算过程中,当
过已知点的直线检测算法的运算过程如下:
1)设定要进行检测的斜率区间,并将其进行10等分,对每个子区间设置对应的累加器
2)对图像进行扫描,当扫描到的像素点为目标像素点时,用式(4)~(6)计算目标像素点和已知点之间所成直线的斜率
3)扫描结束后,重新设置对图像进行扫描的斜率区间,该区间为值最大的累加器所对应的区间加上和它相邻的两个区间。回到步骤1)重新进行运算,直到10等分后的子区间宽度满足精度要求时停止计算。例如将精度设定为0.05,当10等分后的子区间宽度小于或等于0.05时,就可以选择累加器值最大值所对应的区间为的中值作为直线的斜率。
4)根据斜率和已知点坐标确定直线方程。
3.2 已知点的获取算法只有先确定出导航线上已知点的坐标,才能利用过已知点的直线检测法进行导航线检测。在实际操作过程中一般选择容易获取的特征点为已知点,本文确定已知点方法是利用本文第2节中检测到的农作物列的边缘信息,这些信息存储在容器y中。设检测到的作物列数为m,检测区域的大小为
$\left\{ \begin{aligned}& {x_i} = \frac{{y[i] + y[i + 1]}}{2}\\& {y_i} = {h_0} - \frac{h}{2}\end{aligned} \right.$ | (5) |
式中i=0, 1, …, m−1,这样就可得到用于导航线检测的已知点的坐标。将检测到的已知点绘制到二值图像中,效果如图5所示。
Download:
|
|
在对农田图像进行导航线检测时,是有可能检测到垂直于
本文根据农田图像中导航线的特点,将图像旋转后再进行检测,这样就可以有效避免无穷斜率值的出现。图6所示为原始图像坐标系的示意图,假设
Download:
|
|
Download:
|
|
设旋转前已知点
$\left\{ \begin{aligned}& {x_0}^\prime = N - {y_0}\\& {y_0}^\prime = {x_0}\end{aligned} \right.$ | (6) |
由式(6)就可以求的旋转后已知点的坐标,然后再利用过已知点的霍夫变换进行直线检测。
过已知点的导航线检测算法直接采用斜率值作为投票区间,虽然斜率区间是均匀划分的,但每个区间在图像中所对应的区域却不是均匀的。本文采用角度值对检测区间进行划分,这样一方面可以使区间更加均匀,另一方面也便于检测精度的确定,可以使最终得到的直线斜率更加准确。
改进后过已知点导航线检测算法的步骤如下:
1)将图像顺时针旋转90°;
2)根据式(6)重新计算已知点坐标;
3)设置扫描用角度区间为
$d = \frac{{{m_2} - {m_1}}}{{10}}$ | (7) |
4)设置累加器数组
5)从左到右从上到下扫描图像,利用式(4)计算斜率值m,并判断arctan(m)属于哪个区间并将此区间对应累加器加1;
6)对图像扫描结束后,重新设置扫描角度区间,该区间为值最大的累加器所对应的区间加上和它相邻的两个区间,回步骤3)重新计算,直到满足
7)根据斜率值和已知点确定导航线的方程;
8)在图像上绘制出直线方程后,将图像逆时针旋转90°。
应用经过改进的过已知点的导航线检测算法处理后的图像如图8所示。
Download:
|
|
通过实验可以看出,使用改进后的算法进行导航线检测,检测结果会和有效农作物列的列数相联系,因此在一幅图像中会有多条导航线。我们可以在随后的导航操作中选择其中的一条对机器人的行进方向进行引导。
5 结论1)本文对基于灰度垂直投影法的农作物行检测算法进行改进,使其更适合对农作物的行数和边缘信息进行检测。
2)对过已知点的导航线检测算法进行改进,有效克服了原算法中存在的缺陷,准确检测到图像中的导航线。
3)使用本文研究的农田图像导航线检测方法可以快速、准确地检测出导航线,为农业机器人提供导航参考。
[1] | 李勇, 丁伟利. 基于暗原色的农机具视觉导航线提取算法[J]. 光学学报, 2015, 35(2): 221-228. (0) |
[2] | 姬长英, 周俊. 农业机械导航技术发展分析[J]. 农业机械学报, 2014, 45(9): 44-54. DOI:10.6041/j.issn.1000-1298.2014.09.008 (0) |
[3] | 刁智华, 王会丹, 宋寅卯. 基于机器视觉的农田机械导航线提取算法研究[J]. 农机化研究, 2015, 37(2): 35-39, 45. (0) |
[4] | REID JF, ZHANG Q, NOGUCHI N, et al. Agricultural automatic guidance research in North America[J]. Computers and electronics in agriculture, 2000, 25(1/2): 155-167. (0) |
[5] | CHEN BQ, WATANABE K, TOJO S, et al. Studies on the compute-eye of rice transplant robot (Part 2): Detection of rice plants line using hough transformation[J]. Journal of jsam, 1997, 59(3): 23-28. (0) |
[6] | 张志斌, 罗锡文, 周学成, 等. 基于Hough变换和Fisher准则的垄线识别算法[J]. 中国图象图形学报, 2007, 12(12): 2164-2168. (0) |
[7] | 袁佐云, 毛志怀, 魏青. 基于计算机视觉的作物行定位技术[J]. 中国农业大学学报, 2005, 10(3): 69-72. (0) |
[8] | 周俊, 姬英, 刘成良. 农用轮式移动机器人视觉导航系统[J]. 农业机械学报, 2005, 36(3): 90-94. (0) |
[9] | 丁伟雄. MATLAB R2015a数字图像处理[M]. 北京: 清华大学出版社, 2016. (0) |
[10] | 朱伟, 赵春光, 欧乐庆, 等. OpenCV图像处理编程实例[M]. 北京: 电子工业出版社, 2016. (0) |
[11] | 刘琼, 史诺. 基于Lab和YUV颜色空间的农田图像分割方法[J]. 国外电子测量技术, 2015, 34(4): 39-41, 59. (0) |
[12] | 顾明, 郑林涛, 尤政. 基于颜色空间转换的交通图像增强算法[J]. 仪器仪表学报, 2015, 36(8): 1901-1907. (0) |
[13] | 李谦, 蔡晓华. 机器视觉在除草机器人中的应用[J]. 农机化研究, 2014, 36(7): 204-206, 231. (0) |
[14] | 王晓凯, 李锋. 改进的自适应中值滤波[J]. 计算机工程与应用, 2010, 46(3): 175-176, 218. (0) |
[15] | 乔爽, 吴金波. 改进的Otsu算法在缺陷检测中的应用[J]. 机械与电子, 2016, 24(7): 71-74. (0) |
[16] | 陆广地. 基于改进数学形态学滤波的农产品图像处理[J]. 江苏农业科学, 2015, 43(1): 402-404. (0) |
[17] | 孟庆宽, 刘刚, 张漫, 等. 基于线性相关系数约束的作物行中心线检测方法[J]. 农业机械学报, 2014, 44(S1): 216-223. (0) |
[18] | 张勇红. 基于霍夫变换的铭牌OCR图像旋转矫正方法[J]. 电测与仪表, 2015, 52(8): 125-128. (0) |
[19] | 马红霞, 马明建, 马娜, 等. 基于Hough变换的农业机械视觉导航基准线识别[J]. 农机化研究, 2013, 35(4): 37-39, 43. (0) |
[20] | 陈兵旗. 机器视觉技术及应用实例详解[M]. 北京: 化学工业出版社, 2014: 63. (0) |