手势识别基于matlab肤色静态手势识别含matlab源码288期(代码片段)

紫极神光 紫极神光     2023-03-09     569

关键词:

一、手势识别简介(附课程作业报告)

1 系统设计方案
今年来,手势识别作为新一代人机交互手段,受到了国内外研究学者以及公司的关注和研究,并且取得了突出的成果,在智能电视、游戏娱乐设备、机器人等方面都有了广泛的应用,而且,通过对手势识别技术的研究,可以推动机器设备对视觉感知能力的认识,并将其应用到更多的人工智能领域,使机器设备更好的理解人类的想法和意图,为我们的生活和工作带来更大的好处。本文实现了一种能识别五种手势的手势识别系统,可以完成人机交互的基本任务。
手势动作可以分为两种,一种是相对不动,没有任何附加动作的静态手势动作,另一种是相对运动、伴随着复杂变化(如缠绕、组合等)动态手势动作,前者突出表示形式及状态,后者突出变化及轨迹。本文主要针对第一种进行研究,系统处理流程如图1所示。

图1 系统结构流程图

2 系统验收需要达到的目标和测试水平
本系统可以对五种预定义的静态手势进行识别,如图2所示。

图2 五种预定义的静态手势
当系统输入以上任意一种手势时,系统能够准确迅速的做出判断当前输入的手势是属于哪一种,并且在控制台打印出相应信息。例如输入图片(a)时,系统在控制台输出手势1;输入图片(b)时,系统在控制台输出手势2,…。

3 系统实现框图和流程图
3.1手势分割

本文选择在YcbCr颜色空间进行手势分割处理,分割的重点在于建立肤色模型,利用手势皮肤颜色在YcbCr空间内满足聚类的特点,设定阈值范围,对图像进行扫描,在此范围内则认定为手势,不在此范围内的则不予考虑,查阅相关资料并进行试验发现,人手颜色在YcbCr的二维子空间(Cb,Cr)上的分布范围满足:Cb[133,173]&Cr[77,127],当像素点满足此条件就认定为手势,此方法处理简单。手势分割流程图如图3所示:

图3 手势分割流程图

二、部分源代码

close all;clear all;
clc;
%----------------------------------------------
%图像进行中值滤波,并显示图像
%调用  median_filter( )  进行处理
%----------------------------------------------
area      = int32(0) ;%面积
perimeter = int32(0) ;%周长
%读进图像
[filename, pathname] = uigetfile( '*.bmp';'*.jpg'; '*.gif', '选择图片');
  
RGB_data = imread([pathname, filename]);
[ROW,COL, DIM] = size(RGB_data); %提取图片的行列数

R_data =    single(RGB_data(:,:,1));
G_data =    single(RGB_data(:,:,2));
B_data =    single(RGB_data(:,:,3));
% %以下是中值滤波代码
% medfil_result_R = median_filter(R_data, 3);
% medfil_result_G = median_filter(G_data, 3);
% medfil_result_B = median_filter(B_data, 3);


%以下是建立肤色模型,实现RGB转YCbCr
Y_data = int32(zeros(ROW,COL));
Cb_data = int32(zeros(ROW,COL));
Cr_data = int32(zeros(ROW,COL));

 for r = 1:ROW 
     for c = 1:COL
%          Y_data(r, c) = 0.299*medfil_result_R(r, c) + 0.587*medfil_result_G(r, c) + 0.114*medfil_result_B(r, c);
%          Cb_data(r, c) = -0.1687*medfil_result_R(r, c) - 0.3313*medfil_result_G(r, c) + 0.5*medfil_result_B(r, c) + 128;
%          Cr_data(r, c) = 0.5*medfil_result_R(r, c) - 0.4187*medfil_result_G(r, c) - 0.0813*medfil_result_B(r, c) + 128;
         %系数进行8位量化处理
