【水果识别】基于计算机视觉实现水果识别含Matlab源码

简介: 【水果识别】基于计算机视觉实现水果识别含Matlab源码

 1 简介

自“农业 4.0”时代的来临,以“互联网+”为驱动的农业技术已成为发展农业强有力的支撑。在果蔬业中,果蔬分类通常由经过训练的人员人工评估农产品或农作物的质量。但是,人工分类会带来许多相关的限制,工作人员需要熟悉果蔬的许多特征,并且高强度的机械性工作带来的失误不可避 免,因而分类技术的提高是农产品质量提升的关键。计算机视觉技术具有效率高、非接触、抗干扰能力强等优点,在多个领域已经广泛应用,能实现农产品快速无损检测的要求。果蔬分级效率的提升对我国产品质量提升、农民增产增收具有重要意义。 1 图像处理技术在果蔬分类领域的应用本文对基于计算机视觉技术的果蔬分类进行了比较调查,发现研究人员多使用一种或者多种传感器或者机器学习技术进行农产品的分类与分级,但是由于相同水果品种不同造成形状、大小与颜色的不同,果蔬的分类依然面临着许多挑战。为解决这些问题研究人员已经进行了多种实验,其中结合机器学习技术对于系统有明显提升。通过使用传感器捕获水果与蔬菜的特征,使用机器学习对任务进行优化,以提高系统整体性能。

2 部分代码

function varargout = fruit(varargin)% FRUIT MATLAB code for fruit.fig%      FRUIT, by itself, creates a new FRUIT or raises the existing%      singleton*.%%      H = FRUIT returns the handle to a new FRUIT or the handle to%      the existing singleton*.%%      FRUIT('CALLBACK',hObject,eventData,handles,...) calls the local%      function named CALLBACK in FRUIT.M with the given input arguments.%%      FRUIT('Property','Value',...) creates a new FRUIT or raises the%      existing singleton*.  Starting from the left, property value pairs are%      applied to the GUI before fruit_OpeningFcn gets called.  An%      unrecognized property name or invalid value makes property application%      stop.  All inputs are passed to fruit_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 fruit% Last Modified by GUIDE v2.5 07-May-2015 11:37:32% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name',       mfilename, ...                   'gui_Singleton',  gui_Singleton, ...                   'gui_OpeningFcn', @fruit_OpeningFcn, ...                   'gui_OutputFcn',  @fruit_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{:});else    gui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDIT% --- Executes just before fruit is made visible.function fruit_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 fruit (see VARARGIN)set(handles.axes1,'xtick',[]);set(handles.axes1,'ytick',[]);set(handles.axes1,'box','on');set(handles.axes2,'xtick',[]);set(handles.axes2,'ytick',[]);set(handles.axes2,'box','on');% Choose default command line output for fruithandles.output = hObject;% Update handles structureguidata(hObject, handles);% UIWAIT makes fruit wait for user response (see UIRESUME)% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.function varargout = fruit_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 structurevarargout{1} = handles.output;% --- Executes on button press in pushbutton1.function pushbutton1_Callback(hObject, eventdata, handles)% 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)str=uigetfile({'*.gif';'*.png';'*.bmp';'*.jpg'},'读取图像');%str=handles.b;I = imread(str);axes(handles.axes1)%在axes1上作图imshow(I);handles.a=I;guidata(hObject,handles)% --- Executes on button press in pushbutton2.function pushbutton2_Callback(hObject, eventdata, handles)% hObject    handle to pushbutton2 (see GCBO)% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)img=handles.a;R=img(:,:,1);           %获取彩色图像的r值。G=img(:,:,2);           %获取彩色图像的g值。B=img(:,:,3);           %获取彩色图像的b值。I2=rgb2gray(img);       %将图像灰度化。%figure,imshow(I2),title('灰度图像');BW=im2bw(I2,0.9);       %将图像二值化。SE=strel('rectangle',[40 30]);      % 结构定义J2=imopen(BW,SE);   axes(handles.axes2)% 进行开运算去除噪声和平滑边界imshow(J2);handles.b=J2;guidata(hObject,handles)% --- Executes on button press in pushbutton3.function pushbutton3_Callback(hObject, eventdata, handles)% hObject    handle to pushbutton3 (see GCBO)% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)J2=handles.b;img=handles.a;SE=strel('square',3);                % 定义3×3腐蚀结构元素J=imerode(~J2,SE);                  %对图像进行腐蚀操作。BW2=(~J2)-J;                         % 检测边缘%填充了已有的检测的连续形状边界B = imfill(BW2,'holes');            %对图像填充孔洞。B = bwmorph(B,'remove');            %获得图像中区域边界。%将不同的图形进行分别标记,num表示连接的图形对象的个数[Label,num] = bwlabel(B);           %进行标记。for i = 1 : num    Area(i) = 0;endLabel = imfill(Label,'holes');       %填充打过标记的边界线中间围成的图形区域%计算各个图像的hsv颜色(色度)HSV = rgb2hsv(img);                  %转换为HSV颜色模型。[row,col] = size(Label);             %统计填充后的图形中各块图形所含像素的个数的多少MeanHue = zeros(1,num);             %初始化    for i = 1 : num        Hue = zeros(Area(i),1);     %初始化        nPoint = 0;                 %初始化        for j = 1 : row            for k = 1 : col                if(Label(j,k) == i)                    nPoint = nPoint + 1;            %对于是连通区域中的点npoint+1.                    Hue(nPoint,1) = HSV(j,k,1);     %把hsv的值赋给Hue数组。                end            end        end                Hue(:,i) = sort(Hue(:,1));        for j = floor(nPoint*0.1) : floor(nPoint*0.9)            MeanHue(i) = MeanHue(i) + Hue(j,1);     %将hsv(i)的值赋给MeanHue(i)        end        MeanHue(i) = MeanHue(i) / (0.8*nPoint);     %计算出平均的色度值    end%调用regionprops函数获得各个联通区域的属性值(中心点坐标,外接椭圆的长短轴长度,面积)。[L,num]=bwlabel(BW2);                               %重新进行区域标记。stats= regionprops(L, 'ALL');                       %调用regionprops函数。for i= 1:numlongth(i)=stats(i).MajorAxisLength;                 %获得外接椭圆的长轴长度width(i)=stats(i).MinorAxisLength;                  %获得外接椭圆的短轴长度end%d in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)

