资源简介
简单背景下在线识别手势,可与系统进行猜拳游戏
代码片段和文件信息
function max=gesturef(A)
%max为手指数目
% % figure
% imshow(A)
%空间转换
[r c]=size(A);
if r>800
A=imresize(A[300 300]);
end
% figure
% imshow(A)
%空间转换
% YUV=rgb2ycbcr(A);%转化为YUV空间
% imageY=YUV(::1);
% imageCg=YUV(::2);
% imageCr=YUV(::3);
se=fspecial(‘average‘[33]);%平滑滤波
A=imfilter(Ase);
imageR=A(::1);
imageG=A(::2);
imageB=A(::3);
imageY=16+0.2568*imageR+0.5041*imageG+0.0979*imageB;
imageCg=128-0.318*imageR+0.4392*imageG-0.1212*imageB;
imageCr=128+0.4392*imageR-0.3677*imageG-0.0714*imageB;
Y=find(imageY<=230&imageY>=35);%根据统计的数据找出处在该范围的像素的下标
Cg=find(imageCg<=128&imageCg>=80);
Cr=find(imageCr<=173&imageCr>=131);
index=intersect(Cgintersect(YCr));%找出三个平面的肤色坐标交集
BW=im2bw(A);%构造二值图
BW=zeros(size(BW));%全图置为黑色
BW(index)=1;%把肤色区域置为白色
% figure
% imshow(BW)
IM= bwareaopen(BWround(1/40*numel(BW)));%把包含像素点少的白色区域去除
% figure
% imshow(IM)
se = strel(‘disk‘round(numel(IM)/15000));
IM=imclose(IMse);%闭操作
% figure
% imshow(IM)
IM= bwareaopen(IMround(1/10*numel(IM)));%把包含像素点少的白色区域去除
% figure
% imshow(IM)
se=fspecial(‘average‘[55]);%平滑滤波
IM=imfilter(IMse);
% figure
% imshow(IM)
%检测手部长宽比
% [Lnum]=bwlabel(IM8);%找8连通区域
% if num==0
% figure;
% imshow(A)
% end
%
% for n=1:num
% [rc]=find(L==n);
% x1=min(c);
% x2=max(c);
% y1=min(r);
% y2=max(r);
% if ((x2-x1)/(y2-y1))<0.7 ||((x2-x1)/(y2-y1))>3
% index=find(L==n);
% IM(index)=0;%把长宽比不合要求的置为背景色
% end
% end
% [Lnum]=bwlabel(IM8);%找8连通区域
%
% if num==0
% figure;
% imshow(IM)
% end
%腐蚀得到重心
se = strel(‘disk‘3);
IM1=imerode(IMse);
[r c]=find(IM1==1);
while numel(r)>=500
IM1=imerode(IM1se);
[r c]=find(IM1==1);
end
% figure
% imshow(IM1)
centerx=r(1);%得到重心
centery=c(1);
IM(centerxcentery)=0;
% figure
% imshow(IM)
%求离重心最远的点
[r c]=find(IM==1);
BW = EDGE(IM‘sobel‘);%找到边缘
[r c]=find(BW==1);
max=0;
for k=1:numel(r)
distance=(r(k)-centerx)^2+(c(k)-centery)^2;
if distance>max
max=distance;
maxx=r(k);maxy=c(k);
end
end
%找同心圆
d=max^(1/2)/10;
deta=d/4;
angle=0:1/180*(2*pi)/30:2*pi;
for k=1:10
r=k*d;
x1(k:)=round(centerx+sin(angle)*r);%得到圆的坐标
y1(k:)=round(centery+cos(angle)*r);
end
%画同心圆
% IM1=IM;
% [r c]=size(IM);
% for k=1:10
% num=length(x1);
% for kk=1:num
% if x1(kkk)<=0|| x1(kkk)>=r||y1(kkk)<=0||y1(kkk)>=c
% continue;
% end
%
% IM1(x1(kkk)y1(kkk))=1;
%
% end
%
% end
% figure
% imshow(IM1)
[r c]=size(IM);
%找黑白色交界的个数
max=0;
fist=0;%拳头检测标志
for k=1:10
num=length(x1);
Qj=1;
Pj=1;
for kk=1:num
if x1(kkk)<=0|| x1(kkk)>=r||y1(kkk)<=0||y1(kkk)>=c||kk+1>num||x1(kkk+1)<=0|| x1(kkk+1)>=r||y1(kkk+1)<=0||y1(kkk+1)>=c
continue;
end
if IM(x1(kkk)y1(kkk))==0&&IM(x1(kkk+1)y1(kkk+1))==1%Q点坐标
if Qj-Pj>=1
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4260 2012-05-14 15:59 简单手势识别\gesturef.m
文件 12097 2012-06-03 11:38 简单手势识别\shot.fig
文件 7882 2012-05-11 20:53 简单手势识别\shot.m
文件 22555 2012-05-11 20:21 简单手势识别\剪子.jpg
文件 20283 2012-05-11 20:21 简单手势识别\布.jpg
文件 17065 2012-05-11 20:20 简单手势识别\石头.jpg
目录 0 2012-06-03 11:36 简单手势识别
----------- --------- ---------- ----- ----
84142 7
- 上一篇:空间面板计量
- 下一篇:jnd算法,最小可觉差
相关资源
- 基于MATLAB人民币识别系统.zip
- 基于KL变换的人脸识别 matlab
- matlab二代身份证文字数字切割识别
- 字符识别matlab源代码
- MATLAB身份证号码识别系统GUI论文.zip
- 基于 MATLAB 的身份证号码的识别算法
- matlab身份证号码识别毕业设计答辩演
- 利用BP神经网络实现手写体数字识别
- 基于Matlab行人检测系统
- 源程序-自动识别人民币面值大小
- MATLAB识别指针式仪表的示数
- 基于matlab的扑克牌识别
- matlab条码识别
- MATLAB 夜间车牌识别
- MATLAB 图像处理识别程序
- MATLAB发票动车票识别.zip
- MATLAB交通标志识别[GUI界面,论文].z
- MATLAB车牌[GUI,语音播报,论文,详细
- MATLAB数字表盘识别[GUI界面,界面丰富
- 基于SVM的matlab车牌识别
- Face Recognition with KNN in MATLAB(12017108
- MINIST 手写数字识别 MATLAB仿真
- 基于bp的英文字符识别
- 手写体识别——MATLAB代码
- 基于MATLAB的语音识别GMM
- 车牌识别程序
- 人脸识别yale数据.mat格式
- Matlab指纹识别教程-整套指纹识别的学
- Matlab在图像处理与目标识别方面的应
- 基于PCA和SVM的人脸识别.zip
评论
共有 条评论