基于MATLAB的苹果外观特征检测

news2024/11/16 17:27:28

摘  要  本文根据苹果分级判定标准中的两个评定指标:果径和果面缺陷,探讨如何利用MATLAB技术进行苹果外观的特征检测,从而提高苹果品质检测的工作效率。

关键词  MATLAB;苹果分级;果径;果面缺陷

0   引言

近年来,随着人们生活水平的提高,对于水果的品质要求也不断提高,实行水果分级销售成为当前市场的一个趋势。传统的水果等级评判主要依靠工人手摸、眼看,评定指标不客观,且人工成本高、效率低,不利于产业的规模化、工业化发展。因此,利用计算机图像技术研究客观、方便、高效的水果品质检测方法具有较大的应用前景。在本文中,作者以苹果为例,探讨基于MATLAB的苹果外观特征检测方法。

根据国家质检总局2003年发布的《烟台苹果原产地域产品国家标准》(以下简称《标准》),对于苹果分级的评定指标分为:品质基本要求、色泽、果径(最大横切面直径)、果面缺陷等方面内容,每一项都有具体分级标准。其中,品质基本要求为概略性的总体要求,苹果色泽由于品种的不同,色泽不同。因此,本文着重从果径及果面缺陷两方面特征对苹果进行检测判定。主要采用单个苹果照片进行检测。检测前,首先固定图像采集设备和检测平台的位置,同时固定各项拍摄参数(焦距、像素等)不变,并确保用于分析的每张照片长度、宽度保持一致。

1   果径(最大横切面直径)检测

对果径的检测思路为:将图片灰度化、二值化后,利用regionprops函数计算二值化图像的最小外接矩形大小,外接矩形框长度和宽度中的最大值即为苹果最大横切面直径。不过,此时的数值为像素值,通过与照片的长、宽像素值进行比较,结合图片的实际长、宽值,即可求出果径的实际长度。

图1 设定苹果照片参数

在实验过程中,直接将图片灰度化、二值化后得到的苹果图像边缘不完整,因此考虑将图像转换到HSI颜色空间,利用S分量进行灰度化、二值化处理,较好的保留了苹果的边缘。

首先,将照片由RGB颜色空间转换为HSI颜色空间。

%RGB 2 HSI

rgb=imread('apple0.jpg');

rgb = im2double(rgb);

r = rgb(:, :, 1);

g = rgb(:, :, 2);

b = rgb(:, :, 3);

num = 0.5*((r - g) + (r - b));

den = sqrt((r - g).^2 + (r - b).*(g - b));

theta = acos(num./(den + eps));

H = theta;

H(b > g) = 2*pi - H(b > g);

H = H/(2*pi);

num = min(min(r, g), b);

den = r + g + b;

den(den == 0) = eps;

S = 1 - 3.* num./den;

H(S == 0) = 0;

I = (r + g + b)/3;

% Combine all three results into an hsi image.

hsi = cat(3, H, S, I);

图2 HSI空间的苹果图片

提取HSI中的S分量,可以直接利用im2bw函数将S分量二值化。0.2为实验数值,level=0.2时二值化图像最理想。

S=im2bw(S,0.2);

imshow(S)

图3 S分量图像及S分量二值化后图像

求取外接最小矩形框,并利用regionprops函数计算图像区域的属性信息,并读取矩形的长、宽数据,以长、宽中的最大值为果径的数值。注意这里的数值为像素值。

图4 二值化图像的最小外接矩形框

[l,m]=bwlabel(S,8);

status=regionprops(l,'BoundingBox');

x=status(2,1).BoundingBox;            %读取矩形的长宽

X=max(x);                          %取最大值

取得果径的像素值后,与图片的长(宽)像素值相比。由于图片的像素、实际长宽等数值已预先设定并保持不变,因此根据果径像素与图片像素的比值可求出果径的实际数值。

2   果面缺陷检测

果面的缺陷主要包括压伤、碰伤、虫蛀伤等,表现为与正常果面色泽、质地不一致。因此可通过提取果面的图像特征,检测缺陷情况。

图5 有缺陷的苹果果面

首先,读入图像后用rgb2gray函数对受检苹果进行灰度化,并用imadjust函数调整灰度图像的强度值。

I= imread('apple3.jpg');

I2= rgb2gray(I);

J= imadjust(I2,[0.1 0.2],[]);

图6 灰度图像及imajust增强后的图像

利用im2bw函数将调整后的灰度图像转换为二值图像,level值取1。为方便检测,对二值图像进行取反处理。Y=im2bw(J,1);Y=~Y。

图7 转换为二值图像并取反

与计算果径的方法相同,求病斑区域的外接矩形框,并利用regionprops函数计算图像区域的属性信息。

