«上一篇
文章快速检索     高级检索
下一篇»
  应用科技  2018, Vol. 45 Issue (2): 65-69  DOI: 10.11991/yykj.201703007
0

引用本文  

闫保中, 王强军. 农田图像导航线检测技术研究[J]. 应用科技, 2018, 45(2): 65-69. DOI: 10.11991/yykj.201703007.
YAN Baozhong, WANG Qiangjun. Research on detection technology of the navigation line of farmland image[J]. Applied Science and Technology, 2018, 45(2): 65-69. DOI: 10.11991/yykj.201703007.

通信作者

王强军,E-mail: wangqiangjun163@163.com

作者简介

闫保中(1963-),男,研究员,硕士生导师;
王强军(1982-),男,硕士研究生

文章历史

收稿日期:2017-03-14
网络出版日期:2014-07-04
农田图像导航线检测技术研究
闫保中, 王强军    
哈尔滨工程大学 自动化学院,黑龙江 哈尔滨 150001
摘要:为了检测到农田图像中的导航线,在RGB颜色空间中使用2g-r-b灰度化算子对农田图像进行灰度化,采用改进的自适应中值滤波算法进行农田图像滤波,采用Otsu阈值分割法方法对农田图像进行分割。改进了灰度垂直扫描算法,使该方法更适合用来检测农作物的列数和农作物列的边缘信息。在获取农作物的列数和农作物列的边缘信息的基础上,使用列的边缘信息来获取导航线的定位点。在对过已知点的直线检测算法深入研究的基础上,分析了该算法的不足之处,并对其进行改进,有效克服了原算法中存在的缺陷,使其能准确提取到图像中的导航线。
关键词农田图像处理    Otsu    已知点    导航线检测    图像灰度化    图像分割    列信息检测    直线检测    OpenCV    
Research on detection technology of the navigation line of farmland image
YAN Baozhong, WANG Qiangjun    
College of Automation, Harbin Engineering University, Harbin 150001, China
Abstract: In order to detect the navigation line in the farmland image, the 2g-r-b grayscale operator was used to gray the farmland image in the RGB color space. The improved adaptive median filter algorithm was used to filter the farmland image and the farm image was segmented by Otsu threshold segmentation method. In this paper, the algorithm of vertical scanning for gray level was improved, the improved method becomes more suitable for the detection of the number of columns and the edge information of crop, the edge information of the column was used to obtain the anchor point of the navigation line. On the basis of deep research on line detection algorithm for known points, the shortcomings of the algorithm were analyzed and improved, the defects of the original algorithm were effectively overcome and the navigation line in the image can be accurately extracted.
Key words: processing farmland image    Otsu    known point    detection of navigation line    Grayscale image    image segmentation    detection of column information    line detection    OpenCV    

农业机器人自主导航技术得到了国内外学者的广泛研究和关注,目前主要使用的导航方法有卫星导航、惯性导航、机器视觉导航等。基于机器视觉的导航方法[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:
图 1 农田图像预处理
2 农作物列信息获取

一幅农田图像中同时会存在很多农作物列,在进行导航线提取前首先要统计出图像中的农作物的列数和农作物列的边缘信息。使用基于图像灰度的垂直投影法可以用来检测农田图像中农作物的列数和农作物列的边缘信息[17]

假设在一幅大小为 $M \times N$ 的农田图像中,设图像中 $(i,j)$ 位置处的像素值为 $I(i,j)$ ,第j列所有像素值的和为 $C(j)$ ,图像中各列的灰度平均值为AR为作物行的最小宽度,则式(1)和(2)成立。

$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)计算图像内各列像素之和 $C(j)$ 和图像中各列的平均灰度值A,同时建立二维数组S用来存储作物列数信息和位置信息,设行数m=0。

3)从左往右比较 $C(j)$ A,当 $C(j) > A$ 时,令 $C(j) = A$ ,否则令 $C(j) = 0$

4)如果 $C(j) \geqslant C(j - 1)$ ,则令 $S[m][0] = j$ ,用来表示作物列的左侧边缘;若 $C(j) < C(j - 1)$ ,则令 $S[m][1] = j$ ,表示农作物列的右边缘。

