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

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 );endend%以下是二值化及统计手势面积Gray_data = int32(zeros(ROW,COL));for r = 1:ROW for c = 1:COLif Cb_data(r, c)>133 && Cb_data(r, c)<173 && Cr_data(r, c)>77 && Cr_data(r, c)<127Gray_data(r,c) = 0 ;area = area + 1 ;elseGray_data(r,c) = 255 ;end            endend%以下是边缘检测%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+1for j = 1:width-n+1mb = x1( i:(i+n-1),  j:(j+n-1) );mb = mb(:);mm = median(mb);x2( i+(n-1)/2,  j+(n-1)/2 ) = mm;endendimg = 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)

【手势识别】基于matlab肤色静态手势识别【含Matlab源码 288期】相关推荐

  1. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  2. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

  3. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...

  4. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】

    一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...

  5. 【Matlab语音分析】语音信号分析【含GUI源码 1718期】

    一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...

  6. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  7. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  8. 【Matlab语音加密】语音信号加密解密(带面板)【含GUI源码 181期】

    一.代码运行视频(哔哩哔哩) [Matlab语音加密]语音信号加密解密(带面板)[含GUI源码 181期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆 ...

  9. 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】

    一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  10. 【Matlab人脸识别】KL变换人脸识别【含GUI源码 859期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]KL变换人脸识别[含GUI源码 859期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

最新文章

  1. 剑指offer:正则表达式匹配
  2. c++ 出现1.#IND、1.#INF
  3. 【OpenCV3】cv::Mat块访问与操作(ROI区域的选取)
  4. pythonscatter简书_python plotly 使用教程
  5. Curator实现分布式锁的基本原理-getTheLock
  6. HALCON示例程序fin.hdev通过形态学检测缺陷
  7. jenkins java_具有WildFly,Arquillian,Jenkins和OpenShift的Java EE 7部署管道
  8. core--线程同步(内核模式)
  9. Linux用户配置文件(第二版)
  10. FileMessageSet分析
  11. Linux 简单架设防火墙路由器
  12. 深入针式PKM应用系列
  13. Unity使用TextMeshPro显示字体
  14. 毕业论文Word排版专题
  15. windows下搭建voip服务器
  16. 硕思闪客精灵怎么导出flash(gif)动画,flash游戏源文件疑难问题解答(注册码)
  17. wincc逻辑运算符_wincc中表达式及公式
  18. ZYNQ UltraScale MPSOC,使用PL端AXI_UART16550IP核,且在PS端控制下实现RS485通信-----轮询方式
  19. Linux面试题史上最全总结
  20. 飞机大战实现--c++

热门文章

  1. SAP 开发陷阱一箩筐(05)——绘制屏幕时无法给单选按钮分组
  2. 1-关于单片机通信数据传输(中断发送,大小端,IEEE754浮点型格式,共用体,空闲中断,环形队列)...
  3. 函数的调用过程——栈帧。
  4. Visual Studio报错:由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值...
  5. 常见的嵌入式linux学习和如何选择ARM芯片问答
  6. 很值得学习的java 画图板源码
  7. 算法与数据结构 第3章 高级排序算法下 学习笔记
  8. Atitit Kafka 使用总结 内容 Kafka2.0 50M1 启动 要启动zookeeper 先,比ativemp麻烦很多啊1 Kafka生产者 1 Kafka消费者2 2
  9. Atitit 知识管理 知识体系专业分类介绍
  10. paip.输入法编程---词库多意义条目分割 python实现.