一、水果识别简介

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});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_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(L==i));
[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.81note=1
elsenote=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.15money=100
elseif bizhi<0.93money=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==0total= bwarea(bw)if total>12000money=1
elseif (total>10000)&(total<12000)money=0.5
elseif (total>8700)&(total<10000)money=0.1
elsemoney=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');
endallmoney=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] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]杜俊波,李文正.基于阈值分类器的水果识别系统设计[J].物联网技术. 2020,10(12)

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

  1. 【Matlab水果识别】自助水果超市【含GUI源码 594期】

    一.代码运行视频(哔哩哔哩) [Matlab水果识别]自助水果超市[含GUI源码 594期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]倪云峰,叶健,樊娇娇 ...

  2. 【光学】基于matlab GUI杨氏双缝干涉【含Matlab源码 001期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI杨氏双缝干涉[含Matlab源码 001期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费 ...

  3. 【水果识别】自助水果超市【含GUI Matlab源码 594期】

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

  4. Matlab水果识别——基于形态学处理的水果识别

    文章目录 概述 一.原理简介 二.实验内容 1.完整代码 2.图片测试 最后 概述 基本思想就是用具有一定形态的结构元素去度量和提取图像中的对应形状,以达到图像分析和识别的目的.主要涉及到的运算有:膨 ...

  5. 【人脸识别】基于matlab GUI人数统计【含Matlab源码 2121期】

    ⛄一.人数统计简介(附课程作业报告) 1 课题背景 本课题为基于matlab的人数统计系统.近年来,很多行业对人流信息有极大的需求,如汽车公交站,地铁站台,商场出入口等.通过人数统计系统可以方便.可靠 ...

  6. 基于SSM的仓库管理系统(含完整源码+论文)

    后端框架:SSM 数据库:MySQL 开发工具:IDEA/Eclipse 系统介绍:本系统是基于SSM框架进行设计,MySQL作为底层数据库,前端采用bootstrap 模块大致介绍:包括库存管理.出 ...

  7. 【心电信号】基于matlab GUI心电信号预处理【含Matlab源码 938期】

    ⛄一.心电信号预处理方法简介 理论知识参考文献:心电信号预处理方法研究 ⛄二.部分源代码 function varargout = kaishi(varargin) gui_Singleton = 1 ...

  8. matlab svm 语音识别,【情感识别】基于matlab支持向量机(SVM)的语音情感识别【含Matlab源码 543期】...

    一.简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本.非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数 ...

  9. 【Matlab水果识别】苹果质量检测及分级系统(带面板)【含GUI源码 1613期】

    一.代码运行视频(哔哩哔哩) [Matlab水果识别]苹果质量检测及分级系统(带面板)[含GUI源码 1613期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...

  10. 【Matlab水果蔬菜识别】形态学水果蔬菜识别【含GUI源码 919期】

    一.代码运行视频(哔哩哔哩) [Matlab水果蔬菜识别]形态学水果蔬菜识别[含GUI源码 919期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅. ...

最新文章

  1. LeetCode 191 Number of 1 Bits
  2. Java Robot对象实现服务器屏幕远程监视
  3. linux mysql清除数据库所有表_MySQL修复指定数据库下的所有表
  4. 1 编码_TMS320F28379D之CLB解码多摩川编码器1——入手小知识(原创)
  5. 计算机专业学习资料总结(~持续更新中)
  6. c++字符集之间转换(UTF-8,UNICODE,Gb2312)
  7. 前端每日实战:163# 视频演示如何用原生 JS 创作一个多选一场景的交互游戏(内含 3 个视频)...
  8. 苹果开始尝试直接从自家零售店发货 更快送达消费者手中
  9. 纠错码 - 海明码/汉明码
  10. c51单片机时钟c语言程序设计,AT89C51单片机为核心的时钟电路的程序设计
  11. 机器学习(1)-项目 0: 预测泰坦尼克号乘客生还率
  12. 树莓派入门:一篇解决树莓派系统安装启动及远程连接的多种方式
  13. <<视觉问答>>2021:How Transferable are Reasoning Patterns in VQA?
  14. C#中使用Regex类来实现正则表达式
  15. OBS Studio 27.0.1版本编译
  16. 人人开源前后端分离部署到阿里云服务器
  17. Java设计模式(java design patterns)
  18. JAVA几种缓存技术介绍说明
  19. 【​观察】华为云七倍增速背后的关键词:创新、普惠AI、行业赋能
  20. 现货会比期货价格高吗(为什么现货比期货贵)

热门文章

  1. idea展现目录清晰方式
  2. 快速对表的某字段赋递增的数值
  3. Lattice Diamond 的学习之新建工程
  4. 精业科技(天津)有限公司 Game Over
  5. F.Studio 远程备份系统
  6. 动态定义控件时事件触发的总结
  7. 执行数据库命令Command对象——ADO.NET学习应用笔记之三
  8. ESP8266 MQTT
  9. 20200120每日一句
  10. atitit knowmng知识管理 索引part2