【手势识别】基于matlab GUI肤色手势识别【含Matlab源码 716期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞💞💞💞💞💞💥💥💥💥💥💥
在这里插入图片描述
✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进;
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式

⛳️座右铭:行百里者,半于九十。
更多Matlab图像处理仿真内容点击👇
Matlab图像处理(进阶版)
付费专栏Matlab图像处理(初级版)

⛳️关注CSDN海神之光,更多资源等你来!!

⛄一、手势识别简介

手势识别可以分为基于可穿戴设备的识别、基于触摸技术的识别和基于计算机视觉的识别。其中,基于计算机视觉的识别,手势图像信息由一个或多个摄像头采集,采集的数据进行预处理,包括去噪和信息增强。然后,利用分割算法获取图像中的目标手势。通过视频处理和分析得到当前手势的分类和描述,最后通过手势识别算法对目标手势进行识别。基于手势的手势识别主要由手势分割、手势分析和手势识别三部分组成。

1 手势分割
第一步是对输入图像执行手势分段。手势分割过程主要包括手势定位和手势分割两部分。
(1)手势定位
手势定位过程在包含手势的图像帧序列中从复杂背景中提取手势区域,实现手势与背景的分离。手势定位后,通过算法将当前手势从背景区域分割出来。静态手势只需要提取单个帧图像的手势特征,而动态手势则需要对提取的帧序列进行手势分析。常用的手势分割方法有基于运动信息的检测分割、基于视觉特征的检测分割和基于多模式融合的检测分割。基于运动信息的检测分割主要包括光流法和差分法。光流法不需要预先获取图像背景来表示复杂环境下的手势运动,但要求背景图像保持静止,对光照要求较高。
使用光流方法实时跟踪手势。在静态背景下,差分法对手势的分割效果较好。对于一个移动的背景,需要对背景进行建模和区分。
使用Running Average方法对背景进行建模,然后进行手势分割

(2)手势分割
基于明显特征的分割方法主要包括肤色分割、纹理分割、手形分割和轮廓分割。
(a)肤色分割
肤色分割方法是最常用的方法:
使用集群的肤色在颜色空间建立肤色模型,如肤色建模通过RGB颜色空间:
翁等人使用贝叶斯手势分割,建立肤色模型,然后结合皮肤的颜色,运动,和手势识别的轮廓形状信息,大大提高了分割精度。
这些分割方法不受手形的影响,但由于光照引起的肤色变化,分割错误率大大提高。
(b)基于多模式融合的分割方法主要是为了克服复杂环境对分割条件的影响,并结合各种特征,如表观特征和运动信息。当使用单色可穿戴设备或背景来简化场景分割时,为了提高分割的准确性,有时会用手进行标记,这极大地影响了交互的自然度,从而限制了应用范围。其次,对手势进行建模和分析。
主要包括基于外观的手势建模和基于三维模型的手势建模基于外观的手势建模可以分为二维静态模型和运动模型。常用的策略有颜色特征、轮廓几何、可变形和移动图像参数。颜色特征是最常用的建模方法。
用单台相机捕捉手部运动图像,用颜色、运动、边缘等多种信息建模,建立手部运动的坐标系来识别手势[71]。利用圆周、质心、边界盒等几何特征建立轮廓几何模型。
使用旋转归一化方法对手势区域的图像进行对齐,并使用KravtCouk矩作为轮廓特征训练模型来识别静态手势。通过一组能够描述全局运动的物体轮廓插值节点,建立了基于gabarit的可变形模型。
最简单的插值方法是分段线性函数。
Ju等人利用snake算法分析了课堂上的视频浏览和索引手势。
基于运动图像参数的模型与其他模型的不同之处在于,它们是由视频序列中对象的平移、旋转和方向等运动参数建模的。
提出在真实场景中使用一个新的描述符和一个局部运动直方图来描述运动模式,然后通过增强方法选择特征。该方法仅利用局部特征建立了明显的手势建模,计算复杂度较低。利用基于三维的手势模型建立当前图像的三维模型,并根据相关参数计算手势状态。常用的手势模型包括三维骨架模型、三维纹理体模型和三维几何模型。
骨架模型是最常用的三维模型。
使用Kinect生成的深度数据进行骨建模。

2 手势分析
手势分析由特征检测和参数估计两部分组成。
特征检测用于从分割后的手势中提取图像特征参数。图像特征主要包括视觉特征和语义特征。视觉特征包括颜色、纹理和轮廓,语义特征代表对图像内容的理解。
参数估计根据模型的不同使用不同的方法。
先用方向梯度直方图(HOG)描述运动员的面积,然后用主成分分析(PCA)将HOG投影到线性子空间中,得到PCA-HOG描述特征。曲棍球和足球的实验表明,该方法在光照、姿态和视角的变化下,对跟踪和识别结果具有较强的鲁棒性。

