【水果识别】RGB+HSV水果成熟度分级系统【含GUI Matlab源码 825期】

本文介绍了RGB颜色空间的工作原理,以及HSV颜色空间的表示方法。并通过Matlab代码展示了如何将RGB图像转换为HSV,并进行颜色分析,如统计不同颜色区域的像素数量。还涉及了一些Matlab应用实例,如图像处理、路径规划和神经网络预测。
摘要由CSDN通过智能技术生成

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

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

⛄一、简介

1 RGB颜色空间:
RGB(red,green,blue)颜色空间最常用的用途就是显示器系统(计算机、电视机等都是采用RGB颜色空间来进行图像显示)。一般来说,电脑,电视机等是利用三个电子枪分别发射R分量,G分量,B分量的电子束,以此来激发屏幕上的RGB三种颜色的荧光粉,从而发出不同颜色、不同亮度的像素、进而组成了一幅图像;很明显,RGB颜色空间利用了物理学中的三原色叠加从而组成产生各种不同颜色的原理。在RGB颜色空间中,R、G、B三个分量的属性是独立的。也即是说,RGB颜色可以表示为(Red, Green, Blue)。其中,各个分量的数值越小,亮度越低。数值越大,亮度越高;如:(0,0,0)表示黑色,(255,255,255)表示白色;
RGB颜色空间表示颜色的格式有RGB565,RGB555,RGB24,RGB32等;
其中,RGB565是使用16位表示一个像素:5位表示R,6位表示G,5位表示B;
RGB555是另一种16位表示一个像素的方法:分别用5位来表示RGB分量;剩余一位不用;
RGB24是使用24位表示一个像素:分别用8位表示RGB各个分量;这种方式最为常见;
RGB32是使用32位来表示一个像素:分别用8位表示RGB各个分量;剩余8位为alpha通道,也就是用来表示图像的“透明度”。注意:在某些系统中,剩余的8位并没有使用;
RGB色彩空间称为与设备相关的色彩空间,因为不同的扫描仪扫描同一幅图像,会得到不同色彩的图像数据;不同型号的显示器显示同一幅图像,也会有不同 的色彩显示结果。显示器和扫描仪使用的RGB空间与CIE 1931 RGB真实三原色表色系统空间是不同的,后者 是与设备无关的颜色空间。

2 HSV颜色空间:
HSV(hue,saturation,value)表示色相、饱和度和亮度。该颜色空间可以用一个圆锥来表示,如下图所示:
在这里插入图片描述
在这里插入图片描述
这里,hue表示颜色的相位角,取值范围是0—360;S表示颜色的饱和度;S为一比例值,范围从0到1,它表示成所选颜色的纯度和该颜色最大的纯度之间的比率,通俗点讲,S表示的是某种颜色的“纯度”, S取值越大,表示色彩越纯,取值越小,表示色彩越灰。V表示色彩的明亮程度,范围从0到1。V等于0表示圆锥的底部定点,也就是黑色,V等于1表示圆锥的顶面,当V=1并且S=0时表示纯白色;需要注意的是:Apple的Mac操作系统以及photoshop都是采用HSV颜色空间。

⛄二、部分源代码

function varargout = GUIzyp(varargin)
% GUIZYP MATLAB code for GUIzyp.fig
% GUIZYP, by itself, creates a new GUIZYP or raises the existing
% singleton*.
%
% H = GUIZYP returns the handle to a new GUIZYP or the handle to
% the existing singleton*.
%
% GUIZYP(‘CALLBACK’,hObject,eventData,handles,…) calls the local
% function named CALLBACK in GUIZYP.M with the given input arguments.
%
% GUIZYP(‘Property’,‘Value’,…) creates a new GUIZYP or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before GUIzyp_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to GUIzyp_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 GUIzyp

% Last Modified by GUIDE v2.5 10-Jun-2017 22:22:31

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @GUIzyp_OpeningFcn, …
‘gui_OutputFcn’, @GUIzyp_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 GUIzyp is made visible.
function GUIzyp_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 GUIzyp (see VARARGIN)

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

% Update handles structure
guidata(hObject, handles);

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

% — Outputs from this function are returned to the command line.
function varargout = GUIzyp_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;

% — Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global FileName
global FilePath
global z
global H
global var
[FileName, FilePath]=uigetfile(‘.jpg;.png;.tif;.img;*.gif;’,‘请选择图像数据’);
Image_f=[FilePath FileName];
Src_Image =imread(Image_f);%读取图像数据
axes(handles.axes1);
imshow(Image_f);

var=get(handles.popupmenu1,‘value’); %假定这个下拉菜单的TAG是popupmenu1
switch var

case  1 %下面还有几个选项

