基于MATLAB的冰箱水果保鲜识别系统
摘要:本作品旨在研究和实现基于MATLAB软件的冰箱水果保鲜识别系统,针对多种常见水果混合的图像进行处理和识别。首先,根据水果与背景的差异选择合适的阈值,对图像进行去噪和对比度增强,然后进行二值化处理。接下来,对图像进行边缘检测,选定连通区域,并对这些区域进行标记。在此基础上,通过快速提取水果的颜色、形状和大小等特征,进行准确的水果识别。最终,该系统能够实现对不同种类水果的正确分拣,提高水果保鲜管理的效率。
关键词:MATLAB,水果识别,图像处理,二值化,边缘检测,特征提取,自动分拣,冰箱保鲜系统
图 1 冰箱水果保鲜识别系统运行结果图
-
功能模块
这个基于MATLAB的冰箱水果保鲜识别系统区别于常用的冰箱,系统将增加三个功能如下:图像识别、食谱搜索、时间记录。
图像识别:1、将彩色图像二值化或直接使用灰度图像,对食物图片进行识别,记录食物个数。2、通过识别灰度图像食物中的阴影区域,区分食物的好坏,并提醒显示。3、食物包含水果的识别(苹果、香蕉、梨等)。
食谱搜索:通过先把食谱内容存入MATLAB中,然后搜索关键字读取食谱内容。
时间记录:1、记录当前放入食物的日期和时间,并保存到数据库中。2、随着食物存放时间的增加,更新存放的记录时长。
界面形式:界面直接通过MATLAB软件GUI界面运行显示并进行相关操作。
最终效果:运行程序后,通过插入食物图片模拟将食物放入冰箱的过程,插入成功后会记录并保存当前日期,时间和食物个数,随着时间的变化,记录时长也会更新。通过图像识别区分食物的好坏,并提醒显示。另外,还可以通过搜索关键字查找到已存的相关食物的食谱的内容。
研究方法:此系统将使用MATLAB进行程序编写。采用GUI设计,进行图像处理。数据使用MySQL数据库进行存储读取。
图2 基于MATLAB的冰箱水果保鲜识别系统框图
-
设计方案
在计算机中,图像由像素逐点描述,每个像素点都有一个明确的位置和色彩数值。使用Matlab软件读取图像,以矩阵形式存放图像数据,其扫描规则是从左向右,从上到下。
对于一副水果图像为了处理方便,我们首先要把彩色图像转化为灰度图像。然后对图像进行二值化处理来获得每个水果的区域特征。
在水果与背景接触处二值化会导致图像边缘部分有断裂,毛躁的部分。所以采用边缘提取以弥补断裂的边缘部分,然后基于数学形态算子对图像进行去除断边,图像填充等必要的后续处理。经过图像分割后,水果和背景很明显地被区分开来,然后需要对每种水果的特征进行提取。
先对图像进行标签化,所谓图像的标签化是指对图像中互相连通的所有像素赋予同样的标号。经过标签化处理就能把各个连通区域进行分离,从而可以研究它们的特征。
-
关键技术
图像二值化
1、灰度化
% 将真彩色图像 i 转化为灰度图像 I
I=rgb2gray(i);
在 RGB 模型中,如果 R=G=B 时,则彩色表示一种灰度颜色,其中 R=G=B 的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。
2、二值化
% level 为阈(yu) 值,取值从0到1.
% 本项目考虑到图片背景颜色为白色,亮度较大,因此选取 `level=0.9` 来实现二值化。
I=im2bw(i,level)
一幅图像包含目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,最经常使用的方法就是设定一个全局的阈值 T,用 T 将图像的数据分成两部分:大于 T 的像素群和小于 T 的像素群。将大于 T 的像素群的像素值设定为白色(或者黑色),小于 T 的像素群的像素值设定为黑色(或者白色)。
比方:计算每个像素的(R+G+B)/3,假设>127,则设置该像素为白色,即R=G=B=255;否则设置为黑色,即R=G=B=0。
(二)边缘提取
1、开运算
I=imopen(i,SE);
先腐蚀后膨胀的过程称为开运算。(看上去把细微连在一起的两块目标分开了)
开运算作用:可以使边界平滑,消除细小的尖刺,断开窄小的连接,保持面积大小不变等。
I=imerode(i,SE);
腐蚀运算作用:消除物体边界点,使边界点向内部收缩,可以把小于结构元素的物体去除。
膨胀的作用:将与物体接触的所有背景点合并到物体中,是目标增大,可填补目标中的空洞。
2、数学形态学运算
% bwmorph 函数是对图像进行指定的形态学操作。
% ‘remove’即代表如果一个像素点的4邻域都为1, 则该像素点将被置0;该选项将导致边界像素上的1被保留下来。
I=bwmorph(i,'remove');
提取图像种水果的边界用于标记各个区域
(三)水果分类
1、获得连通区域的属性
这里要用到了在 Matlab 图像处理工具箱中非常重要的一个图像分析函数:regionprops.
顾名思义:它的用途是 get the properties of region ,即用来度量图像区域属性的函数.
STATS =regionprops(L,properties)
描述测量标注矩阵L中每一个标注区域的一系列属性.L中不同的正整数元素对应不同的区域,例如:L中等于整数1的元素对应区域1;L中等于整数2的元素对应区域2;以此类推.
此函数用来获取每个水果的中心位置,及其外接椭圆的长,短轴长度。中心位置用来计算水果的颜色特征值及最终显示水果名称。外接椭圆的长,短轴长度用来计算水果的似圆性特征,以判断其大致形状。
2、获取特征并判别函数
本项目根据水果在图像中表现出来的特点,从面积特征,似圆性特征,颜色(rgb值和hsv值)特征对图像中的桃子、苹果、香蕉 、西瓜、菠萝、梨子等进行特征提取。最后按照筛选出来的特征对水果进行分类识别。
(1)颜色特征
本项目使用两种计量方式来测得水果的颜色值。
-
RGB颜色模式:
对于彩色图像,可分解为 RGB 三幅单色图像。每一副图像中的像素分布情况都代表了改颜色的程度信息。根据常识可知上述6种水果中苹果和桃子的红色含量要比其他水果丰富的多,西瓜的红色含量最小。
-
Hsv颜色模式:
这个模型中颜色的参数分别是:色彩(H),纯度(S),明度(V)。 HSV模型的三维表示从RGB立方体演化而来。设想从RGB沿立方体对角线的白色顶点向黑色顶点观察,就可以看到立方体的六边形外形。六边形边界表示色彩,水平轴表示纯度,明度沿垂直轴测量。
-
H参数表示色彩信息,即所处的光谱颜色的位置。该参数用一角度量来表示,红、绿、蓝分别相隔120度。互补色分别相差180度。纯度S为一比例值,范围从0到1,它表示成所选颜色的纯度和该颜色最大的纯度之间的比率。S=0时,只有灰度。V表示色彩的明亮程度,范围从0到1。有一点要注意:它和光强度之间并没有直接的联系。
(2)似圆性特征
似圆性是在计算出每块连通区域的外接椭圆的短轴长度和长轴长度,来测量水果形状的似圆性。我们用长轴长度除以短轴长度得到一个比例。这个值与1越接近,说明水果与圆越相似。同理,该值越比1大,说明水果越不像圆。根据常识可知,上述6个水果中西瓜,苹果,桃子似圆性很高,而香蕉,菠萝似圆性最低。
(3)面积特征
经过标签化的不同区域的面积,可以用该区域像素数量来计算。对整幅图像进行扫描,计算所有连通区域的面积。根据常识可知:西瓜在上述6个水果中面积是最大的一个,菠萝其次。
特征统计表格
原始图像1 | 梨子 | 苹果 | 桃子 | 香蕉 | 菠萝 |
r | 0.94 | 0.80 | 0.72 | 1.04 | 0.55 |
g | 0.81 | 0.17 | 0.19 | 0.85 | 0.56 |
b | 0.28 | 0.06 | 0.13 | 0.53 | 0.47 |
Hsv均值 | 0.11 | 0.2 | 0.5 | 0.16 | 0.26 |
面积 | 2671 | 2224 | 1936 | 3604 | 3361 |
似圆性 | 1.6 | 1.1 | 1.07 | 1.78 | 1.55 |
香蕉 | 桃子 | 梨子 | 西瓜 | 苹果 | |
r | 1.03 | 1.01 | 0.9 | 0.29 | 1.01 |
g | 0.95 | 0.99 | 0.73 | 0.38 | 0.99 |
b | 0.20 | 1.0 | 0.35 | 0.22 | 1.00 |
Hsv值 | 0.14 | 0.25 | 0.11 | 0.29 | 0.89 |
面积 | 2191 | 1572 | 1387 | 2914 | 1443 |
似圆性 | 2.2 | 1.0 | 1.6 | 1.0 | 1.03 |
苹果 | 桃子 | 西瓜 | 香蕉 | 梨子 | |
r | 0.86 | 1.07 | 0.20 | 0.92 | 1.02 |
g | 0.19 | 1.06 | 0.53 | 0.31 | 1.00 |
b | 0.22 | 1.06 | 0.30 | 0.26 | 0.95 |
Hsv值 | 0.63 | 0.26 | 0.39 | 0.12 | 0.108 |
面积 | 1190 | 1660 | 2328 | 1894 | 1082 |
似圆性 | 1.12 | 1.06 | 1.13 | 2.16 | 1.6921 |
4、特征选择及最终结果图
-
梨子:梨子的hsv值是最小的,且因为梨子有柄的关系,梨子的似圆性在1.4至1.6之间,梨子的r值和g值都普遍大于0.6;
-
苹果:苹果的似圆性在1至1.1之间,苹果红的色素较多,蓝色和绿色色素较少使得其g值和b值都普遍小于0.4;
-
桃子:似圆性在1至1.2之间,hsv的值小于0.6,红色色素较多使得其r值至少为0.7;
-
香蕉:香蕉的似圆性数值是最大的至少为1.8,且其成黄色,其hsv的值都小于0.2;
-
菠萝:菠萝的似圆性数值仅次于香蕉为第二大,其hsv值都小于0.3,且其红色色素少r值都小于0.7;
-
西瓜:西瓜的面积是所有水果中最大的,且其红色色素较少r值都小于0.4,,似圆性在1至1.2之间;
根据水果在图像中表现出来的特点,从面积特征,似圆性特征,颜色(RGB值和HSV值)特征对图像中的桃子 苹果 香蕉 西瓜 菠萝 梨子等进行特征提取。最后按照筛选出来的特征对水果进行分类识别。
识别结果图如下所示:
-
部分程序代码截图
-
结论
总的来说水果识别良好,识别较为准确。对于偏亮和偏暗的图像,由于作品同时采用了HSV模型和RGB模型判断,因此图片的亮度对识别没有太大影响,识别率还算理想。但是正是由于获取颜色特征时同时采用HSV模型和RGB模型的值判断,导致去噪参数不能太大,待识别图片出现较多噪声的情况下识别不是太理想,因此有些识别存在误差。
而如果放弃使用HSV模型或者RGB模型中的一个,则能较好进行去除噪声,但是这样颜色特征有少了一样,对于偏亮和偏暗的图像,颜色判定时会有误差,这是没有解决好的一个主要问题。
相关文章:

基于MATLAB的冰箱水果保鲜识别系统
摘要:本作品旨在研究和实现基于MATLAB软件的冰箱水果保鲜识别系统,针对多种常见水果混合的图像进行处理和识别。首先,根据水果与背景的差异选择合适的阈值,对图像进行去噪和对比度增强,然后进行二值化处理。接下来&…...
Flink源码解析之:Flink On Yarn模式任务提交部署过程解析
Flink源码解析之:Flink On Yarn模式任务提交部署过程解析 一、Flink on Yarn部署模式概述 Apache Hadoop YARN 在许多数据处理框架中都很流行。 Flink 服务提交给 YARN 的 ResourceManager,后者会在 YARN NodeManagers 管理的机器上生成容器。 Flink 将…...

吊舱激光测距核心技术详解!
一、核心技术 吊舱激光测距的核心技术主要体现在激光发射与接收、信号处理与距离计算、以及数据校正与优化等方面。 激光发射与接收: 激光发射器:产生经过调制的激光束,该激光束具有特定的频率和波形。这些激光束被投射到目标物体上。 光…...

[ZJCTF 2019]NiZhuanSiWei
检查通过 file_get_contents 函数读取 $text 变量指定的文件内容是否等于字符串 "welcome to the zjctf"。 测试了一下直接传参,然后进入下一阶段,通过php伪协议读取useless.php发现不行,我们使用data协议将其输入进去试试 读取到…...
Kafka配置公网或NLB访问(TCP代理)
这套配置适用于TCP代理和公网访问 分几种场景,正常来说我们直接使用kafka IP地址访问就行,考虑到网络架构和环境安全,需要使用公网或代理访问kafka时就需要对kafka进行一些额外配置 EXTERNAL这个地址需要监听本地地址,之后kafka…...
大模型推理:vllm多机多卡分布式本地部署
文章目录 1、vLLM分布式部署 docker镜像构建通信环境配置 2、其他大模型部署工具3、问题记录参考文献 单台机器GPU资源不足以执行推理任务时,一个方法是模型蒸馏量化,结果就是会牺牲些效果。另一种方式是采用多台机器多个GPU进行推理,资源不…...