%          Y_data(r, c) = int32((76*R_data(r, c) + 150*G_data(r, c) + 29*B_data(r, c))/256);
%          Cb_data(r, c) = int32((-43*R_data(r, c) - 84*G_data(r, c) + 128*B_data(r, c) + 128*256)/256);
%          Cr_data(r, c) = int32((128*R_data(r, c) - 107*G_data(r, c) - 20*B_data(r, c) + 128*256)/256);
         Y_data(r, c) = floor( (76*R_data(r, c) + 150*G_data(r, c) + 29*B_data(r, c))/256 );
         Cb_data(r, c) = floor( (-43*R_data(r, c) - 84*G_data(r, c) + 128*B_data(r, c) + 128*256)/256 );
         Cr_data(r, c) = floor( (128*R_data(r, c) - 107*G_data(r, c) - 20*B_data(r, c) + 128*256)/256 );

     end
 end
 
 %以下是二值化及统计手势面积
 Gray_data = int32(zeros(ROW,COL));
  for r = 1:ROW 
     for c = 1:COL
       if Cb_data(r, c)>133 && Cb_data(r, c)<173 && Cr_data(r, c)>77 && Cr_data(r, c)<127
           Gray_data(r,c) = 0 ;
           area = area + 1 ;
       else
           Gray_data(r,c) = 255 ;
       end            
     end
  end
  
  %以下是边缘检测
  %edge_data=edge(Gray_data,'sobel') ;
  edge_data = Sobel_Image(Gray_data) ;
%   %以下是统计周长
%   for r = 1:ROW 
%      for c = 1:COL
%        if edge_data(r, c)==1
%            perimeter = perimeter + 1 ;
%        end
%      end
%   end
[H1,H2,H3,perimeter] = OriginMoment(edge_data) ;
function [ img ] = median_filter( image, m )
%----------------------------------------------
%中值滤波
%输入:
%image:原图
%m:模板的大小3*3的模板,m=3
 
%输出:
%img:中值滤波处理后的图像
%----------------------------------------------
    n = m;
    [ height, width ] = size(image);
    x1 = int32(image);
    x2 = x1;
    for i = 1: height-n+1
        for j = 1:width-n+1
            mb = x1( i:(i+n-1),  j:(j+n-1) );
            mb = mb(:);
            mm = median(mb);
            x2( i+(n-1)/2,  j+(n-1)/2 ) = mm;
 
        end
    end
 
    img = x2;
end

三、运行结果





四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4].刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]李昌锋,郭生挺,陈文婷.基于静态手势识别的视力检测系统设计[J].科技创新与应用. 2021,11(13)

手势识别基于matlabpca+lda手语检测识别含matlab源码1551期(代码片段)

一、手势识别简介手势识别可以分为基于可穿戴设备的识别、基于触摸技术的识别和基于计算机视觉的识别。其中,基于计算机视觉的识别,手势图像信息由一个或多个摄像头采集,采集的数据进行预处理,包括... 查看详情

基于yolov5的手势识别系统(含手势识别数据集+训练代码)(代码片段)

基于YOLOv5的手势识别系统(含手势识别数据集+训练代码)目录基于YOLOv5的手势识别系统(含手势识别数据集+训练代码)1.前言2.手势识别的方法(1)基于多目标检测的手势识别方法(2)基于手部检测+手势分类... 查看详情

基于yolov5的手势识别系统(含手势识别数据集+训练代码)(代码片段)

基于YOLOv5的手势识别系统(含手势识别数据集+训练代码)目录基于YOLOv5的手势识别系统(含手势识别数据集+训练代码)1.前言2.手势识别的方法(1)基于多目标检测的手势识别方法(2)基于手部检测+手势分类... 查看详情

基于yolov5的手势识别系统(含手势识别数据集+训练代码)(代码片段)

基于YOLOv5的手势识别系统(含手势识别数据集+训练代码)目录基于YOLOv5的手势识别系统(含手势识别数据集+训练代码)1.前言2.手势识别的方法(1)基于多目标检测的手势识别方法(2)基于手部检测+手势分类... 查看详情

毕设题目:matlab手势识别

1案例背景手势识别可以分为基于可穿戴设备的识别、基于触摸技术的识别和基于计算机视觉的识别。其中,基于计算机视觉的识别,手势图像信息由一个或多个摄像头采集,采集的数据进行预处理,包括去噪和信... 查看详情

android手部检测和手势识别(含训练代码+android源码+手势识别数据集)(代码片段)

Android手部检测和手势识别(含训练代码+Android源码+手势识别数据集)目录Android实时手势动作识别(含训练代码++手势识别数据集)1.前言2.手势识别的方法(1)基于多目标检测的手势识别方法&#... 查看详情

