作物叶片病害识别系统

简介: 作物叶片病害识别系统

介绍

  • 由于植物疾病的检测在农业领域中起着重要作用,因为植物疾病是相当自然的现象。

  • 如果在这个领域不采取适当的护理措施,就会对植物产生严重影响,进而影响相关产品的质量、数量或产量。植物疾病会引起疾病的周期性爆发,导致大规模死亡。这些问题需要在初期解决,以挽救人们的生命和金钱。


  • 自动检测植物疾病是一个重要的研究课题,因为它可以在植物叶片上出现病征时在非常早期就监测到大面积的农作物,从而检测疾病的症状。


  • 农田业主和植物护理者(比如,在苗圃中)可以通过早期检测疾病获得很大的好处,以防止更糟糕的情况发生在他们的植物上,并让人类知道应该预先做什么来使其按照预期工作,以防止更糟糕的情况发生在他身上。


目的

  • 这使机器视觉能够提供基于图像的自动检验和过程控制。
  • 相比之下,视觉识别是劳动密集型的、不太准确的,只能在小范围内进行。该项目涉及使用Python设计的自我设计的图像处理算法和技术,以从叶片中分割出疾病,并使用机器学习的概念对植物叶片进行分类,以健康或感染状态。
  • 通过这种方法,植物疾病可以在初期阶段被识别出来,可以使用害虫和感染控制工具来解决害虫问题,同时最小化对人和环境的风险。


步骤

在初始步骤中,选择了所有叶样本的RGB图像。所提出系统的步骤

  • RGB图像采集;
  • 将输入图像从RGB格式转换为HSI格式;
  • 遮蔽绿色像素;
  • 去除遮蔽的绿色像素;
  • 分割组件;
  • 获取有用的片段;
  • 评估分类的特征参数;
  • 为疾病检测配置SVM。
  • 颜色转换:
    HSI(色调、饱和度、强度)颜色模型是一种流行的颜色模型,因为它基于人的感知。转换后,仅考虑HSI颜色空间的H(色调)分量,因为它为我们提供所需的信息。
  • 遮蔽绿色像素: 这是因为绿色像素代表叶片的健康区域。根据指定的阈值值遮蔽绿色像素。

分割:

通过将受感染部分与其他类似颜色的部分(如看起来像疾病的棕色叶子分支)分割出叶子的感染部分,这些部分在遮蔽图像中被考虑在内,并被过滤。所有进一步的图像处理都是在此阶段定义的感兴趣区域(ROI)上进行的。


分类:

从之前的结果中,我们分析和评估诸如叶片面积、叶片感染百分比、叶子周长等特征参数,以及所有叶片图像的SVM分类器。

安装

cd file

安装一些所需的pip包,这些包在requirements.txt文件中指定。

pip3 install -r requirements.txt
sudo python3 setup.py install


就是这样。您已准备好测试应用程序了。

数据集创建

在叶采样器目录中运行:

python3 leafdetectionALLsametype.py -i .

python3 leafdetectionALLmix.py -i .
leafdetectionALLsametype.py


原图

用于在一个相同类别的图像(例如所有图像都感染了)上运行,而leafdetectionALLmix.py 用于为叶子图像的两个类别(感染/健康)创建数据集。请注意:代码设置为仅运行在指定目录中存在的.jpg、.jpeg 和 .png 文件格式图像上。如果您希望,可以通过将其引入两个文件的第52行的条件语句中来添加更多文件格式支持。

检测结果图

#代码 运行

运行以下代码:

python3 GUIdriver.py

其中{浏览}用于选择分类器的输入图像文件。

该代码运行两个文件:

首先,main.py用于图像分割和特征提取。

其次,main.py调用classifier.py对输入图像中的叶子进行分类,以确定其是否“感染”或“健康”。

重要代码

