【水果识别】基于matlab GUI自助水果超市【含Matlab源码 594期】

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、水果识别简介

0 引言
图像处理是一种利用计算机分析图像以达到预期结果的技术。图像处理一般指数字图像处理,而数字图像指由工业相机、摄像机、扫描仪等设备捕捉到的二维数组,数组中的元素称为像素,元素的值称为灰度值。

计算机图像识别技术和人识别图像在原理上没有本质区别,只是机器没有人的感觉。人类图像识别不仅仅是依赖于整个图像在脑中的映像、我们依赖于图像本身特点然后对图像进行分类,然后对每个类别图像识别的特点识别图像。当我们看到一张图片时,我们的大脑会迅速产生联想。在“看”和“想”之间有一个快速的识别过程,这与搜索的过程类似。在这个过程中,我们的大脑已经在存储记忆的分类的类别中看是否有存储的记忆或与图像具有相似的特征,从而识别图像。类似的是机器图像识别技术,它通过分类提取重要特征,排除冗余信息来识别图像。这些由机器提取出来的特征一般是十分明显的,机器识别的速度也因此提高。在计算机的视觉识别中,图像的内容往往是用图像特征来描述的。

1 MATLAB GUI界面
MATLAB GUI(又称图形用户界面),它的含义是以图形化方式显示的计算机操作用户界面,是MATLAB用户可视化交互式的工具,运用GUI生成的操作界面用户可以不用浏览繁冗的代码而进行操。
图形用户界面(GUI)是由窗口、键、游标、菜单、文本指令和其他对象组成的用户界面。用户通过某些方法(如鼠标或键盘)选择和激活这些图形对象,使计算机产生反应,如计算、绘图、显示结果等。本文通过用户界面将展示对图像的二值化,处理边缘,水果分类最终实现水果识别并保存结果。

2 图像二值化
图像的二值化处理是将图像上的点的灰度值设置为为0或255,于是图像呈现出明显的黑白效果也就是获得黑白图像。
二值图像中的一种主要处理是对所提取的目标图形进行形态分析。而形态处理中最基本的是腐蚀与膨胀。腐蚀处理的作用是将目标图形收缩。其中用得到结构元素,结构元素是指具有某种确定形状的基本结构元素,例如,一定大小的矩形,圆或者菱形等。本文先对图像进行了降噪处理和平滑边界处理再把图像灰度化再进行腐蚀处理。本文随机打开一张事先准备好的图片进行二值化处理结果如图2-4所示。

3 边缘提取
边缘提取就是在数字图像中对图片轮廓的处理。对于边界处,灰度值变化比较剧烈的地方就称为边缘。也就是拐点(函数发生凹凸性变化的点)是二阶导数为零的点,并不是一阶导数,因为一阶导数为零,表示的是极值点。保留图像灰度变化较大的区域是边缘提取的一般方法,从数学的角度来看,最直观的方法是差分(数字图像差分)。

边缘检测的基本思想是利用边缘增强算子对图像的局部边缘进行突出,然后定义像素的“边缘强度”,通过设置阈值来提取边缘点。由于噪声和模糊,监测的边界可能在某一点变宽或破裂。因此,边界检测就包括:(1)通过边缘算子提取反映灰度变化的边缘点集。(2)在边缘点集合中消除一些边界点或填充边界不连续点,并将这些点连接成一条完整的线。在边缘化处理前一般先进行图像降噪已获得合适的图像边沿。

4 图像识别
图像识别技术的过程一般包括信息获取、预处理、特征提取与选择、分类器设计和分类决策这几个步骤。

信息获取有很多方法如把光或声信息通过传感器转化为电信息。通俗来说就是把研究对象的基本信息以某种方式转换成机器可以理解的信息。预处理主要是指对图像进行去噪、平滑、变换等操作,从而增强图像的重要特征。特征提取与选择:我们研究的图像是多种多样的,若想区分它们,就必须通过它们自身的特征来识别它们,获取这些特征就是提取特征。特征提取需要提取有用的特征一般选取明显的特征这样才能识别相应的物体,这就是特征选择。特征提取与选择是图像识别过程中的关键技术之一。分类器设计是指通过训练得到一个识别规则,通过这个规则可以得到一个特征分类,从而提高识别率。分类决策是对被识别的对象在特征空间中进行分类更好地识别所研究对象的具体类别。

在本文中在去噪的基础上先建立了HSV色素模型(表示色相、饱和度和亮度)。计算各个水果的平均HSV数值并求得水果的最小HSV值,利用regionprops函数获得各个联通区域的属性值(中心点坐标,外接椭圆的长短轴长度,面积),随后计算各个水果的似圆特征比(长轴/短轴),再获得以每个水果重心为中心点的边长为30的正方形内的像素的rgb值,利用以上条件通过比对获得最终分类结果。譬如:西瓜就需要面积最大,似圆性小于1.4,b值大于1,通过for循环就可找到西瓜。
也就是进行了预处理,信息获取,特征提取与选择,分类器设计。