3 仿真结果

image.gif编辑

image.gif编辑

image.gif编辑

4 参考文献

[1]朱枫. 基于计算机视觉的果蔬识别技术的研究[D]. 东南大学, 2014.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

5 代码下载


相关文章
|
2月前
|
机器学习/深度学习 监控 算法
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
59 3
|
2月前
|
存储 算法 数据可视化
基于 MATLAB的GUI信号处理界面设计 源码+运行截图
基于 MATLAB的GUI信号处理界面设计 源码+运行截图
83 2
|
7月前
|
机器学习/深度学习 算法 计算机视觉
计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)
计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)
|
4月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于深度学习网络的USB摄像头实时视频采集与水果识别matlab仿真
本项目展示了使用MATLAB 2022a和USB摄像头识别显示器上不同水果图片的算法。通过预览图可见其准确识别效果,完整程序无水印。项目采用GoogleNet(Inception-v1)深度卷积神经网络,利用Inception模块捕捉多尺度特征。代码含详细中文注释及操作视频,便于理解和使用。
|
5月前
|
机器学习/深度学习 数据采集 监控
基于CNN卷积神经网络的步态识别matlab仿真,数据库采用CASIA库
**核心程序**: 完整版代码附中文注释,确保清晰理解。 **理论概述**: 利用CNN从视频中学习步态时空特征。 **系统框架**: 1. 数据预处理 2. CNN特征提取 3. 构建CNN模型 4. 训练与优化 5. 识别测试 **CNN原理**: 卷积、池化、激活功能强大特征学习。 **CASIA数据库**: 高质量数据集促进模型鲁棒性。 **结论**: CNN驱动的步态识别展现高精度,潜力巨大,适用于监控和安全领域。
|
4月前
|
存储 算法 Serverless
【matlab】matlab基于DTW和HMM方法数字语音识别系统(源码+音频文件+GUI界面)【独一无二】
【matlab】matlab基于DTW和HMM方法数字语音识别系统(源码+音频文件+GUI界面)【独一无二】
|
4月前
|
存储 Serverless
【matlab】matlab实现倒谱法基音频率检测和共振峰检测(源码+音频文件)【独一无二】
【matlab】matlab实现倒谱法基音频率检测和共振峰检测(源码+音频文件)【独一无二】
|
5月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于CNN卷积神经网络的MQAM调制识别matlab仿真
**理论**: 利用CNN自动识别MQAM调制信号,通过学习星座图特征区分16QAM, 64QAM等。CNN从原始数据提取高级特征,优于传统方法。 - **CNN结构**: 自动特征学习机制,适配多种MQAM类型。 - **优化**: 损失函数指导网络参数调整,提升识别准确度。 - **流程**: 大量样本训练+独立测试评估,确保模型泛化能力。 - **展望**: CNN强化无线通信信号处理,未来应用前景广阔。
|
5月前
|
机器学习/深度学习 算法 调度
Matlab|基于改进鲸鱼优化算法的微网系统能量优化管理matlab-源码
基于改进鲸鱼优化算法的微网系统能量管理源码实现,结合LSTM预测可再生能源和负荷,优化微网运行成本与固定成本。方法应用于冷热电联供微网,结果显示经济成本平均降低4.03%,提高经济效益。代码包括数据分段、LSTM网络定义及训练,最终展示了一系列运行结果图表。
|
5月前
|
机器学习/深度学习 算法 BI
基于深度学习网络的USB摄像头实时视频采集与手势检测识别matlab仿真
**摘要:** 本文介绍了使用MATLAB2022a实现的基于GoogLeNet的USB摄像头手势识别系统。系统通过摄像头捕获视频,利用深度学习的卷积神经网络进行手势检测与识别。GoogLeNet网络的Inception模块优化了计算效率,避免过拟合。手势检测涉及RPN生成候选框,送入网络进行分类。系统架构包括视频采集、手势检测与识别、以及决策反馈。通过GPU加速和模型优化保证实时性能,应用于智能家居等场景。

热门文章

最新文章