hsv_f = rgb2hsv(Src_Image);
H = hsv_f(:,:,1)*255;
S = hsv_f(:,:,2)*255;
V = hsv_f(:,:,3)*255;

[y,x,z]=size(Src_Image);
Red_y=zeros(y,1);
Green_y=zeros(y,1);
Yellow_y=zeros(y,1);
for i=1:y
    for j=1:x
         if(((H(i,j)>=1)&&(H(i,j)<10))||((H(i,j) >= 245) && (H(i,j) <=254)) &&(V(i,j)>50)&&(S(i,j)>30))  %(V(i,j)<255)      &&(V(i,j)>50)&&(S(i,j)>30)
            Red_y(i,1)= Red_y(i,1)+1;%红像素点统计
         elseif(((H(i,j)>=11)&&(H(i,j)<20)) &&(V(i,j)>50)&&(S(i,j)>30))  %(V(i,j)<255)    &&(V(i,j)>50)&&(S(i,j)>30)
            Yellow_y(i,1)= Yellow_y(i,1)+1;%黄像素点统计
         elseif(((H(i,j)>=20)&&(H(i,j)<30)) &&(V(i,j)>50)&&(S(i,j)>30))  %(V(i,j)<255)   &&(V(i,j)>50)&&(S(i,j)>30)
            Green_y(i,1)= Green_y(i,1)+1;%绿像素点统计

     end
 end      

end

Max_Red_y=max(Red_y)
Max_Green_y=max(Green_y)
Max_Yellow_y=max(Yellow_y)
if((Max_Red_y> Max_Green_y)&&(Max_Red_y> Max_Yellow_y))
Result =1;
elseif((Max_Yellow_y> Max_Green_y)&&(Max_Yellow_y> Max_Red_y))
Result =2;
elseif((Max_Green_y> Max_Red_y)&&(Max_Green_y> Max_Yellow_y))
Result =3;
else
Result =4;
end

axes(handles.axes3);
imhist(uint8(H));
if(Result1)
set(handles.edit1,‘string’,‘一等’);
elseif(Result
2);
set(handles.edit1,‘string’,‘二等’);
elseif(Result==3)
set(handles.edit1,‘string’,‘三等’);
else
set(handles.edit1,‘string’,‘不成熟’);
end

case 2
    hsv_f = rgb2hsv(Src_Image);

H = hsv_f(:,:,1)*255;
S = hsv_f(:,:,2)*255;
V = hsv_f(:,:,3)*255;
[y,x,z]=size(Src_Image);
Red_y=zeros(y,1);
Green_y=zeros(y,1);
Yellow_y=zeros(y,1);
for i=1:y
for j=1:x
if(((H(i,j)>=2)&&(H(i,j)<5))||((H(i,j) >= 245) && (H(i,j) <=254)) &&(V(i,j)>50)&&(S(i,j)>30)) %(V(i,j)<255) &&(V(i,j)>50)&&(S(i,j)>30)
Red_y(i,1)= Red_y(i,1)+1;%红像素点统计
elseif(((H(i,j)>=5)&&(H(i,j,1)<8)) &&(V(i,j)>50)&&(S(i,j)>27)) %(V(i,j)<39) &&(V(i,j)>50)&&(S(i,j)>30)
Yellow_y(i,1)= Yellow_y(i,1)+1;%黄像素点统计
elseif(((H(i,j)>=8)&&(H(i,j)<11)) &&(V(i,j)>50)&&(S(i,j)>30)) %(V(i,j)<255) &&(V(i,j)>50)&&(S(i,j)>30)
Green_y(i,1)= Green_y(i,1)+1;%绿像素点统计

         end
 end      

end

Max_Red_y=max(Red_y)
Max_Green_y=max(Green_y)
Max_Yellow_y=max(Yellow_y)
if((Max_Red_y> Max_Green_y)&&(Max_Red_y> Max_Yellow_y))
Result =1;
elseif((Max_Yellow_y> Max_Green_y)&&(Max_Yellow_y> Max_Red_y))
Result =2;
elseif((Max_Green_y> Max_Red_y)&&(Max_Green_y> Max_Yellow_y))
Result =3;
else
Result =4;
end

axes(handles.axes3);
imhist(uint8(H));

if(Result1)
set(handles.edit1,‘string’,‘一等’);
elseif(Result
2);
set(handles.edit1,‘string’,‘二等’);
elseif(Result==3)
set(handles.edit1,‘string’,‘三等’);
else
set(handles.edit1,‘string’,‘不成熟’);
end

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]任龙龙,冯涛,翟传龙,宋月鹏.基于MATLAB图像处理的苹果大小、颜色、圆形度及缺陷度特征融合分级研究[J].数字技术与应用. 2021,39(07)

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 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值