当前位置: 首页 > news >正文

2023年亚太杯数学建模A题解题思路(*基于OpenCV的复杂背景下苹果目标的识别定位方法研究)

摘要


由于要求较高的时效性和劳力投入,果实采摘环节成为苹果生产作业中十分重要的一部分。而对于自然环境下生长的苹果,光照影响、枝叶遮挡和果实重叠等情况普遍存在,这严重影响了果实的准确识别以及采摘点的精确定位。针对在复杂背景下苹果的自动采摘过程中出现的光照影响、枝叶遮挡和果实间相互重叠的问题,提出一种基于OpenCV的复杂背景下苹果目标的识别定位方法。以自然环境下生长的红苹果为对象,通过改进的Retinex算法消除光照、枝叶遮挡的影响;选用Canopy算法与K-Means算法相结合对图像中的苹果目标进行分割提取:利用基于距离变换的分水岭图像分割算法对可能重叠的苹果轮廓进行切分:根据最大外接矩形内切圆法对苹果目标进行拟合,然后计算各个拟合轮廓圆的圆心距离和半径大小,剔除计算结果小于阈值的拟合圆,最终确定各个苹果目标在图像中的位置和大小。基于VS2017与OpenCV3.4.1开发环境,开发了苹果目标识别定位软件测试平台,并在此平台下对296张自然环境下生长的苹果图像进行了测试,测试结果表明:改进的Retinex算法可以较好的削弱在苹果目标图像处理过程中由于光照和枝叶遮挡造成的高亮和阴影影响:在苹果目标提取过程中结合Canopy算法与K-Means算法可以最大程度的保留苹果目标真实轮廓图像;使用最大外接矩形内切圆法拟合苹果目标并通过计算坐标与半径进行伪轮廓剔除,有效的提高时间利用率和准确率。本文方法对苹果目标进行识别定位的平均分割误差为6.67%,苹果目标识别准确率为93.59%,平均识别定位时间为3.96s。应用本文方法可以对自然环境下的苹果目标进行准确识别定位,提高识别效率。


关键词苹果;识别定位;复杂背景;K-Means;OpenCV

引言

我国是苹果生产大国,苹果种植的总面积在逐年提升,其中苹果果园面积截止到2018年已达到1939万亩,而在2019年我国苹果的产量达到了4242万吨。随着我国农业结构的进一步优化,改良了苹果的种植环境,其生产效率也有了显著的提高。在苹果生产过程中,果实的采摘占全部工作量的40-50%,是生产过程中劳动力投入最集中、最吃力、最复杂,并且具有一定危险性的一个环节。果实采摘工作质量的优劣直接影响到苹果的存储与出售,进而影响其市场价值与经济收益。
当前,我国果蔬种植产业机械化、自动化和智能化程度还比较低,尤其是在成熟苹果的采摘生产作业当中,通常都是由人工进行,耗时长、成本高、工作强度大。而由于计划生育政策的施行,劳动力亦大量转移到服务业和制造业,导致了劳动力成本的提高,提升了苹果应时采摘的难度]。从发展的角度看,实现苹果的机械化、自动化和智能化采摘有利于保障果实质量、减少苹果生产过程
中的成本和提高已收获苹果的市场竞争力。因此大力发展自动化果实收获采摘技术,不但是改进传统果蔬生产的有效举措,也是未来果蔬种植产业增收的重要手段,对我国农业总体水平的提升具有十分重要的现实意义4。所以设计实现一种自动采摘苹果果实的方法是大势所趋,而其关键环节则是怎样利用机器视觉技术完成果实的精准识别与定位。现如今,由于人力、物力成本的提高,基于
机器视觉的苹果果实自动化采摘技术已经成为关注的重点。在自然环境下,苹果的生长状况受季候、生长地域、天气等自然条件的影响而具有较大的差别,经常出现果实被枝叶遮挡的情况,而且拍摄获得的苹果图像的背景较为复杂,可能包含天空、枝叶、土地等。现有常规算法常常会在识别
过程中不能够很好的去除光照的影响,导致果实识别的效率及准确率均不高:并且因为枝叶遮挡、果实重叠等原因严重干扰果实的精确识别、采摘点的准确定位以及采摘活动的进行5-)。


