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

概述

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

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

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

  • 论文以机器视觉为核心,利用 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 plt

origin = 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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从零开始配置kali2023环境:配置jupyter的多内核环境

在kali2023上面尝试用anaconda3,anaconda2安装实现配置jupyter的多内核环境时出现各种问题,现在可以通过镜像方式解决 1. 搜索镜像 ┌──(holyeyes㉿kali2023)-[~] └─$ sudo docker search anaconda ┌──(holyeyes㉿kali2023)-[~] └─$ sudo …

关于this.router 和this.route的总结

this.router 和this.route这2个东西一直在用可是我还是迷迷糊糊的不知道啥啥意思,尤其是idea的提示功能,总是让我一个回车就弄错了。 总结一波: 概述 this.$router(路由实例) : 是VueRouter的实例.包含了很多属性和对象(比如 h…

V8R6小版本升级步骤(单机环境)

在KingbaseES V8R6版本提供了sys_upgrade的升级工具。 sys_upgade介绍 sys_upgrade实现KingbaseES服务器实例版本升级。 sys_upgrade 允许将存储在KingbaseES数据文件中的数据升级到一个更高的KingbaseES主版本,而无需进行主版本升级(例如从 V8R6C4 到 V8R6C5)通常…

Django开发5-Django开发知识点快速预览

Django开发知识点快速预览 Django开发1.知识点的回顾:2.Ajax请求3.订单小结图表 各位小伙伴想要博客相关资料的话关注公众号:chuanyeTry即可领取相关资料! Django开发 1.知识点的回顾: 安装Django pip install django创建Django项…

通达信佳庆离散指标公式,衡量价格波动率

佳庆离散指标(Chaikin Volatility)是由股票经纪人Mark Chaikin发明的,通过计算选定时期内最高价和最低价之间的差值来衡量价格波动率,将波动率量化为最高价和最低价之间范围的扩大或缩小。 在技术分析中,波动性具有比…

5 个顶级的免费磁盘分区软件工具评测分享

磁盘分区可能是一个脆弱而复杂的过程,磁盘崩溃或用户设备受到病毒攻击的风险很高。因此,它们很难由用户单独或手动管理。本文详细介绍了可以帮助简化磁盘分区过程的不同软件工具、它们的功能和优点。那么让我们开始吧。 什么是磁盘分区工具?…

常见的锁策略详细讲解(悲观锁 vs 乐观锁,轻量锁 vs 重量锁,自旋锁 vs 互斥锁,公平锁 vs 非公平锁,读写锁等)

文章目录 悲观锁和乐观锁Java中的悲观锁和乐观锁乐观锁常见的两种实现方式版本号机制CAS(compare and swap) 算法乐观锁的缺点 轻量级锁和重量级锁自旋锁 VS 互斥锁公平锁 VS 非公平锁读写锁读写锁的插队策略读写锁的升级策略 可重入锁 VS 不可重入锁 悲观锁和乐观锁 所谓悲观…

Android 13 - Media框架(29)- MediaCodec(四)

上一节我们了解了如何通过 onInputBufferAvailable 和 getInputBuffer 获取到 input buffer index,接下来我们一起学习上层如何拿到buffer并且向下写数据的。 1、获取 input Buffer 获取 MediaCodec 中的 buffer 有两种方式,一种是调用 getInputBuffers…

在vscode中创建任务编译module源文件

接昨天的文章 [创建并使用自己的C模块(Windows10MSVC)-CSDN博客],觉得每次编译转到命令行下paste命令过于麻烦,于是研究了一下在vscode中创建自动编译任务。 经过尝试,在task.json中增加如下代码: {"…

IDEA2023 最新版详细图文安装教程(安装+运行测试+汉化+背景图设置)

IDEA2023 最新版详细图文安装教程 名人说:工欲善其事,必先利其器。——《论语》 作者:Code_流苏(CSDN) o(‐^▽^‐)o很高兴你打开了这篇博客,跟着教程去一步步尝试安装吧。 目录 IDEA2023 最新版详细图文安…

SpringBoot整合Validator

前言 @Validation是一套帮助我们继续对传输的参数进行数据校验的注解,通过配置Validation可以很轻松的完成对数据的约束。 通过对DTO中实体类的约束,可以大大增加代码的简洁性。 错误的状态码 返回的响应码推荐使用400 bad request. 参数注解含义 实体类 /*** @author:…

索引语法SQL性能分析

创建 查看 删除 SQL执行频率 Com后七个下划线 慢查询日志 show profiles explain explain执行计划 各字段含义: 多表查询 根据主键或者唯一索引时会出现const const就已经是很棒的性能了,实际中 NULL几乎不会出现

信息安全管理与评估省赛经验总结

信息技能大赛 在比赛开始之前,一定要检查设配,认真审查注意事项;拿到题之后,把对应设备的基本配置完成,任何异常及时报告,这个时候可以把设备的线链接上配置好,登录清单上管理地址等查看是否能登…

二维码地址门牌系统技术服务:让您的生活更便捷,一码通行,安全无忧

文章目录 前言一、融合二维码技术与门牌的便捷服务二、手机开门便捷功能三、智能化安全保障四、智能化、便捷化的新型技术 前言 在数字化时代,二维码门牌系统技术应运而生,为了满足人们对安全、便捷生活的需求。这项技术将二维码与门牌结合,…

leetcode链表小练(1.反转链表2.链表的中间节点3.合并两个有序链表4.环形链表①5.环形链表②)详解 (୨୧• ᴗ •͈)◞︎ᶫᵒᵛᵉ ♡

目录 一.反转链表 思路一反转指针反向: 思路二头插法: 二.链表的中间节点: 三.合并两个有序数组: 思路一:从头开始,取两个链表中小的那个尾插到新链表。定义指针head,tail指向空,代表新链表的头结点。…

Hive/SparkSQL中UDF/UDTF/UDAF的含义、区别、有哪些函数

Hive官网:https://cwiki.apache.org/confluence/display/Hive/LanguageManualUDF#LanguageManualUDF-Built-inTable-GeneratingFunctions(UDTF) 1.UDF(User-Defined Function) 含义 即用户定义函数,UDF用于处理一行数据并返回一个标量值(单个值)&#x…

测试自动创建设备节点的功能

一. 简介 上一篇文章在 新设备驱动框架代码的基础上,添加了自动创建设备节点的代码。文章地址如下: 自动创建设备节点代码的实现-CSDN博客 本文对自动创建设备节点的功能进行测试。 二. 自动创建设备节点代码的测试 1. 编译驱动,并拷贝…

关于编程模式的总结与思考

淘宝创新业务的优化迭代是非常高频且迅速的,在这过程中要求技术也必须是快且稳的,而为了适应这种快速变化的节奏,我们在项目开发过程中采用了一些面向拓展以及敏捷开发的设计,本文旨在总结并思考其中一些通用的编程模式。 前言 静…

【Vue2+3入门到实战】(19)Vuex状态管理器通过辅助函数 - mapState获取 state中的数据代码实现 详细讲解

目录 一、通过辅助函数 - mapState获取 state中的数据1.第一步:导入mapState (mapState是vuex中的一个函数)2.第二步:采用数组形式引入state属性3.第三步:利用**展开运算符**将导出的状态映射给计算属性 二、开启严格模式及Vuex的单项数据流1…

2024年美赛数学建模ABCDEF题思路选题分析

文章目录 1 赛题思路2 美赛比赛日期和时间3 赛题类型4 美赛常见数模问题5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 美赛比赛日期和时间 比赛开始时间:北京时间2024年2月2日(周五&#xff…