• 大小: 55KB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-01-26
  • 语言: Matlab
  • 标签: 手势  识别  

资源简介

简单背景下在线识别手势,可与系统进行猜拳游戏

资源截图

代码片段和文件信息

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


评论

共有 条评论