机器视觉是果实采摘机器人设计开发的关键技术。近几年来,各国一直在深入研究机器视觉技术,研究方式与触及领域持续拓展,研究成果在农业采摘、医学鉴别、工业监控等方面的应用也逐渐普及。随着现代农业技术的进步,研究人员开始将机器视觉技术应用于农产品的识别和应时果蔬的采摘)。在果蔬自动采摘机器人中应用机器视觉技术始于1968年,美国学者Schertz和Bowm最早实现果实自动化采摘的方法例。他们通过计算图像中的果实与叶子在电磁光谱的红外光反射率差异以及可见光频段的不同来进行水果的识别。1977年,美国学者Parrish和Goksel以人造苹果树作为实验目标创建了首个用于苹果识别的机器视觉系统,并奠定了后续各种果实识别定位方法的研究基础1o。
  1989年,美国加州大学的Slaughter等利用桔子图像的色彩与亮度特征,建立了第一个自然环境下桔子识别的分类器模型,该分类器的识别准确率为75%,检测形状的误差为6%,识别速度基本上可以满足实时性的要求,但精度较差。2001年,美国西北拿撒勒大学的Bulnaon等为了对不同光照条件下的苹果进行检测,以液晶显示模型和色度模型为依据,利用多阈值法对苹果图像进行分割,经实验验证准确率为80%2。

  20l5年,美国卡内基梅隆大学的Abhisesh Silwal等通过循环迭代霍夫变换算法对特征明显的红色苹果图像进行检测,并通过基于距离变换的聚类算法对存在遮挡区域的苹果进行合并,结果表明对于单个苹果的情况该算法具有较好的识别效果,识别率可达到90.11。20l9年,西班牙马德里大学Valeriano Mendez等将3D激光雷达扫描出的图像利用K-Means算法进行果实识别,提高了识别精度,但耗时更长14。到目前为止,在果实识别与定位的研究领域中,美国、以色列、荷兰等国均
处于前列。机器视觉技术在农业采摘方面的研究虽然开始很早,具备大量的先行经验,但是由于农作物的生长环境比较复杂,大多数研究尚处于理论验证的阶段。

  2019年,西班牙马德里大学Valeriano Mendez等将3D激光雷达扫描出的图像利用K-Means算法进行果实识别,提高了识别精度,但耗时更长14。到目前为止,在果实识别与定位的研究领域中,美国、以色列、荷兰等国均处于前列。机器视觉技术在农业采摘方面的研究虽然开始很早,具备大量的先行经验,但是由于农作物的生长环境比较复杂,大多数研究尚处于理论验证的阶段。

第2章图像增强及苹果目标提取


本文所使用的苹果图像是以RGB格式保存的,并且在图像中包含了复杂的背景区域。为了方便算法的下一步处理,需要分割背景区域与苹果目标,提取出图像中的苹果目标。彩色苹果图像的处理分为两个部分:一是挑选适合的颜色空间模型。合适的颜色空间模型有益于增强算法的稳定性与实时性,为下一步分割算法奠定基础:二是确定提取苹果目标的分割算法。分割算法的选择标准为在尽可能降低误分割率的情况下,提高算法的可靠性。


2.1苹果目标识别定位算法整体流程


由于现有的苹果识别定位算法在光照问题的处理上大部分是依靠颜色空间转换来解决的,当由于枝叶遮挡而导致苹果图像上出现高光和阴影区域时,很难保证算法的稳定性,而且在复杂背景和重叠果实的处理方面效果较差。针对上述问题,本文提出一种基于OpenCV的复杂背景下苹果目标的识别定位方法,能够较好地处理光照问题并且提取图像中的苹果目标,分离可能出现重叠情况的苹果目标,最终获得苹果目标的坐标与半径。


2.1.1自然环境下的苹果图像分析


