【2023年第十三届APMCM亚太地区大学生数学建模竞赛】A题 水果采摘机器人的图像识别 Python代码解析

news2024/11/17 17:24:50

【2023年第十三届APMCM亚太地区大学生数学建模竞赛】A题 水果采摘机器人的图像识别

1 题目

水果采摘机器人的图像识别

中国是世界上最大的苹果生产国,年产量约为3500万吨。与此同时,中国也是世界上最大的苹果出口国,世界上每两个苹果中就有一个来自中国,全球出口的苹果中有六分之一以上来自中国。中国提出了“一带一路”倡议,这是构建人类命运共同体的重要支柱。得益于这一倡议,越南、孟加拉国、菲律宾、印度尼西亚等沿线国家已成为中国苹果的主要出口目的地。

在这里插入图片描述

图1 所示摘果机器人对苹果的图像识别示意图。

苹果采摘主要依靠手工采摘。苹果成熟后,几天内苹果产区就需要大量的采摘工人。但当地的农民大多在自己的果园里种苹果。此外,农业工人的老龄化和年轻人离乡打工的现象,也导致了苹果采摘季节的劳动力短缺。为了解决这一问题,中国从2011年前后开始研究能够摘苹果的机器人,并取得了重大进展。然而,由于果园环境与受控实验的不同,各种苹果采摘机器人在世界范围内的普及和应用与理想相差甚远设置。在复杂和非结构化的果园环境中,现有的大多数机器人都无法准确识别“树叶遮挡”、“树枝遮挡”、“果实遮挡”、“混合遮挡”等障碍物。如果没有根据实际场景做出精确的判断就直接采摘苹果,那么水果受损的风险很高,甚至会对采摘手和机械臂造成伤害。这对采收效率和果实品质造成不利影响,导致更大的损失。此外,对不同收获水果的识别和分类也非常重要,如分类、加工、包装、运输等程序。然而,许多水果的颜色、形状和大小与苹果非常相似,这给苹果的采收后鉴定带来了很大的困难。

本次比赛旨在通过对标记的水果图像进行特征分析和提取,建立一个识别率高、速度快、准确率高的苹果图像识别模型,并对图像进行数据分析,如自动计算图像中苹果的数量、位置、成熟度等级、质量估计等。具体任务如下:

(1)问题1:数苹果

基于附件1提供的收获苹果图像数据集,提取图像特征,建立数学模型,统计每张图像中的苹果数量,绘制附件1中所有苹果分布的直方图。

(2)问题2:估计苹果的位置

根据附件1中提供的成熟苹果图像数据集,以图像左下角为坐标原点,确定每张图像中苹果的位置,绘制附件1中所有苹果几何坐标的二维散点图。

(3)问题3:估计苹果的成熟状态

基于附件1提供的成熟苹果图像数据集,建立数学模型,计算每张图像中苹果的成熟度,并绘制附件1中所有苹果成熟度分布的直方图。

(4)问题4:估计苹果的质量

基于附件1提供的成熟苹果图像数据集,计算每张图像中苹果的二维面积,图像左下角为坐标原点,估计苹果的质量,并绘制附件1中所有苹果质量分布的直方图。

(5)问题5:对苹果的识别

基于附件2提供的收获水果图像数据集,提取图像特征,训练苹果识别模型,识别附件3中的苹果,并绘制附件3中所有苹果图像的ID号分布直方图。

附件:

Attachment.zip,下载网址:https://share.weiyun.com/T6FKbjLf

附件1:

文件夹中包含200张收获苹果的图片,每张图片的大小为270 180像素。附件1的部分截图如下:

在这里插入图片描述

附件2:

文件夹中包含20705张已知标签和分类的不同收获水果图片,每张图片大小为270 180像素。附件2的部分截图如下:

苹果数据集:

在这里插入图片描述
在这里插入图片描述

附件3:

文件夹中包含20705张不同收获水果的图片,标签和分类未知,每张图片大小为270 180像素。附件3的部分截图如下:

在这里插入图片描述

2 问题分析

2.1 问题一

图像中的苹果数量较多,可以考虑使用目标检测算法进行苹果的检测和计数。常见的目标检测算法有Haar特征级联分类器、HOG(Histograms of Oriented Gradients)算法以及深度学习中的Faster R-CNN、YOLO等算法。

从图像中提取特征可能会用到的算法有边缘检测算法(如Canny算法、Sobel算法)、色彩特征提取算法(如HSV颜色空间的色调、饱和度、亮度特征提取)以及纹理特征提取算法(如Gabor滤波器)等。

2.2 问题二

由于需要确定每张图像中苹果的位置,需要将图像上的坐标转换为实际坐标。可能会用到的算法有仿射变换以及透视变换等。

2.3 问题三

图片中的苹果颜色分类,可能用到的算法有

(1)颜色空间转换与阈值分割: 首先,将图像从RGB颜色空间转换为HSV(或其它颜色空间)。然后,选择合适的阈值来分割图像,将成熟和未成熟的苹果分开。

(2)颜色特征提取: 提取图像中苹果区域的颜色特征。可以使用颜色直方图等方法来描述颜色分布情况。

(3)机器学习分类算法: 使用机器学习算法,如支持向量机(SVM)或深度学习神经网络,训练一个分类器。将提取的颜色特征作为输入,将训练好的分类器应用到新的图像上,预测苹果的成熟度。

(4)图像分割算法: 使用图像分割算法,如基于边缘检测的方法(如Canny边缘检测算法)或基于区域生长的方法,将苹果从背景中分离出来,然后进行后续的成熟度估计。

(5)深度学习目标检测算法: 使用深度学习目标检测算法,如Faster R-CNN或YOLO等,来检测和定位图像中的苹果区域,然后进行成熟度估计。

2.4 问题四

在以上两个问题的基础上

(1)轮廓检测和面积计算算法: 对分离出来的苹果轮廓进行检测和处理,并计算出其像素点的个数或计算轮廓面积,即苹果的二维面积。

(2)物理学质量计算方法: 根据苹果的密度和二维面积来计算苹果的质量。苹果的密度大约在0.6-0.8g/cm³之间。可以通过实验测量得到密度的平均值,然后根据面积和密度的关系进行计算。

2.5 问题五

分类问题,在问题一和问题二的基础上,提取特征后,训练分类模型。常用的算法:

(1)卷积神经网络 (CNN):经典的 CNN 架构,如 LeNet、AlexNet、VGG、ResNet 等。

(2)循环神经网络 (RNN):长短期记忆网络(LSTM)、门控循环单元(GRU)等。

(3)迁移学习:迁使用在大规模图像数据集上预训练的 CNN 模型(如 ImageNet 数据集)作为特征提取器,然后根据水果图像的特定数据集进行微调或添加全连接层进行新的分类。

(4)改进的深度学习算法和架构

3 Python代码实现

2.1 问题一

使用了OpenCV库来实现图像的预处理、特征提取和目标检测等操作

import os
import cv2
import numpy as np
import matplotlib.pyplot as plt

# 图像预处理
def image_preprocessing(img):
    # 灰度化
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 二值化
    ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    # 去除噪声
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
    binary = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel)
    return binary

# 特征提取
def feature_extraction(img):
    # Canny边缘检测算法
    canny = cv2.Canny(img, 30, 150)
    return canny

# 目标检测和计数
def object_detection_and_counting(img):
    # Hough圆检测算法
    circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, dp=1, minDist=50,
                               param1=100, param2=30, minRadius=10, maxRadius=50)
    # 绘制检测结果
    if circles is not None:
        circles = np.uint16(np.around(circles))
        for i in circles[0, :]:
            cv2.circle(img, (i[0], i[1]), i[2], (0, 255, 0), 2)
            cv2.circle(img, (i[0], i[1]), 2, (0, 0, 255), 3)
        # 计数
        count = len(circles[0])
    else:
        count = 0
    return count