# 企鹅1309399183
while True: 
  if  n == ord('y'or'Y'):
    
    fieldnames = ['fold num', 'imgid', 'feature1', 'feature2', 'feature3']
    
    print ('Appending to ' + str(filename)+ '...')
    
    
    try:
      log = pd.read_csv(filename)
      logfn = int(log.tail(1)['fold num'])
      foldnum = (logfn+1)%10
      L = [str(foldnum), imgid, str(Tarea), str(Infarea), str(perimeter)]
      my_df = pd.DataFrame([L])
      my_df.to_csv(filename, mode='a', index=False, header=False)     
      print ('\nFile ' + str(filename)+ ' updated!' )
        

    except IOError:
      if directory not in os.listdir():
        os.system('mkdir ' + directory)

      foldnum = 0
      L = [str(foldnum), imgid, str(Tarea), str(Infarea), str(perimeter)]

      my_df = pd.DataFrame([fieldnames, L])
      my_df.to_csv(filename, index=False, header=False)
      print ('\nFile ' + str(filename)+ ' updated!' )
      
    finally:
      import classifier
      endprogram()

      
  elif n == ord('n' or 'N') :
    print ('File not updated! \nSuccessfully terminated!')
    break
  
  else:
    print ('invalid input!')
    break
相关文章
|
7月前
|
传感器 机器学习/深度学习 算法
植保机器人避障与地形适应
植保机器人避障与地形适应
72 2
|
编解码 前端开发
【核磁共振成像】临床基本通用脉冲序列(一)
【核磁共振成像】临床基本通用脉冲序列
|
存储 内存技术
【核磁共振成像】临床基本通用脉冲序列(二)
【核磁共振成像】临床基本通用脉冲序列
|
自动驾驶
【无人车】无人驾驶地面车辆避障研究(Matlab代码实现)
【无人车】无人驾驶地面车辆避障研究(Matlab代码实现)
100 0
|
传感器 安全
红外雨量计(光学雨量传感器)在船舶航行中的应用
红外雨量计是一种能够测量降雨量的仪器,其原理是通过红外线感应雨滴的存在,从而计算出降雨量。在船舶航行中,红外雨量计可以被用于以下情况:
红外雨量计(光学雨量传感器)在船舶航行中的应用
|
人工智能 自动驾驶 安全
无人车驾驶地面避障(Matlab代码实现)
无人车驾驶地面避障(Matlab代码实现)
150 0
|
传感器 存储 算法
关于光学雨量计降雨测量误差
IFR02 是通过红外光扫描原理非接触式检测降雨量的传感器(光学雨量计)。使用独特的智能学习适应算法, 可在复杂光环境中使用,具有很强的抗外部干扰能力。采用渐变脉宽调制与动态比例校正技术有利保障数据稳定性与材料老化导光性能下降的不利影响。内建 4 种雨型,可识别冲刷型、密集型、离散型、附着型降雨并分别处理。具备结露测量功能、 数据存储功能,自动记录降雨总量。光耦隔离脉冲信号输出兼容翻斗雨量计、 RS232 或者 RS485 接口方便信息化集成。
关于光学雨量计降雨测量误差
|
数据可视化 算法 智慧交通
智慧交通day02-车流量检测实现05:卡尔曼滤波器实践(小车模型)
FilterPy是一个实现了各种滤波器的Python模块,它实现著名的卡尔曼滤波和粒子滤波器。我们可以直接调用该库完成卡尔曼滤波器实现。
333 0
|
算法 决策智能 计算机视觉
智慧交通day02-车流量检测实现07:匈牙利算法
有一种很特别的图,就做二分图,那什么是二分图呢?就是能分成两组,U,V。其中,U上的点不能相互连通,只能连去V中的点,同理,V中的点不能相互连通,只能连去U中的点。这样,就叫做二分图。
170 0
|
算法 计算机视觉 智慧交通
智慧交通day02-车流量检测实现04:卡尔曼滤波器
卡尔曼滤波(Kalman)无论是在单目标还是多目标领域都是很常用的一种算法,我们将卡尔曼滤波看做一种运动模型,用来对目标的位置进行预测,并且利用预测结果对跟踪的目标进行修正,属于自动控制理论中的一种方法。
205 0