本文研究的算法主要应用于自然环境下生长的红苹果的识别与定位,而自然环境下的苹果图像背景较为复杂。本文的数据集是通过果园内拍照以及互联网搜集图像来构建的,为了更好的确定算法的流程,提高算法的准确性和适用性,首先对数据集内的苹果图像进行分析。经过分析后发现数据集内的图像包括普通苹果图像、光照过量苹果图像、光照不均苹果图像、存在枝叶遮挡苹果图像和存在果实重叠苹果图像等情况。自然环境下生长的苹果如图2-1所示,图2-1)为正常情况下的苹果图像:图2-1b)为存在枝叶遮挡的苹果图像,图像中的一部分苹果果实被树叶所覆盖,右上方果实由于枝条的存在而被分成两个部分,在进行苹果目标拟合时会出现拟合圆偏小以及伪轮廓的情况:图2-1c)为光照过量苹果图像,图像中的三个苹果果实由于光照的原因均出现严重的反光现象,使得苹果表面出现高光区域,对于后续的图像处理会造成较大影响;图2-1)为光照不均匀苹果图像,枝叶遮挡和光照角度使得苹果图像中存在亮暗相邻的区域,即一部分为高亮区域,而相邻部分为昏暗区域,果实的阴影部分表面亮度小于非阴影部分或背景的亮度,在进行分割时会丢失像素信息,增加了分析苹果图像信息的难度:图2-1)为存在果实重叠情况的苹果图像,苹果目标区域的重叠使得分割提取的苹果果实存在一定误差,更对后续的苹果目标拟合造成影响,导致最终结果会有部分偏差。在后续算法研究中以具有代表性的图2-1c)、d)为例进行处理,对算法进行验证分析。

74c25bc03a0f409bac0142c17b448797.png

2.1.2算法整体流程
本文设计的基于OpenCV的复杂背景下苹果目标的识别定位算法,其过程可划分为七个步骤:苹果图像采集、苹果图像增强、苹果目标提取、苹果目标图像预处理、苹果目标分割、苹果目标拟合、拟合圆判定并存储,如图2-2所示。具体工作流程为:首先采集苹果图像,并对苹果图像进行增强,减少光照对下一步苹果图像处理的影响:其次将苹果图像从RGB颜色空间变换到Lb颜色空间,并利用改进的K-Means算法提取图像中的苹果目标:接着对二值化后的苹果目标图像进行图像预处理,然后采用基于距离变换的分水岭算法进行苹果目标重叠区域分割:再通过最大外接矩形内切圆法拟合出图像中的苹果目标圆:最后通过拟合圆判定算法对拟合出的苹果目标圆进行伪轮廓滤除,得到最终的苹果目标信息。

5940b5d87c364f56aec35ebb6534a485.png

2.2苹果图像增强算法


颜色包含的信息相比于灰度而言更多。对于在果园中拍摄的存在复杂背景的苹果图像,苹果目标与背景区域最明显的区别就是两者之间颜色的差异。因此可以依据这一特性,选择相对适宜的颜色模型,对苹果图像进行区域分割。对于提取出的苹果目标图像,选择高效且快速的识别定位算法,尽可能快速精确地获得苹果目标位置与大小信息。为了解决由于枝叶遮挡和光照不均匀所造成的问题22,231,学者们提出了多种图像增强方法,主要有:基于直方图的方法、基于Mask匀光的方法、基于Retinex的方法等。

2.2.1直方图均衡化算法


对于整体偏亮(暗)的光照不均匀苹果图像,其图像对比度较低。通常使用直方图变换的方法把分布不均匀的图像进行拉伸,以此来提高苹果图像的整体对比度。但该算法未曾考虑到苹果图像的细节信息,容易造成图像过增强。使用直方图均衡化算法242处理苹果图像的步骤如下:
(1)按照从上到下,从左到右的次序扫描原始苹果图像三通道的所有像素,将对应像素点的三通道像素值求平均值,计算出苹果图像的灰度直方图H:
(2)进行归一化处理,将每一个像素灰度值在图像中出现的次数求和并除以苹果图像的大小,最终得到归一化的直方图

6dee8022b8ce4b8bb70ae2b9a8fc1de1.png