⛄二、部分源代码

function varargout = rmbbb(varargin)
% RMBBB MATLAB code for rmbbb.fig
% RMBBB, by itself, creates a new RMBBB or raises the existing
% singleton*.
%
% H = RMBBB returns the handle to a new RMBBB or the handle to
% the existing singleton*.
%
% RMBBB(‘CALLBACK’,hObject,eventData,handles,…) calls the local
% function named CALLBACK in RMBBB.M with the given input arguments.
%
% RMBBB(‘Property’,‘Value’,…) creates a new RMBBB or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before rmbbb_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to rmbbb_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE’s Tools menu. Choose “GUI allows only one
% instance to run (singleton)”.
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help rmbbb

% Last Modified by GUIDE v2.5 11-Oct-2017 22:05:01

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @rmbbb_OpeningFcn, …
‘gui_OutputFcn’, @rmbbb_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% — Executes just before rmbbb is made visible.
function rmbbb_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to rmbbb (see VARARGIN)

% Choose default command line output for rmbbb
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes rmbbb wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% — Outputs from this function are returned to the command line.
function varargout = rmbbb_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

function pushbutton1_Callback(hObject, eventdata, handles)
% — Executes on button press in pushbutton1.
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global image %定义一个全局变量im
[filename,pathname,filterindex]=uigetfile({‘.jpg’;'.png’},‘选择图片’)
str=[pathname filename]; %合成路径+文件名
image=imread(str); %读取图片
axes(handles.axes1); %使用第一个axes
imshow(image); %显示图片
RGB = image;
I = rgb2gray(RGB);
threshold = graythresh(I);
bw = im2bw(I,threshold);
% remove all object containing fewer than 30 pixels
bw = bwareaopen(bw,30);
% fill a gap in the pen’s cap
se = strel(‘disk’,2);
bw = imclose(bw,se);
% fill any holes, so that regionprops can be used to estimate
% the area enclosed by each of the boundaries
bw = imfill(bw,‘holes’);
ed=edge(bw);
%%%%%以上是图像二值化 上面制作二值化图像
%下面计算圆度
L = bwlabel(bw);
L1 = bwlabel(ed);
Ar=zeros(1,max(L(😃));
Pr=zeros(1,max(L1(😃));
for i=1:max(L(😃)
Ar(i)=sum(bw(Li));
[y,x]=find(L
i);
x0=min(x(😃);
x1=max(x(😃);
y0=min(y(😃);
y1=max(y(😃);
Pr(i)=Ar(i)/((y1-y0)*(x1-x0));
end
if max(Pr) >0.81
note=1
else
note=0
end
if note==1
imager=image(:,:,1);
imageg=image(:,:,2);
r=sum(sum(imager));
g=sum(sum(imageg));
bizhi=r/g;

if bizhi>1.15
money=100
elseif bizhi<0.93
money=50
elseif (bizhi>1.08)&(bizhi<1.15)
money=20
elseif (bizhi>1.0)&(bizhi<1.03)
money=10
elseif (bizhi>1.03)&(bizhi<1.08)
money=5
elseif (bizhi>0.93)&(bizhi<1.0)
money=1
end
end
if note==0
total= bwarea(bw)

if total>12000
money=1
elseif (total>10000)&(total<12000)
money=0.5
elseif (total>8700)&(total<10000)
money=0.1
else
money=0
end
end
global allmoney;
set(handles.edit1,‘string’,money);
allmoney=allmoney+money;
set(handles.edit8,‘string’,allmoney);

function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,‘String’) returns contents of edit1 as text
% str2double(get(hObject,‘String’)) returns contents of edit1 as a double

% — Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,‘BackgroundColor’), get(0,‘defaultUicontrolBackgroundColor’))
set(hObject,‘BackgroundColor’,‘white’);
end

allmoney=0;

function edit3_Callback(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,‘String’) returns contents of edit3 as text
% str2double(get(hObject,‘String’)) returns contents of edit3 as a double

% — Executes during object creation, after setting all properties.
function edit3_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,‘BackgroundColor’), get(0,‘defaultUicontrolBackgroundColor’))
set(hObject,‘BackgroundColor’,‘white’);
end

⛄三、运行结果

在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]杜俊波,李文正.基于阈值分类器的水果识别系统设计[J].物联网技术. 2020,10(12)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海神之光

有机会获得赠送范围1份代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值