5)用 $d = S[m][1] - S[m][0]$ 计算农作物列左右边缘的差值,如果 $d \geqslant R$ ,则两个边缘间为的作物列有效;若 $d < R$ ,则为无效的作物列,将相关信息删除。

6)令 $m = m + 1$ ,重复步骤3)~5),直到 $J = M$ 停止。

本文对灰度垂直投影法做了如下优化,使其更适合用来检测农作物列及其边界信息。

1)因为经过步骤3)处理后 $C(j)$ 中的数据已经是规范化后的数据,其值只能是A或0,本文利用这一特点对确定边界的算法进行了改进,其原理为:假设边界列为 $C(j)$ ,则其两边的列为 $C(j - 1)$ $C(j + 1)$ ,若 $C(j - 1) \ne C(j + 1)$ 则可判断 $C(j)$ 为边界列。

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中的元素均为有效边界信息。因为农田中的杂草等因素的影响会导致假作物列的出现,此时需要对边界信息就行筛选。设定农作物列的最短宽度为图像宽度的二十分之一,即 $w/20$ ,此时就可以通过对容器y中相邻两个元素的差值与最小列宽进行比较,去除掉假的农作物列。容器y中最后剩余元素的个数的二分之一就是图像中用于进行导航线检测的农作物列数。

图2是二值化后的农田图像,图3是截取后的检测区域,图4为检测结果。在图4中横坐标是列信息,纵坐标为对应列中像素值的和,图中的横向的虚线为投影区域内的像素平均灰度值,下方区域为满足条件的作物列,我们可以看到图中明显有3条作物列满足条件,其中边界数据为0、26、87、148、221和275。

Download:
图 2 分割后的农田图像
Download:
图 3 进行列数检测的区域
Download:
图 4 检测结果
3 过已知点的导航线检测算法原理分析 3.1 原理分析

霍夫变换[18]是最常用的导航线检测算法,但存在计算量大、空间复杂度高、准确度低等缺点[19]。本文对过已知点的导航线检测算法进行研究,该算法的核心思想是缩小投票范围,将算法的投票范围从整幅图像上的有效像素点缩小到几个已知点,这样就可以有效地减少算法的运算量,从而达到提高运算速度、降低运行时间的目的。

过已知点的直线检测算法的思想是:设斜率为 $m$ 的直线上已知点 ${P_0}$ 的坐标为 $({x_0},{y_0})$ [20],则该直线方程为

$y - {y_0} = m\left( {x - {x_0}} \right)$ (3)

定义区域内目标像素 ${P_i}$ 的坐标是 $({x_i},{y_i})$ ,则由 ${P_i}$ 点与 ${P_0}$ 构成的直线的斜率 ${m_i}$

${m_i} = \frac{{{y_i} - {y_0}}}{{{x_i} - {x_0}}}$ (4)

创建一个累加器,用来存储相应斜率值的累积次数。在目标区域内对像素点进行扫描,求取该像素点和已知点所组成直线的斜率值,根据该值将对应的累加器值加1。扫描结束后,对累加器的值进行统计,找到值最大的累加器所对应的斜率,该斜率就是所求的直线斜率。在实际的运算过程中,当 ${x_i} = {x_0}$ 时式(4)将无法成立,通常的方法是通过将 ${m_i}$ 设置为固定值并限定 ${m_i}$ 的区域。

过已知点的直线检测算法的运算过程如下:

1)设定要进行检测的斜率区间,并将其进行10等分,对每个子区间设置对应的累加器 ${A_i}$ ,将初始值设置为0。

2)对图像进行扫描,当扫描到的像素点为目标像素点时,用式(4)~(6)计算目标像素点和已知点之间所成直线的斜率 $m$ ,并将 $m$ 对应的累加器的值加1。

3)扫描结束后,重新设置对图像进行扫描的斜率区间,该区间为值最大的累加器所对应的区间加上和它相邻的两个区间。回到步骤1)重新进行运算,直到10等分后的子区间宽度满足精度要求时停止计算。例如将精度设定为0.05,当10等分后的子区间宽度小于或等于0.05时,就可以选择累加器值最大值所对应的区间为的中值作为直线的斜率。

4)根据斜率和已知点坐标确定直线方程。

3.2 已知点的获取算法