android手部检测和手势识别(含训练代码+android源码+手势识别数据集)(代码片段)

Android手部检测和手势识别(含训练代码+Android源码+手势识别数据集)目录Android实时手势动作识别(含训练代码++手势识别数据集)1.前言2.手势识别的方法(1)基于多目标检测的手势识别方法&#... 查看详情

android实现手部检测和手势识别(含训练代码+android源码+手势识别数据集)(代码片段)

Android实现手部检测和手势识别(含训练代码+Android源码+手势识别数据集)目录Android实时手势动作识别(含训练代码++手势识别数据集)1.前言2.手势识别的方法(1)基于多目标检测的手势识别... 查看详情

基于stm32的手势识别检测

基于STM32的手势识别检测1.简介  手势识别是计算机科学和语言技术中的一个主题,目的是通过数学算法来识别人类手势。手势可以源自任何身体运动或状态,但通常源自面部或手。本领域中的当前焦点包括来自面部和手势... 查看详情

基于无线信号的手势识别研究现状调查

摘要:进入21世纪以来,人机交互技术持续发展,手势识别是代表之一。2013年,华盛顿大学的研究人员提出了使用无线信号进行手势识别的方法,给传统的手势识别技术带来的一定的挑战,但是这一技术并不是很成熟,暂时没有... 查看详情

图像识别(13)——手势识别——用matchshapes识别手形数字(代码片段)

...了基本的LED灯光点捕捉和轨迹绘制,接下来我要开始手势识别的研究过程。其实手势识别包含很多个方面,首先是手的检测(从图片中提取出手),然后根据交互功能的要求,有动态的识别,比如左右... 查看详情

手势到文本识别、OCR 或基于手势的本机 .NET 库

】手势到文本识别、OCR或基于手势的本机.NET库【英文标题】:Gesturetotextrecognition,OCRorGesturebased,native.NETlibrary【发布时间】:2012-02-0306:25:37【问题描述】:我正在为WindowsPhone7开发一个项目,我需要一个用于将形状识别为文本的库... 查看详情

如何在基于 ember 的应用程序中识别长按手势?

】如何在基于ember的应用程序中识别长按手势?【英文标题】:Howtorecognizelong-pressgestureinember-basedapp?【发布时间】:2013-12-2402:44:30【问题描述】:现在我正在开发基于html5和phoneGap的移动应用程序。JS名气是ember。应用程序的规范... 查看详情

如何用matlab实现数字手势的识别

...式识别、机器学习。一般的做法是:首先要有一定数量的手势图片;其次将训练用的手势图片进行人工分类,即“打上标签”再次将手势图片转换成轮廓图(可以用DFT、DCT、小波变换等计算出边缘,然后对边缘进行“扩张”即可... 查看详情

hagrid手势识别数据集使用说明和下载(代码片段)

 HaGRID手势识别数据集使用说明和下载目录 HaGRID手势识别数据集使用说明和下载1.HaGRID手势识别数据集说明2.HaGRID数据集下载(约716GB) 3.Light-HaGRID数据集下载(约18GB)(1)Light-HaGRID数据集说明(2)Light-HaGRID数据集下... 查看详情

基于视频理解tsm和数据集20bn-jester-v1的27类手势识别

基于视频理解TSM-mobilenetv2和数据集20bn-jester-v1的27类手势识别基于视频理解TSM-resnet和数据集20bn-jester-v1的27类手势识别一键运行TSM,修改后代码下载:下载链接20bn-jester-v1数据集百度网盘下载:下载链接识别demo: 查看详情

使用点击手势识别器禁用提示视图

】使用点击手势识别器禁用提示视图【英文标题】:Usingtapgesturerecognizertodisableatipview【发布时间】:2017-12-0210:03:25【问题描述】:目前,我有问题按钮在按下时会显示提示视图。现在我想做的是在按下按钮后锁定按钮,但是在提... 查看详情

计算机视觉基于python—opencv的手势识别详解(代码片段)

...录更新日记前言前期准备识别手部模型识别视频输入方法手势识别方法完整代码结语更新日记更新日记:2022.04.18:应各位网友需求,已mp库更新后的手部识别模型代码。目前可以正常的RUN啦!!前言人工智能... 查看详情