[l,m]=bwlabel(Y,8);

status=regionprops(l,'BoundingBox');

imshow(Y);

hold on;

for i=1:m

rectangle('position',status(i).BoundingBox,'edgecolor','r');

end

hold off;

图8 病斑区域的外接矩形框

值得注意的是,由于病斑的不规则,且一个果面可能会有多个病斑,图像区域中会有多个外接矩形框,因此需要对每个矩形框的大小进行判定,选取面积最大的矩形框。

[x,y]=size(status);                      %读取图片信息

for i=1:x                              %共有x个矩形框

    X(i)=max(status(i).BoundingBox);     %取矩形框最大值

end

x2=status(i,1).BoundingBox;              %读取矩形框的长、宽

x2(1)

x2(2) 

在这里,以最大矩形框的面积近似为病斑的面积。通过矩形框尺寸的像素值与照片长、宽像素值的比值,以及照片实际尺寸,进而确定病斑实际面积。

3   结论

通过前面的测试,初步实现了利用MATLAB技术对苹果的大小(最大横切面直径)、苹果表面病斑面积等评定指标的检测判定,达到了预期目的。需要指出的是,在计算病斑的实际面积时采取了近似外接矩形框面积的方法,存在一定误差,但是该误差对于果品的分级检测来说是在误差的允许范围内,并不会对检测结果造成本质上的影响。从图7、图8中可以看到,除了主要的病斑区域外,左下角还有一个小白点,回到原图可以发现,这是果面的另一处小虫洞,可见该程序能比较真实的反映果面缺陷情况。本文中基于MATLAB的苹果外观特征检测方法相对简单,且不需要非常复杂、昂贵的设备,能以较小的成本实现苹果的外观分级检测,有利于该检测技术、设备在生产实践中的推广应用,达到提高生产效率的目的。

参考文献

[1]  王术兰, 徐晓辉, 胡慧. 苹果的特征检测与MATLAB实现. 计算机与信息技术, 2006,01:79~80

[2]  杨高波, 杜青松编著. MATLAB图像/视频处理应用及实例. 北京:电子工业出版社.2010.

[3]  杨杰主编. 数字图像处理及MATLAB实现. 北京:电子工业出版社.2010.

[4]  邓薇编著. MATLAB函数速查手册. 北京:人民邮电出版社.2010.

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

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

相关文章

Pandas -----------------------基础知识(四)

自定义函数 Series 加载数据 import pandas as pd df pd.DataFrame({Age: [20, 25, 30, 35, 40]}) df # 目标: 让 Age 列 的每个元素 num1 num2 def add_nums(x,num1,num2):return x num1 num2 df[Age].apply(add_nums,num1 2,num2 3) 法二 df[Age].apply(lambda x ,num1…

大模型算法入行转行?指南来了!

最近私信问我关于入行、转行方面的问题比较多,就专门写一篇讲讲我的理解。 首先说明一下个人的背景和现状,我本人是本科学历,有互联网大厂搜推方向经验,后来跳到中厂继续做推荐,去年开始做大模型。现在是个小组长&…

用ChatGPT做数据分析与挖掘,爽!

导读:在现代数据分析中,Python凭借其强大的数据处理能力和丰富的库资源成为首选工具。ChatGPT,作为先进的自然语言处理模型,正逐步成为Python数据分析与挖掘的强大辅助工具。 通过ChatGPT的自然语言处理能力,用户可以…

模糊综合评价法详细讲解+Python代码实现

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

敏捷开发与DevOps的有机结合

在当今快速变化的技术环境中,软件开发团队面临着前所未有的挑战。客户需求不断变化,市场竞争激烈,技术更新速度加快,这些因素都要求开发团队具备高度的敏捷性和高效的运营能力。为了应对这些挑战,越来越多的企业选择将…

性能调优知识点(mysql)一

Mysql 索引 索引介绍 1.索引是排好序的数据结构。他的目的是为了提升查询效率。 2.mysql存储引擎分为innodb和myisam。它是用来形容表的。 innodb支持事务、外键、行锁 myisam不支持事务、外键 3.myisam使用3个文件来存储每张表数据,每个文件名以表名开头&#x…

智能硬件语音交互接入大模型知识库的排错指引

前言 前篇讲了把大模型知识库接入到聆思CSK6大模型开发板的文章,这篇讲一下配置失败时该怎么去定位问题和解决。 阅读这篇文章前建议先看:三步把知识库接到智能语音硬件上-CSDN博客 一、排错流程顺序参考 二、云端鉴权问题处理 原因1:聆思平…

css动态边框