# 统计图像中的苹果数量并绘制直方图
def count_apple_and_draw_histogram():
    # 读取文件夹下所有jpg图像
    file_list = os.listdir("./Attachment 1/")
    count_list = []
    for file in file_list:
        if file.endswith(".jpg"):
            # 读取图像
            img = cv2.imread("./Attachment 1/" + file)
            # 图像预处理
            img_processed = image_preprocessing(img)
            # 特征提取
            img_feature = feature_extraction(img_processed)
            # 目标检测和计数
            count = object_detection_and_counting(img_feature)
            count_list.append(count)
    # 统计每张图像中苹果的数量
    print("每张图像中苹果的数量:", count_list)
    # 绘制直方图
    plt.hist(count_list, bins=range(max(count_list) + 2))
    plt.xlabel("Apple count")
    plt.ylabel("Image count")
    plt.show()

if __name__ == "__main__":
    count_apple_and_draw_histogram()

2.2 问题二、三、四、五

请下载完整资料,请加扣扣

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用sqlserver备份还原,复制迁移数据库

文章目录 前言一、备份数据库二、还原数据库三、其他 前言 当初学sqlserver复制数据库的时候,老师只教了右键数据库生成sql脚本,没说数据库非常大的时候咋搞啊,分离数据库复制一份后在附加上去太危险了 百度一下备份还原数据库针对小白的资料…

SS8837T-DF-TP-12V/1.8A直流有刷H桥驱动芯片

由工采网代理提供的SS8837T-H桥驱动芯片为摄像机、消费类产品、玩具和其它低电压或者电池供电的运动控制类应用提供了一个集成的电机驱动器解决方案 可广泛应用于:指纹锁、阀门控制、监控安抚、摄像机、数字单镜头反光 (DSLR) 镜头、消费类产品、玩具、机器人技术、…

海外媒体推广发稿平台这8种方法助你一臂之力-华媒舍

在全球经济一体化和信息技术快速进步的背景下,海外市场的开拓对于企业的发展至关重要。要在海外市场上取得成果并非易事,因此我们需要借助一些方法来帮助我们取得成功。其中,海外媒体推广发稿平台是非常有效的工具之一。本文将介绍8种方法&am…

本地canal安装和使用

1、组件版本 canal.deployer-1.1.7 kafka_2.13-2.6.0 jdk8 apache-zookeeper-3.6.0-bin mysql5.7 2、解压canal.deployer-1.1.7 2.1、修改canal.properties配置文件 ##改为kafka canal.serverModekafka## 改为instance canal.destinations instance## 改为true&#x…

关于数据摆渡 你关心的5个问题都在这儿!

数据摆渡,这个词语的概念源自于网络隔离和数据交换的场景和需求。不管是物理隔离、协议隔离、应用隔离还是逻辑隔离,最终目的都是为了保护内部核心数据的安全。而隔离之后,又必然会存在文件交换的需求。 传统的跨网数据摆渡方式经历了从人工U…

考过了PMP,面试的时候应该怎么办?

近期喜番在后台收到了很多同学们的私信,表示自己已经过了8月份的PMP考试,开始着手往项目管理岗位转型,但是对于项目管理岗位的面试却一筹莫展。放轻松,大家的需求喜番都了解了,喜番给大家总结了一些项目经理在面试的时…

Faster R-CNN源码解析(一)

目录 前言训练脚本(train_mobilenetv2.py)自定义数据集(my_dataset.py) 前言 Faster R-CNN 是经典的two-stage目标检测模型, 原理上并不是很复杂,也就是RPNFast R-CNN,但是在代码的实现上确实有很多细节,并且源码也非常的多&…

蓝桥杯每日一题2023.11.23

