基于机器视觉的害虫种类及计数检测研究-人工智能项目-附代码

概述

  • 农业与民生和经济发展息息相关,对农业发展科学化的关注既是民生需求,

  • 也是经济稳步发展的迫切需求。病虫害是影响农作物生长的重要因素,对农作物的产量和品质都能造成无法估计的损害。
    -在这里插入图片描述

  • 针对目前广大农业产区农业植保人员稀缺、病虫害识难度大等问题,论文在当前已有的研究基础上进行设计,提出了一套基于机器视觉的远程害虫种类识别
    和数量检测系统,该系统能够在农业产区进行害虫捕杀和图像采集,同时将昆虫 图像上传到虫类鉴别服务器进行昆虫识别。

  • 论文以机器视觉为核心,利用 OpenCV 开源视觉库,研究和实现了昆虫识别的完整流程。论文

研究的内容主要包括:

  • (1) 对昆虫图像进行图像预处理的研究。使用了加权平均法对图像进行灰度化
    处理,再使用高斯滤波对图像进行平滑处理,最后使用大津法对灰度化后的图像 进行二值化处理。
  • (2) 对昆虫图像进行特征提取的研究。使用 OpenCV 对二值化后的图像进行轮
    廓查找,同时实现昆虫计数,然后分别针对昆虫轮廓的矩形度、延长度、似圆度、 球状性、叶状性进行数学定义和特征提取。
  • (3) 对昆虫识别进行了分类器的研究。选取了逻辑斯蒂回归模型、线性 SVM 模 型和 K
    临近模型进行分类器的训练和测试,比较了三种分类器在昆虫识别上的性 能。

论文对基于机器视觉的昆虫种类及数量检测机制进行了研究,并在此基础实
现了昆虫的识别和计数。
在这里插入图片描述

识别

PC 上的昆虫分类识别软件为了能够对本次设计进行原理论证和测试,使用 Python 作为编程语言,开发了一款在 Windows10 上运行的软件。具体程序界面如图 2.7 所示:
在这里插入图片描述
界面中包括:一个用以预览摄像头的窗口,一个用来显示处理之后图像的窗口,一个用来显示识别结果的标签和一个用来点击进行拍照的按钮。
图 2.8 介绍了论文设计的分类识别软件的运行过程。
在这里插入图片描述

昆虫图像的预处理

3.2.1 图像的灰度化,高斯滤波和尺度变换

  • 在机器视觉领域中,灰度图像是指将每个像素通过 8 位非线性尺寸保存,共计 256 种灰度

  • 针对论文进行形态特征提取的方式,进行灰度化即抛弃了不需要的颜色特征等信息,又保留了对于形态特征提取有用的信息,同时易于编程,提高了运算速度。
  • 论文使用灰度处理算法中的加权平均法对昆虫图像进行灰度化处理,由于科学研究中人眼对对蓝色敏感度最低,绿色的敏感度最高,因此,论文按照式(3.1)
    对 RGB 图像中的三种分量进行加权平均,最终能得到合理的灰度图像

gray(݅, ݆) = 0.30 ∗ ܴ(݅, ݆) + 0.59 ∙ ܩ(݅, ݆) + 0.11 ∙ ܤ(݅, ݆) (3.1)

图灰度化后的样本图片,如图 3.3 所示。

3.3.1 检测轮廓

  • 在此次毕业设计中,我使用开源计算机视觉库 OpenCV 作为图像处理的工具,
  • OpenCV 的 Imgproc 模块在物体识别方面提供了函数 findContours()用于对物体 轮廓进行检测,该函数的实现算法是由
    S.Suzuki K. Abe 于 1985 年发表在 CVGIP 上的论文“Toplogical Structrual Analysis
    of Digitized Binary Images by Boder
    Following”[8]中提出的,论文中详细叙述了轮廓决定层次结构的规则以
  • 及轮廓检测的方法,设计中使用 findContours()函数对昆虫图像进行处理,为
    获得昆虫图像中昆虫的轮廓,为之后昆虫轮廓特征值的提取打下基础。