其中,x)为结果图像,L表示灰度等级,H(x)表示苹果灰度直方图中每个灰度等级像素的数量,w表示灰度图像的宽,h表示灰度图像的高。使用直方图均衡化算法对图2-1c)、d)进行增强,结果如图2-3所示:增强后的图2-3a)中的灰度级减少,苹果果实与枝叶重叠的部分某些细节消失,在进行苹果果实分割提取时可能会造成部分背景图像(枝叶)冗余,不利于后续部分的处理;图2-3b)经过处理后,图像对比度增大,灰度级不平坦,部分苹果果实图像灰度值较低,部分图像灰度值较高,导致苹果图像的灰度值变化范围增大,因此提取图像中的苹果果实信息较困难。

e5c7ceae2a934e29b8ee04af2bb68210.png

 2.2.2Mask匀光算法


Mask匀光算法是一种基于传统光学相片晒印方法而提出的图像增强算法。原理是以模糊透明的正片为遮光板,然后将模糊透明正片与准备好的负片重叠后进行晒像,得到一张密度较为均匀但反差较小的相片229。对于存在不均匀光照的苹果图像可描述如下:
f(x,y)=r(x,y)+g(x,y)(2-3)
其中,fx,y)为光照不均匀苹果图像,r(x,y)为使用Mask匀光算法处理后的苹果图像,g(x,y)为表征亮度分布的苹果背景图像。由式(2-3)可知,原始苹果图像减去背景苹果图像就能获得光照均匀的苹
果图像。通常情况下为了对苹果图像灰度等级的取值范围进行补偿,会在计算过程中加上灰度偏移量,公式如下所示:r(x,y)=f(x,y)-g(x,y)+offset(2-4)其中,offset为灰度偏移量。利用Mask匀光法对图2-1c)、d)进行图像增强的结果如图2-4所示,可以看出Mask匀光算法可以有效地平抑苹果图像高光部分,但对图2-2a)中的阴影部分的增强效果并不理想,降低了苹果图像的整体亮度。

2023年亚太杯数学建模A题水果采摘机器人的图像识别功能(基于yolov5的苹果分割)-CSDN博客

相关文章:

2023年亚太杯数学建模A题解题思路(*基于OpenCV的复杂背景下苹果目标的识别定位方法研究)

摘要 由于要求较高的时效性和劳力投入,果实采摘环节成为苹果生产作业中十分重要的一部分。而对于自然环境下生长的苹果,光照影响、枝叶遮挡和果实重叠等情况普遍存在,这严重影响了果实的准确识别以及采摘点的精确定位。针对在复杂背景下苹果的…...

【机器学习】聚类(三):原型聚类:高斯混合聚类