题目描述 题目分析 本题使用递归模拟即可,将每一个大格子都可以拆分看成几个小格子,先将最开始的数字进行填入,使每一个对应小格子的值都为大格子对应的数,搜索找到符合要求的即可 (答案:50 33 30 41&am…

E-R图与关系模式

1. E-R模型 英文全称:Entity-relationship model,即实体关系模型 把现实世界的 实体模型通过建模转换为信息世界的概念模型,这个概念模型就是E-R模型 2. 数据库设计流程 一般设计数据库分为三个步骤 把现实世界的实体模型,通…

对未来新能源车测试工具的看法

汽车行业正在经历变革的说法算是比较轻描淡写的了,还记得我1983年加入这个行业时,行业聚焦点是引入发动机管理系统。当时还是以家庭掀背车为主的时代,发动机分析仪的体积像衣柜一样大,还没出现“CAN”通信协议。现在经常听到我的导…

opencv-Hough 直线变换

Hough 直线变换是一种在图像中检测直线的技术。它通过在极坐标空间中表示图像中的直线,将直线检测问题转换为参数空间的累加问题。OpenCV 提供了 cv2.HoughLines() 和 cv2.HoughLinesP() 函数来执行 Hough 直线变换。 cv2.HoughLines() lines cv2.HoughLines(ima…

2014年12月22日 Go生态洞察:Go语言中的代码生成

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

【excel技巧】excel表格如何转换为word

Excel表格想要转换到word文档中,直接粘贴复制的话,可能会导致表格格式错乱,那么如何转换才能够保证表格不错乱?今天分享两个方法,excel表格转换到word文件。 方法一: 首先打开excel表格,将表格…

CRM系统对企业来说是否必要?

稍微了解过CRM系统的人,应该都知道Salesforce、Zoho CRM、销售易等品牌,这些品牌备受国内外企业的青睐。我们总在强调CRM的作用,但是对中小企业来说,CRM系统有没有必要买? 小编认为,CRM系统是中小企业提升…

ChatGPT可以帮你实现理想工作的梦想

内容来源:0xluffy_eth ChatGPT可以帮你实现理想工作的梦想。 你可以: 找到工作机会 打造最佳简历准备面试 通过这三个简单插件实现你理想工作的保障:[插件链接] 第一步:安装3个插件 → 进入ChatGPT → 点击插件然后选择插件商店…

java jdk 版本切换

java jdk 版本切换 1.JAVA8_HOME ,JAVA17_HOME为切换的两个版,JAVA_HOME来选择 2.path中java_home配置项置顶,必须在蓝色选择中框上方,它是电脑自带的配置,位置太靠上会把我们自己的配置给覆盖掉 3.java -version 查看切换结果

BTS-GAN:基于MRI和条件对抗性网络的乳腺肿瘤计算机辅助分割系统

BTS-GAN: Computer-aided segmentation system for breast tumor using MRI and conditional adversarial networks BTS-GAN:基于MRI和条件对抗性网络的乳腺肿瘤计算机辅助分割系统背景贡献实验方法Parallel dilated convolution module(并行扩展卷积模块…

【C语言】计算实时太阳角度(高度角、方位角),以及使用stm32单片机实时获取时间戳

整体计算方法 在编写该代码的过程中寻找了多篇博文和论文,综合所有文章且按网上的以0时的方位角的0,且随时间累加累加至360度。我修改了博文和论文的一些角度的计算方法。得到一下代码与网站计算的方位角相互验证过,误差不超过1 验证网站 太…

docker安装mysql挂着目录和mysql备份和恢复

第一,镜像拉取,运行镜像并挂载目录,尝试挂bin下,启动不了,不知为啥 docker run --privilegedtrue -itd --namevmysql -p 3306:3306 -v /home/vmysql:/home/vmysql -e MYSQL_ROOT_PASSWORD123456 mysql(图…

计算机视觉的应用19-基于pytorch框架搭建卷积神经网络CNN的卫星地图分类问题实战应用

大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用19-基于pytorch框架搭建卷积神经网络CNN的卫星地图分类问题实战应用。随着遥感技术和卫星图像获取能力的快速发展,卫星图像分类任务成为了计算机视觉研究中一个重要的挑战。为了促进这一…