只有先确定出导航线上已知点的坐标,才能利用过已知点的直线检测法进行导航线检测。在实际操作过程中一般选择容易获取的特征点为已知点,本文确定已知点方法是利用本文第2节中检测到的农作物列的边缘信息,这些信息存储在容器y中。设检测到的作物列数为m,检测区域的大小为 $w \times h$ ,原始图像的大小为 $w \times {h_0}$ ,则第i个已知点的坐标可用式(5)求得:

$\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:
图 5 确定已知点后的图像
4 过已知点的导航线检测算法的改进和优化

在对农田图像进行导航线检测时,是有可能检测到垂直于 $x$ 轴的直线的,所以我们要采用特殊的方法应对 ${x_i} = {x_0}$ 的情况的发生。通常的解决方法是:当出现 ${x_i} = {x_0}$ 时,将斜率设定为固定值,但这种方法不能对斜率为无穷和斜率为该固定值时这两种情况进行区分。

本文根据农田图像中导航线的特点,将图像旋转后再进行检测,这样就可以有效避免无穷斜率值的出现。图6所示为原始图像坐标系的示意图,假设 ${l_1}$ ${l_4}$ 为导航线,这些导航线垂直于 $x$ 轴,此时使用过已知点的霍夫变换进行导航线检测,斜率的范围不便于确定。若将图像向右旋转90°,则如图7所示,此时 ${l_3}$ 的斜率为0, ${l_1}$ ${l_2}$ ${l_4}$ 的斜率都在[−1, 1]间,这样就能避免出现垂直于 $x$ 轴的导航线。所以本文先将图像顺时针旋转 ${90^ \circ }$ 以后,再进行基于已知点的导航线检测。

Download:
图 6 原始图像导航线示意
Download:
图 7 向右旋转90°后的导航线示意

设旋转前已知点 ${P_0}$ 的坐标为 $({x_0},{y_0})$ ,图像的尺寸为 $M \times N$ ,则旋转后图像的尺寸变为 $N \times M$ ,已知点 ${P_0}$ 的坐标为 $({x_0}^\prime ,{y_0}^\prime )$ ,则有

$\left\{ \begin{aligned}& {x_0}^\prime = N - {y_0}\\& {y_0}^\prime = {x_0}\end{aligned} \right.$ (6)

由式(6)就可以求的旋转后已知点的坐标,然后再利用过已知点的霍夫变换进行直线检测。

过已知点的导航线检测算法直接采用斜率值作为投票区间,虽然斜率区间是均匀划分的,但每个区间在图像中所对应的区域却不是均匀的。本文采用角度值对检测区间进行划分,这样一方面可以使区间更加均匀,另一方面也便于检测精度的确定,可以使最终得到的直线斜率更加准确。

改进后过已知点导航线检测算法的步骤如下:

1)将图像顺时针旋转90°;

2)根据式(6)重新计算已知点坐标;

3)设置扫描用角度区间为 $[{m_1},{m_2}]$ ,扫描精度为r,并将区间分为10份,根据式(7)计算区间宽度d,本文设 ${m_1} = - {{\pi }}/5$ ${m_2} = {{\pi }}/5$ $r = {{\pi }}/2 \;000$

$d = \frac{{{m_2} - {m_1}}}{{10}}$ (7)

4)设置累加器数组 ${A_{cc}}[10]$ ,并将元素初始化为0;

5)从左到右从上到下扫描图像,利用式(4)计算斜率值m,并判断arctan(m)属于哪个区间并将此区间对应累加器加1;

6)对图像扫描结束后,重新设置扫描角度区间,该区间为值最大的累加器所对应的区间加上和它相邻的两个区间,回步骤3)重新计算,直到满足 $d \leqslant r$ 时终止,取此时最大值所对应区间的中值为斜率对应的角度值;

7)根据斜率值和已知点确定导航线的方程;

8)在图像上绘制出直线方程后,将图像逆时针旋转90°。

应用经过改进的过已知点的导航线检测算法处理后的图像如图8所示。

Download:
图 8 导航线检测效果

通过实验可以看出,使用改进后的算法进行导航线检测,检测结果会和有效农作物列的列数相联系,因此在一幅图像中会有多条导航线。我们可以在随后的导航操作中选择其中的一条对机器人的行进方向进行引导。

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)