文章目录 一、实验介绍1. 算法流程2. 算法解释3. 算法特点4. 应用场景5. 注意事项 二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 导入必要的库1. 全局调试变量2. 调试函数3. 高斯密度函数(phi)4. E步(getExpectation&#xff09…...

线上ES集群参数配置引起的业务异常案例分析

本文介绍了一次排查Elasticsearch node_concurrent_recoveries 引发的性能问题的过程。 一、故障描述 1.1 故障现象 1. 业务反馈 业务部分读请求抛出请求超时的错误。 2. 故障定位信息获取 故障开始时间 19:30左右开始 故障抛出异常日志 错误日志抛出timeout错误。 故障之前…...

【Docker】Docker 仓库管理和Docker Dockerfile

作者简介: 辭七七,目前大二,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖&#x1f…...

面试必问:如何快速定位BUG?BUG定位技巧及N板斧!

01 定位问题的重要性 很多测试人员可能会说,我的职责就是找到bug,至于找原因并修复,那是开发的事情,关我什么事? 好,我的回答是,如果您只想做一个测试人员最基本最本分的事情,那么可…...

力扣114. 二叉树展开为链表(java,用树模拟链表)

Problem: 114. 二叉树展开为链表 文章目录 题目描述思路解题方法复杂度Code 题目描述 给你二叉树的根结点 root ,请你将它展开为一个单链表: 1.展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左…...

学生成绩管理系统(python实现)

学生成绩表信息包括学号、姓名、各科课程成绩(语文、数学、英语、政治)和总分。用带头结点的单链表管理学生成绩表,每个学生的信息依次从键盘输入,并根据需要进行插入、删除、排序、输出等操作。 import json# 初始化系统 studen…...

【Leetcode合集】1410. HTML 实体解析器

1410. HTML 实体解析器 1410. HTML 实体解析器 代码仓库地址: https://github.com/slience-me/Leetcode 个人博客 :https://slienceme.xyz 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""…...

04-React脚手架 集成Axios

初始化React脚手架 前期准备 1.脚手架: 用来帮助程序员快速创建一个基于xxx库的模板项目 1.包含了所有需要的配置(语法检查、jsx编译、devServer…)2.下载好了所有相关的依赖3.可以直接运行一个简单效果 2.react提供了一个用于创建react项目的脚手架库…...

时序预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost时间序列预测

时序预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost时间序列预测 目录 时序预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab实现BiLSTM-Adaboost…...

【nlp】3.6 Tansformer模型构建(编码器与解码器模块耦合)

Tansformer模型构建(编码器与解码器模块耦合) 1. 模型构建介绍2 编码器-解码器结构的代码实现3 Tansformer模型构建过程的代码实现4 小结1. 模型构建介绍 通过上面的小节, 我们已经完成了所有组成部分的实现, 接下来就来实现完整的编码器-解码器结构耦合. Transformer总体架…...

【【Linux系统下常用指令学习 之 二 】】

Linux系统下常用指令学习 之 二 文件查询和搜索 文件的查询和搜索也是最常用的操作,在嵌入式 Linux 开发中常常需要在 Linux 源码文件中查询某个文件是否存在,或者搜索哪些文件都调用了某个函数等等。 1、命令 find find 命令用于在目录结构中查找文件…...

Git-将指定文件回退到指定版本

场景1:修改了文件/path/to/file,没有提交,但是觉得改的不好,想还原。 解决: git checkout -- /path/to/file 场景2:修改了文件/path/to/file,已经提交,但是觉得改的不好&#xff0c…...

docker环境安装

环境 主机环境 1. 宿主机环境 ubuntu-22.04.3-live-server-amd64 ,下载地址: https://mirrors.aliyun.com/ubuntu-releases/22.04.3/ubuntu-22.04.3-live-server-amd64.iso 2. apt 包管理器,镜像源修改 : 将 http://cn.archive.ubunt…...

【Java】智慧工地云平台源码(APP+SaaS模式)

在谈论“智慧工地”之前,我们首先得知道传统工地为什么跟不上时代了。 说起传统工地,总有一些很突出的问题:比如工友多且杂,他们是否入场、身体状况如何,管理人员只能依靠巡查、手工纪录来判断,耗时耗力&am…...

2016年11月10日 Go生态洞察:七年的Go语言旅程

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...

深入了解Java中SQL优化的关键技巧与实践

引言 介绍SQL优化对于Java应用性能的重要性,并概述本文将要讨论的内容。 1. 编写高效的SQL语句 - **索引的类型与使用:** 解释B-Tree索引、哈希索引等类型的区别,以及如何根据查询需求合理创建和使用索引。 - **查询优化器:** 说明…...

6.3.WebRTC中的SDP类的结构

在上节课中呢,我向你介绍了sdp协议, 那这节课呢,我们再来看看web rtc中。是如何存储sdp的?也就是sdp的类结构,那在此之前呢?我们先对sdp的内容啊,做一下分类。因为在上节课中呢,虽然…...

ArcGis如何用点连线?

这里指的是根据已有坐标点手动连线,类似于mapgis中的“用点连线”,线的每个拐点是可以自动捕捉到坐标点的,比直接画精确。 我也相信这么强大的软件一定可以实现类似于比我的软件上坐标时自动生成的线,但是目前我还没接触到那里&a…...

自定义精美商品分类列表组件 侧边栏商品分类组件 category组件(适配vue3)

随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

Go语言多线程问题

打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...

CSS3相关知识点

CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...

负载均衡器》》LVS、Nginx、HAproxy 区别

虚拟主机 先4,后7...