当前位置:   article > 正文

基于数字图像处理的杂草识别

杂草识别方法

一、课题介绍

杂草同农田作物争夺阳光和养分,严重影响了农作物的生长。为了达到除草的目的,人们开始喷洒大量的除草剂来进行除草。可是却忽略了除草剂的不当使用给人、畜以及环境造成的危害。本文从实际应用出发,设计了一个基于数字图像处理的杂草图像特征提取及识别设计方案。运行在参考了前人研究成果的基础上,不断将算法改进,找出适合于MATLAB杂草识别的可行性方法。本文对杂草图像的处理和识别方法进行研究。采集来的图像经常会有模糊现象的发生,对模糊图像的恢复处理做了大量的研究试验,得出维纳滤波具有较好的恢复效果;绿色植物和土壤背景的分割试验中,提出了一种基于彩色图像的二值化方法,可以不经过彩色图像灰度化就能够直接把绿色植物与土壤背景分割开,和以往的分割方法相比处理速度快,分割效果好,更加满足实时性;杂草和作物的分割主要研究了行间杂草和作物的分割,参考国内外资料,并进行研究试验,表明运用位置特征识别法有很好的分割效果,寻找作物中心行采用了简单快速的像素位置直方图法,采用了区域生长,和其他方法相比减少了重复操作,节省了时间,满足实时处理的要求;分割后的图像为只含有杂草的二值图像,通常会有一些残余的叶片和颗粒的噪声,通过形态学滤波或中值滤波去除噪声。

二、课题意义

杂草是生态系统中的一员,农田杂草是农业生态系统中的一个组成部分,它直接或间接的影响着农业生产,给经济作物带来很大的危害。杂草不仅与农作物争夺阳光、水分、肥料、还与作物争夺生存空间,不经过及时的处理,会阻碍作物生长,导致作物产量的下降,产品质量受损,甚至妨碍农作物收获,增加生产费用[1]。据统计,目前世界上共有杂草近5万种,农田杂草8000多种,而危害主要粮食作物的约有250多种。在我国,杂草分布区域也十分广泛,据我国农业植保总站近年调查发现,我国农田杂草约1500多种,其中给农作物造成严重危害的杂草有17种;危害范围较广、危害较严重的主要杂草有31种;地域性杂草有24种;一般不对农作物造成较严重危害的次要杂草有183种[2]。为了减轻草害,人们投入了大量的人力与物力。统计表明,美国每年因为杂草在64种农作物中造成的损失达75亿美元,而每年用于化学除草的费用高达36亿美元,用于机械和其它除草的费用达26亿美元[3]。我国用在除草上的劳动量也高达20-30亿个劳动日,即便如此,我国草害造成的粮食损失平均达13.4%,年损失粮食产量约17500kt[4]。人们为了减轻杂草对农作物的危害以及造成的经济损失,经常采用的几种除草方法包括机械除草、化学除草、人力除草、静电除草,还有生物除草等。人力除草由于浪费人力,效率又低,现在很少被使用;机械除草虽然效率较高,对环境污染小,但需消耗大量的动力,造成土壤压实,对下茬作物的生长不利;静电除草能除掉部分杂草,但可能造成作物烧伤,甚至影响土壤结构,降低土壤的生产能力;生物除草是从分子生物学角度进行研究,利用动物、昆虫、病菌等方法防除某些杂草,但还没有真正应用于生产。目前应用最广泛的除草方法是化学除草,化学除草是利用化学农药(除草剂)进行防除杂草的方法,其主要特点是高效、省工,尤其是可以免去繁重的田间除草劳动,解放田间的劳动力,正因为化学除草具有其他除草方法所不具备的优点而被广泛应用。但是,在人们大量的使用除草剂防治草害的同时,也产生了许多不良影响,如污染农副产品及破坏生态平衡。人们从化学除草所带来的负面影响,已深刻认识到单纯依赖化学防治和“地毯式”大量喷洒除草剂的错误做法[5]。因此,想到应该采取一些有利的措施,既能有效的消除草害,提高粮食作物的产量,又能保护好人们的生存环境,达到可持续发展的目的,这就使得科学工作者对杂草控制新方法的研究成为了必然。