3.3.2 昆虫计数

  • OpenCV 中对于轮廓检测提供了函数findContours(),该函数对昆虫图像预 处理后的二值化图像进行检测,返回一个点集列表,其中每一个点集都代表了图像中封闭的轮廓包含的点的集合。后续的昆虫特征提取都是在检测轮廓得到轮廓 点集列表的基础上完成的。
  • 通过对 findContours()函数返回的点集列表进行计数,点集的个数则大概代表了图像中轮廓的个数,应在在实际场景中,则轮廓的个数代表了一张纸上大米的粒数,也代表了设计场景中一张苍蝇粘板上苍蝇等昆虫的个数。
  • 使用大米计数的样本图片进行原理论证,效果图如图 3.5 所示
    在这里插入图片描述

计数

苍蝇粘板数目检测的实际效果图如图 3.6 所示,
在这里插入图片描述

图 4.2 是获取昆虫图像最小外接矩形和计算矩形度的效果图:

在这里插入图片描述

延长度特征的提取效果如图 4.5 所示:

在这里插入图片描述

昆虫轮廓的球状性特征提取效果如图 4.6 所示

在这里插入图片描述

创新点

设计的创新点在于:

  • (1) 针对农业产区广泛存在的农业害虫检测识别问题,提出了一种基于机器 视觉的害虫种类及数量检测方案。

  • (2) 在参考已有的论文的理论基础之上,提出了针对每一个昆虫形态特征的 提取方案。

  • (3) 在进行分类器训练时,引入了多种分类器算法,并进行训练和测试,能 够在比较分析结果后选择较为理想的分类器算法作为实际使用时的算法。

  • (4) 开发了一套基于 PC 机的识别软件,能够使用摄像头拍着昆虫图片的方 式进行昆虫的识别。

代码

# 全部代码  ------> qq1309399183
# 先读图,然后二值化,通过找轮廓来进行计数import cv2
import numpy as np
from matplotlib import pyplot as pltorigin = cv2.imread('picture/ttt.png')
RiceImg = cv2.imread('picture/ttt.png', 0)blur = cv2.GaussianBlur(RiceImg, (5, 5), 0)# 大津法二值化:此处可以用原理代码来巴拉巴拉一大段
ret, otsu = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# 输出阈值
print ret# 找轮廓
contours = cv2.findContours(otsu, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
num = len(contours[1])
print num
# 画轮廓
cv2.drawContours(origin, contours[1], -1, (0, 0, 255), 1)
cv2.putText(origin, 'Insect Num:  ' + str(num), (1, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (50, 50, 50), 2, cv2.LINE_AA)cv2.namedWindow('RiceO', cv2.WINDOW_AUTOSIZE)
cv2.imshow('RiceO', origin)cv2.imwrite('picture/tttresult.jpg',origin)
k = cv2.waitKey(0)# 'ESC'
if k == 27:cv2.destroyAllWindows()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/230669.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker与虚拟机的比对

在Windows操作系统上的对比: 但是官方还是建议我们尽量不要将Docker直接安装到Windows操作系统上。

2024第一篇: 架构师成神之路总结,你值得拥有

大家好,我是冰河~~ 很多小伙伴问我进大厂到底需要怎样的技术能力,经过几天的思考和总结,终于梳理出一份相对比较完整的技能清单,小伙伴们可以对照清单提前准备相关的技能,在平时的工作中注意积累和总结。 只要在平时…

达梦数据库安装超详细教程(小白篇)

文章目录 达梦数据库一、达梦数据库简介二、达梦数据库下载三、达梦数据库安装1. 解压2. 安装 四、初始化数据库五、DM管理工具 达梦数据库 一、达梦数据库简介 ​ 达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。 达梦数…

(湖科大教书匠)计算机网络微课堂(下)

第四章、网络层 网络层概述 网络层主要任务是实习网络互连,进而实现数据包在各网络之间的传输 因特网使用TCP/IP协议栈 由于TCP/IP协议栈的网络层使用网际协议IP,是整个协议栈的核心协议,因此TCP/IP协议栈的网络层常称为网际层 网络层提供…

Java 流程控制语句

程序设计中规定的三种流程结构,即: 顺序结构 程序从上到下逐行地执行,中间没有任何判断和跳转 分支结构 根据条件,选择性地执行某段代码 有 if…else 和 switch-case 两种分支语句 循环结构 根据循环条件,重复性的执…

Yapi安装配置(CentOs)

环境要求 nodejs(7.6) mongodb(2.6) git 准备工作 清除yum命令缓存 sudo yum clean all卸载低版本nodejs yum remove nodejs npm -y安装nodejs,获取资源,安装高版本nodejs curl -sL https://rpm.nodesource.com/setup_8.x | bash - #安装 s…

交换机03_基本配置

一、思科设备的命令行基础 1、进入设备的命令行界面 设备支持命令行 去查看设备上的接口,是否有console口需要有console线 右击此电脑设备管理器需要通过超级终端软件进行连接,如putt、secret CRT、xshell等软件 (1)思科模拟器…

在 Linux 中使用 cat 命令

cat 命令用于打印文本文件的文件内容。至少,大多数 Linux 用户都是这么做的,而且没有什么问题。 cat 实际上代表 “连接(concatenate)”,创建它是为了 合并文本文件。但只要有一个参数,它就会打印文件内容。因此,它是用…

ASP.NETCore WebAPI 入门 杨中科

ASP.NETCore WebAPI入门1 回顾 mvc开发模式 前端代码和后端代码是混在一个项目之中 WEB API 1、什么是结构化的Http接口。Json。 2、Web API项目的搭建。 3、Web API项目没有Views文件夹。 4、运行项目,解读代码结构。 5、【启用OpenAPI支持】→>swagger,在界…

基于SSM的新闻网站

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

性能测试之(六):JMeter 元件

元件(多个类似功能组件的容器) 组件:封装的方法,比如取样器中的发送请求的方法 一、常见的元件 1、取样器:发送请求2、逻辑处理:控制语句执行顺序3、前置处理器:在请求(取样器&…

Linux内核中断

Linux内核中断 ARM里当按下按键的时候,他首先会执行汇编文件start.s里面的异常向量表里面的irq,在irq里面进行一些操作。 再跳转到C的do_irq(); 进行操作:1)判断中断的序号;2)处理中断;3)清除中…