clickhouse-backup配置及使用(Linux)
一、下载地址 Releases Altinity/clickhouse-backup GitHub 二、上传到服务器解压安装 自行上传至服务器,解压命令: tar xvf clickhouse-backup-linux-amd64.tar.gz 三、创建软连接 sudo ln -sv build/linux/amd64/clickhouse-backup /usr/local/bin/…...
【YashanDB知识库】启动yasom时报错:sqlite connection error
本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7817893.html?templateId1718516 【标题】启动yasom时报错:sqlite connection error 【问题分类】安装部署 【关键字】错误码sqlite3.Error、yasom启动失败、共享集群 、u…...
JAVA学习笔记_Redis进阶
文章目录 初识redisredis简介windows启动redis服务器linux启动redis服务器图形用户界面客户端RDM redis命令常用数据类型特殊类型字符串操作命令Key的层级格式哈希操作命令列表操作命令集合操作命令有序集合操作命令通用命令 java客户端Jedisjedis连接池SpringDataRedis序列化手…...

LabVIEW手部运动机能实验系统
在运动科学、人机交互和康复训练等领域,手部运动功能的研究具有重要的应用价值。开发了一个基于LabVIEW的手部运动机能实验系统设计,该系统利用力量作为关键参数,通过实时数据采集和反馈帮助受试者完成精确的手部动作,同时为研究人…...