针对这种情况,通过研究,我们利用图像处理技术来识别杂草并确定杂草的位置和类别,从而为作物田间精确喷洒除草剂的自动化作业提供理论与技术支持。

三、杂草识别的研究方法

主要有:颜色特征分析法、形状特征分析法、纹理特征分析法、光谱分析法和位置特征分析法与区域生长法。

1、颜色特征分析法

颜色特征分析法是用于杂草识别的重要方法。在大自然中,植物呈现绿色,土壤呈黄褐色,岩石和无生命的植物残渣呈淡黄色。根据植物和背景的颜色特征差异就可以将植物从复杂的土壤背景中分离出来。有些杂草的茎呈现褐色,根据杂草和作物的颜色差异能够将它们区分开。

2. 形状特征分析法

形状特征分析法是利用植物的叶片形状差异进行识别。基本形状特征包括面积、周长、长度和宽度等,根据这几个基状匹配函数来识别杂草种类,他们研究了3种草(筒麻、狐尾草和打碗花)和大豆苗在子叶生长期的形状。这种方法不受子叶的大小和方向的影响,但当叶子形状复杂和叶子数目较多时却无能为力。

3. 纹理特征分析法

纹理是由很多细小的单元构成,从整体上能反应某种规律性,其灰度分布表现出某种周期性。仔细观察,会发现植物的叶片有着不同的纹理。因而可以利用叶面的纹理信息来识别作物和杂草。用于特征提取的纹理特征为:共生矩阵、方向行灰度级能量、方向滤波掩模和分形维数、局部极值等。

4. 光谱分析的识别方法

光谱分析方法是根据物体对光的反射特性的不同,利用杂草、农作物和土壤背景的反射光谱的不同进行分析,达到识别杂草的目的。植物在生长过程中,由于植物叶面组织结构的不同,对一定波长的太阳光吸收和反射也有所不同,因此可利用这种特性来区分杂草、作物和土壤背景。

5. 位置分布特征法

位置分布特征法是基于作物的规律性种植提出的一种快速识别作物和行间杂草的方法。利用这种方法可以计算出杂草在田间分布的密度,对于条播作物除草具有广泛的研究意义和价值。H.J.Olsen 曾经采用纵向统计灰度值的方法,提取作物行信息,从而达到识别的目的。

6. 区域生长法

区域生长法是指将成组的像素或区域发展成更大区域的过程。从种子点的集合开始,从这些点的区域增长是通过将与每个种子点有相似属性像强度、灰度级、纹理颜色等的相邻像素合并到此区域。

四、课题研究的主要内容:

本课题以农作物为研究对象,以实现杂草的采集、处理、识别为目的,在总结前人研究成果的基础上,结合已有的杂草识别理论和方法,研究适合基于MATLAB数字图像处理的杂草实时处理与识别的方法,并在MATLAB平台上进行图像的采集、处理及识别测试。通过不同方法的对比实验,提高处理与识别速度,并为农田机器视觉的杂草识别提供良好的理论基础。

研究内容如下:

  1. 图像的采集;
  2. 杂草与背景分离的研究设计。分析颜色特征,然后依据颜色特征将彩色图像转化成灰度图像;然后利用阈值分割中的迭代运算进行了分离试验;
  3. 农作物与杂草分离的研究设计。利用农作物大部分杂草分布于作物之间的特点,采取区域生长法分离农作物与杂草;
  4. 得到的图像有明显的杂质,先将图像进行二值化,然后再通过形态学滤波法滤除杂质,得到结果。


五、运行效果图


v2-140bb576001057b46fa9a34f87282712_b.jpg


v2-358d4c4d5a52fb6f2c3b6e835c4ac468_b.jpg



v2-cf153d096540583d0e3c9f45b9b0b88d_b.jpg


v2-66685afe04b3d0a665df895bda194739_b.jpg

六、参考代码

灰度化及阈值分割

Cao=double(imread('li.jpg')); % 读入图像

r=Cao(:,:,1);g=Cao(:,:,2);b=Cao(:,:,3);%分析颜色特征

Caogray=(2*g-r-b); %依据颜色特征将彩色图像转化为灰度图像

% Caogray=g;%求出图像大小