根本记不住MySQL进阶查询语句

1 MySQL进阶查询 1.1 MySQL进阶查询的语句 全文以数据库location和Store_Info为实例 ---- SELECT ----显示表格中一个或数个字段的所有数据记录 语法:SELECT "字段" FROM "表名"; select 列名 from 表名 ; ---- DISTINCT ----不显示重复的数…

UntiyShader(五)属性、内置文件和变量

目录 一、如何使用属性 例子 ShaderLab中的属性的类型和Cg中的变量的类型之间的匹配关系 二、Unity提供的内置文件和变量 内置的包含文件 内置的变量 一、如何使用属性 在一开始我们提到过,材质和UnityShader之间有着密切的练习,我们可以通过材质面…

HTML5是什么?与HTML有什么区别?

HTML5 简介 HTML5(Hypertext Markup Language, version 5)是用于构建和呈现Web内容的最新版本的HTML标准。HTML是一种标记语言,用于描述和定义Web页面的结构和内容。HTML5引入了一系列新的语法、API和特性,旨在增强Web应用的功能…

利用蚁剑钓鱼上线CS

前言 ​ 中国蚁剑使用Electron构建客户端软件,Electron实现上用的是Node.js,并且Node.js能执行系统命令,故可以利用蚁剑的webshell页面嵌入js来直接执行命令,进而钓鱼来上线CS。(类似Goby,Goby也是使用Ele…

seo分享:慎重使用蜘蛛池

其实要提高搜索引擎蜘蛛的来访次数,唯一的方法还是要通过网站本身的内容更新。频繁更新有质量的内容,才能够提高蜘蛛的来访次数。如果本身内容更新不多,外部引流的蜘蛛过多,最终发现没什么内容索引,蜘蛛来访的次数也会…

es索引数据过滤查询

1.我们往kibana插入数据,来进行查询 POST /t1/_doc/ {"name":"cat","age":"18","address":"BJ","job":"dev" } POST /t1/_doc/ {"name":"dog","age":"1…

20231227在Firefly的AIO-3399J开发板的Android11的挖掘机的DTS配置单后摄像头ov13850

20231227在Firefly的AIO-3399J开发板的Android11的挖掘机的DTS配置单后摄像头ov13850 2023/12/27 18:40 1、简略步骤: rootrootrootroot-X99-Turbo:~/3TB$ cat Android11.0.tar.bz2.a* > Android11.0.tar.bz2 rootrootrootroot-X99-Turbo:~/3TB$ tar jxvf Androi…

网络安全自学顺序!千万不要盲目学习!

前言 一、什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防…