SpringBoot的注解@SpringBootApplication及自动装配
目录 一、pom文件 二、SpringBootApplication注解 1.SpringBootApplication 2.Configuration 3.这个启动类也可以被看成是一个配置类 三、SpringBootApplication注解2 1.SpringBootConfiguration 2.Configuration 3.EnableAutoConfiguration!!&…...

STM32学习之EXTI外部中断(以对外式红外传感器 / 旋转编码器为例)
中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序处理完成后又返回原来被暂停的位置继续运行 中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急…...

数字赋能:制造企业如何靠“数字能力”实现可持续“超车”?
如今,制造业数字化转型可是个热门话题,全球都在积极推进。我国更是出台了一系列给力的政策来助力制造业数字化转型,像《中国制造 2025》就明确提出要加快制造业数字化、网络化、智能化发展,各省市也纷纷响应,从资金、税…...
.NET在中国的就业前景:开源与跨平台带来的新机遇
随着技术的不断发展和市场需求的变化,.NET在中国的就业前景正变得愈加广阔。尤其是在开源和跨平台的推动下,越来越多的中国中小型企业选择了.NET技术作为其开发平台,进一步提升了.NET技术人才的市场需求。尽管在中国市场,.NET的市…...

【基础篇】一、MySQL数据库基础知识
文章目录 Ⅰ. 什么是数据库1、普通文件的缺点2、数据库的概念3、主流数据库4、MySQL Ⅱ. MySQL中客户端、服务端、数据库的关系Ⅲ. 见一见数据库1、数据库文件存放的位置2、创建数据库3、使用数据库4、创建数据库表结构5、表中插入数据6、查询表中数据7、数据的存储逻辑 &#…...

预训练深度双向 Transformers 做语言理解
大家读完觉得有意义记得关注和点赞!!! 与 GPT 一样,BERT 也基于 transformer 架构, 从诞生时间来说,它位于 GPT-1 和 GPT-2 之间,是有代表性的现代 transformer 之一, 现在仍然在很多…...
理解js闭包,原型,原型链
闭包 一个函数嵌套了另一个函数,内部函数引用了外部函数的变量,这样,当外部函数在执行环境中执行完毕后,因为某个变量被引用就无法被GC回收,导致这个变量会一直保持在内存中不能被释放。因此可以用来封装一个私有变量…...
linux tar 文件解压压缩
文件压缩和解压 tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 -z:有gzip属性的 -j:有bz2属性的 -v:显示所有过程 -O:…...

【SQL server】教材数据库(5)
使用教材数据库(1)中的数据表完成以下题目: 1 根据上面基本表的信息定义视图显示每个学生姓名、应缴书费 2 观察基本表数据变化时,视图中数据的变化。 3利用视图,查询交费最高的学生。 1、create view 学生应缴费视…...

Oracle 11G还有新BUG?ORACLE 表空间迷案!
前段时间遇到一个奇葩的问题,在开了SR和oracle support追踪两周以后才算是有了不算完美的结果,在这里整理出来给大家分享。 1.问题描述 12/13我司某基地MES全厂停线,系统卡死不可用,通知到我排查,查看alert log看到是…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...

WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!
今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等,设置经线、纬线都以10间隔显示。 2、需要插入背会归线…...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001
qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类,直接把源文件拖进VS的项目里,然后VS卡住十秒,然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分,导致编译的时候找不到了。因…...
AT模式下的全局锁冲突如何解决?
一、全局锁冲突解决方案 1. 业务层重试机制(推荐方案) Service public class OrderService {GlobalTransactionalRetryable(maxAttempts 3, backoff Backoff(delay 100))public void createOrder(OrderDTO order) {// 库存扣减(自动加全…...

第2篇:BLE 广播与扫描机制详解
本文是《BLE 协议从入门到专家》专栏第二篇,专注于解析 BLE 广播(Advertising)与扫描(Scanning)机制。我们将从协议层结构、广播包格式、设备发现流程、控制器行为、开发者 API、广播冲突与多设备调度等方面,全面拆解这一 BLE 最基础也是最关键的通信机制。 一、什么是 B…...