[x,y]=size(Caogray);

I=double(Caogray);

SII=I;

for i=1:x %实际图像灰度为0-255

for j=1:y

if(I(i,j)>180)

I(i,j)=255;

end

if(I(i,j)<100)

I(i,j)=0;

end

end

end

z0=max(max(Caogray));%求出图像最大灰度

z1=min(min(Caogray));%求出图像最小灰度

T=(z0+z1)/2;

TT=0;

S0=0;n0=0;

S1=0;n1=0;

allow=0.2; %新旧阈值接近情况

d=abs(T-TT);

count=0;%记录计次循环

while(d>=allow)%迭代阈值最佳分割算法

count=count+1;

for i=1:x

for j=1:y

if(Caogray(i,j)>=T)

S0=S0+Caogray(i,j);

n0=n0+1;

end

if(Caogray(i,j)<T)

S1=S1+Caogray(i,j);

n1=n1+1;

end

end

end

T0=S0/n0;

T1=S1/n1;

TT=(T0+T1)/2;

d=abs(T-TT);

T=TT;

end

Seg=zeros(x,y);

for i=1:x

for j=1:y

if(Caogray(i,j)>=T)

Seg(i,j)=1;%阈值分割图像

end

end

end

for i=1:x

for j=1:y

if(SI(i,j)==0)

SII(i,j)=1;

end

if(SI(i,j)==1)

SII(i,j)=0;

end

end

end

SI=1-Seg;figure,imshow(SII);


区域生长法分割杂草和作物

A0=imread('图片2.png');%读取图像

seed=[1,2];%选择起始位置

thresh=31;%相似性选择阈值

A=rgb2gray(A0);%灰度化

A=imadjust(A,[min(min(double(A)))/255,max(max(double(A)))/255],[]);

A=double(A);%将图像灰度化

B=A;

[r,c]=size(B);%r为行数,c为列

n=r*c;%计算图像包含点的个数

pixel_seed=A(seed(1),seed(2));%原图起始点灰度值

q=[seed(1),seed(2)];%q用来装载起始位置

top=1;%循环判断flag

M=zeros(r,c);%建立一个与原图大小一样的矩阵

M(seed(1),seed(2))=1;%将起始点赋为1,其余为0

count=1;%计数器

while top~=0 %循环结束条件

r1=q(1,1);%起始点行位置

c1=q(1,2);%起始点列位置

p=A(r1,c1);%起始点灰度值

dge=0;

for i=-1:1%周围点循环判断

for j=-1:1

if r1+i<=r & r1+i>0 & c1+j<=c & c1+j>0%保证在点周围范围内

if abs(A(r1+i,c1+j)-p)<=thresh & M(r1+i,c1+j)~=1

top=top+1;%满足判定条件则top+1,top为多少,则q的行数有多少

q(top,:)=[r1+i,c1+j];%将满足判定条件的周围点位置赋予q,q记载了满足判定的每一外点

M(r1+i,c1+j)=1;%满足判定条件将M中相对应的点赋1

count=count+1;%统计满足条件的点个数,其实与top此时的值一样

B(r1+i,c1+j)=1;%满足判定条件将B中相对应点赋值1

end

if M(r1+i,c1+j)==0;%如果M中相对应的值为0,将dge赋值为1,也就是说这几个点不满足条件

dge=1;

end

else

dge=1;%在图像外将dge赋值为1

end

end

end

%此时对周围几点判断完毕,在点在图像外或不满足判定条件则将dge赋为1,满足条件dge为0

if dge~=1

B(r1,c1)=A(seed(1),seed(2));%将原图起始位置赋予B

end

if count>=n%如果满足判定条件的点个数大于等于n

top=1;

end

q=q(2:top,:);

top=top-1;

end


subplot(121),imshow(B,[]);


二值化及形态学滤波

Image1=im2double(imread('li3.png'));

T=graythresh(Image1);

BW=im2bw(Image1,T);

figure,imshow(BW),title('二值化图像');

SE=strel('square',3);

Morph=imopen(BW,SE);

Morph=imclose(Morph,SE);

figure,imshow(Morph),title('形态学滤波');

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/140350
推荐阅读
相关标签
  

闽ICP备14008679号