3 手势识别
手势识别主要是基于传统的机器学习方法和神经网络。使用传统的机器学习模型识别基于视觉的手势有很多方法。
静态手势识别采用模板识别,动态手势识别采用与时域信息相关的HMM。
所选择的识别方法与手势的类型有很大的相关性。
戴着有色手套,用一对普通的网络摄像头捕捉用户的手势数据,训练HMM模型对用户预定义的八个手势进行实时跟踪和识别。
近年来,随着深度学习的发展,该技术已广泛应用于手势识别领域。
同时采集彩色图像和深度图像,提取手势的骨骼特征和梯度直方图特征。然后将提取的特征融合起来,建立快速rnn,将连续的手势分割成孤立的手势。通过一个简单的递归神经网络(SRNN)。通过简单递归神经网络(SRNN)和长短时记忆(LSTM),建立了用于连续手势识别的双流递归神经网络2S-RNN。
Tsironi等结合卷积神经网络(CNN)对视觉特征的敏感性和LSTM对连续事件的有效性,提出了卷积长短时记忆递归神经网络(CNNLSTM)。

⛄二、部分源代码

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

% Last Modified by GUIDE v2.5 03-Jan-2018 20:17:07

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

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

% Update handles structure
guidata(hObject, handles);

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

% — Outputs from this function are returned to the command line.
function varargout = show_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 button press in button_start.
function button_start_Callback(hObject, eventdata, handles)
% hObject handle to button_start (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

%1.Get the hardware information //获取硬件信息
global obj;%obj在其他地方要调用,所以设为全局变量
info=imaqhwinfo(‘winvideo’);%获得摄像头硬件信息
obj=videoinput(‘winvideo’,info.DeviceIDs{1});%创建视频对象
set(obj,‘FramesPerTrigger’,1);%每次触发存储一张相片
set(obj,‘ReturnedColorSpace’,‘RGB’);%接收图像为RGB模式

%get(obj)%获取obj信息,查看设置是否成功,最后注释掉
axes(handles.axes1);

%2.show the video //动态显示视频图像
Resolution=get(obj,‘videoResolution’);%分辨率
nBands=get(obj,‘NumberOfBands’);%频段
hImage=image(zeros(Resolution(2),Resolution(1),nBands));
preview(obj,hImage);%在特定的位置(hImage)显示

% — Executes on button press in button_catch.
function button_catch_Callback(hObject, eventdata, handles)
% hObject handle to button_catch (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global obj;
catch_pic=getsnapshot(obj);%摄取图像
catch_pic=imresize(catch_pic,[240, 320]); %统一图片大小
axes(handles.axes2);
imshow(catch_pic);%在axes2显示摄取的图片
setappdata(gcf,‘pic’,catch_pic);%把catch_pic变成全局变量

% — Executes on button press in button_cut.
function button_cut_Callback(hObject, eventdata, handles)
% hObject handle to button_cut (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
pic = getappdata(gcf,‘pic’); %获取全局变量
l = get(handles.popupmenu_choose,‘value’); %获取下拉菜单选中项
if l1 %基于阈值分割(尤其适用于纯背景)
graypic = rgb2gray(pic); %灰度图像
% graypic = localenhance(graypic); %局部增强
% figure,imshow(graypic);
pic_filt=medfilt2(graypic,[3 3]); %3*3中值滤波
axes(handles.axes3);imshow(pic_filt);
pause(1);%延迟1s
pic_cut = threshold_cut(pic_filt);
end
if l
2 %基于YCgCr肤色分割(适用于较复杂背景)
pic_cut = colour_cut(pic);
end
axes(handles.axes3);
imshow(pic_cut);
setappdata(gcf,‘pic_cut’,pic_cut);%把catch_pic变成全局变量

% — Executes on selection change in popupmenu_choose.
function popupmenu_choose_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu_choose (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,‘String’)) returns popupmenu_choose contents as cell array
% contents{get(hObject,‘Value’)} returns selected item from popupmenu_choose

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

% Hint: popupmenu 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

% — Executes on button press in pushbutton_open.
function pushbutton_open_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton_open (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[filename, pathname] = uigetfile( …
{‘.bmp;.jpg;.fig;.tif’,‘MATLAB Files (.bmp;.jpg;.fig;.tif)’;
.’, ‘All Files (.)’}, …
‘Pick a file’);
pic=imread([pathname,filename]);%读取图片给im
pic=imresize(pic,[240, 320]); %统一图片大小
axes(handles.axes2);
imshow(pic);%在axes2显示摄取的图片
setappdata(gcf,‘pic’,pic);%把pic变成全局变量

% — Executes on button press in pushbutton_denoise.
function pushbutton_denoise_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton_denoise (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
pic_cut = getappdata(gcf,‘pic_cut’); %获取全局变量
pic_denoise = denoise(pic_cut);
axes(handles.axes4);
imshow(pic_denoise);
setappdata(gcf,‘pic_denoise’,pic_denoise);%把pic变成全局变量

% — Executes on selection change in popupmenu_operator.
function popupmenu_operator_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu_operator (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

⛄三、运行结果

在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]黄彦铭,宁媛.基于视觉的手势识别算法及应用的研究[J].智能计算机与应用. 2021,11(06)

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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

海神之光

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

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

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

打赏作者

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

抵扣说明:

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

余额充值