参考&#xff1a; Clip-path实现按钮流动边框动画_在线clip-path-CSDN博客 https://www.5axxw.com/questions/simple/9ju5yt#google_vignette <div class"bottom-top-item-centent bottom-top-item-left"><vue-seamless-scroll :data"listLeftData&q…

稿件生产业务并发竞争场景下的安全性保障

一. 背景 视频业务作为B站内容生态的心脏&#xff0c;承载了海量的视频内容和用户互动。它不仅是用户获取信息、享受娱乐的窗口&#xff0c;更是UP主展示创意、分享知识的舞台。在设计和实现视频系统时&#xff0c;我们致力于平衡用户体验、内容分发的效率&#xff0c;同时确保…

H5支付 两种成熟方案

H5支付&#xff0c;对前端来讲并不算难。主要工作量都在后端&#xff0c;需要对接支付宝API文档配置大量参数与商户信息。 前端需要做的是正常调取支付接口&#xff0c;拿到配置好的支付信息&#xff0c;触发后续流程&#xff0c;再利用本地存储拿支付订单号判断支付结果即可【…

SpringBoot使用EasyPoi根据模板导出word or pdf

1、导出效果 1.1 wrod 1.2 pdf 2、依赖 <!--word--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.3.0</version></dependency><dependency><groupId>cn.…

leetcode968. 监控二叉树

给定一个二叉树&#xff0c;我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所有节点所需的最小摄像头数量。 示例 1&#xff1a; 输入&#xff1a;[0,0,null,0,0] 输出&#xff1a;1 解释&#xff1a;如图所示&#x…

回归预测|基于卷积神经网络-支持向量机的数据回归预测Matlab程序CNN-SVM 卷积提取特征与原始特征进行融合预测

回归预测|基于卷积神经网络-支持向量机的数据回归预测Matlab程序CNN-SVM 卷积提取特征与原始特征进行融合预测 文章目录 一、基本原理原理流程总结 二、实验结果三、核心代码四、代码获取五、总结 回归预测|基于卷积神经网络-支持向量机的数据回归预测Matlab程序CNN-SVM 卷积提…

有关若依登录过程前端的对应处理学习

导言 在用C#搞完个后端后想用若依的前端做对接&#xff0c;不过很久没搞过若依了&#xff0c;想趁这个二次开发的过程记录熟悉一下登录的过程 过程 验证&#xff0c;在permission.js的路由守卫&#xff0c;这里在用户发起api请求时会验证用户的请求是否有token&#xff0c;对…

网络编程(10)——json序列化

十、day10 今天学习如何使用jsoncpp将json数据解析为c对象&#xff0c;将c对象序列化为json数据。jsoncp经常在网络通信中使用&#xff0c;也就是服务器和客户端的通信一般使用json&#xff08;可视化好&#xff09;&#xff1b;而protobuf一般在服务器之间的通信中使用 json…

C# 委托(Delegate)二

一.委托的多播&#xff08;Multicasting of a Delegate&#xff09;&#xff1a; 委托对象&#xff0c;使用 "" 运算符进行合并&#xff0c;一个合并委托调用它所合并的两个委托。使用"-" 运算符从合并的委托中移除组件委托。 注&#xff1a;只有相同类型…

使用 Napkins.dev 将草图转换为应用程序

在现代前端开发中&#xff0c;快速将设计草图转换为实际的应用程序代码是一个巨大的优势。Napkins.dev 是一个利用人工智能将网站设计草图转换成实际应用程序的平台。本文将介绍如何使用 Napkins.dev 进行这一过程。 什么是 Napkins.dev&#xff1f; Napkins.dev 是一个开源平…

机器学习-TopicModel

概率图模型基础概率潜在语义分析&#xff08;PLSA&#xff09;LDA 概率图模型基础 猜球游戏 有两个信封&#xff0c;其中一个装有一个红球&#xff0c;一个黑球。另一个信封有两个黑球。 。 假设红球价值100元&#xff0c;黑球价值1元。 你随机从其中拿起一个信封&#xff0c;从…

Linux高阶IO之select多路转接

文章目录 select多路转接timeoutfd_set返回值执行过程总结 select多路转接 多路转接有三种方案,分别是select,poll和epoll,我们都会讲解和介绍 select的函数原型是这样的 他一共有五个参数,但是可以分为三组 nfds:需要监视的最大的文件描述符值1readfds:可读文件描述符集合 …

C#邮件发送:实现自动化邮件通知完整指南!

C#邮件发送性能怎么优化&#xff1f;使用C#发送邮件的设置步骤&#xff1f; 无论是用于客户服务、内部沟通还是项目管理&#xff0c;自动化邮件通知都能显著提高效率和响应速度。AokSend将详细介绍如何使用C#邮件发送功能来实现自动化邮件通知系统。 C#邮件发送&#xff1a;配…