爱问知识人 爱问教育 医院库

PCA人脸识别程序问题

首页

PCA人脸识别程序问题

file:///C:/Program Files/MATLAB/R2010a/bin/html/FaceRec.html
代码调试好之后运行,出现这个问题:
??? Undefined function or method 'filpud' for input arguments of type 'double'.
以前没遇见过,求大牛指点。

提交回答

全部答案

    2018-03-06 18:38:00
  •   人脸识别MATLAB代码1 
    1。色彩空间转换
    function [r,g]=rgb_RGB(Ori_Face) ??????[r,g]代表什么,相当于z=(x,y)这样的函数吗
    R=Ori_Face(:,:,1);
    G=Ori_Face(:,:,2);
    B=Ori_Face(:,:,3);
    R1=im2double(R); % 将uint8型转换成double型
    G1=im2double(G);
    B1=im2double(B);
    RGB=R1 G1 B1;
    row=size(Ori_Face,1); % 行像素
    column=size(Ori_Face,2); % 列像素
    for i=1:row
    for j=1:column
    rr(i,j)=R1(i,j)/RGB(i,j);???????
    gg(i,j)=G1(i,j)/RGB(i,j);
    end
    end
    rrr=mean(rr);
    r=mean(rrr);????????why use "mean" again求两次mean为什么
    ggg=mean(gg);
    g=mean(ggg);
    2。
      均值和协方差
    t1=imread('D:matlab皮肤库1。jpg');[r1,g1]=rgb_RGB(t1);
    t2=imread('D:matlab皮肤库2。jpg');[r2,g2]=rgb_RGB(t2);
    t3=imread('D:matlab皮肤库3。
      jpg');[r3,g3]=rgb_RGB(t3);
    t4=imread('D:matlab皮肤库4。jpg');[r4,g4]=rgb_RGB(t4);
    t5=imread('D:matlab皮肤库5。
      jpg');[r5,g5]=rgb_RGB(t5);
    t6=imread('D:matlab皮肤库6。jpg');[r6,g6]=rgb_RGB(t6);
    t7=imread('D:matlab皮肤库7。
      jpg');[r7,g7]=rgb_RGB(t7);
    t8=imread('D:matlab皮肤库8。jpg');[r8,g8]=rgb_RGB(t8);
    t9=imread('D:matlab皮肤库9。
      jpg');[r9,g9]=rgb_RGB(t9);
    t10=imread('D:matlab皮肤库10。jpg');[r10,g10]=rgb_RGB(t10);
    t11=imread('D:matlab皮肤库11。
      jpg');[r11,g11]=rgb_RGB(t11);
    t12=imread('D:matlab皮肤库12。jpg');[r12,g12]=rgb_RGB(t12);
    t13=imread('D:matlab皮肤库13。
      jpg');[r13,g13]=rgb_RGB(t13);
    t14=imread('D:matlab皮肤库14。jpg');[r14,g14]=rgb_RGB(t14);
    t15=imread('D:matlab皮肤库15。
      jpg');[r15,g15]=rgb_RGB(t15);
    t16=imread('D:matlab皮肤库16。jpg');[r16,g16]=rgb_RGB(t16);
    t17=imread('D:matlab皮肤库17。
      jpg');[r17,g17]=rgb_RGB(t17);
    t18=imread('D:matlab皮肤库18。jpg');[r18,g18]=rgb_RGB(t18);
    t19=imread('D:matlab皮肤库19。
      jpg');[r19,g19]=rgb_RGB(t19);
    t20=imread('D:matlab皮肤库20。jpg');[r20,g20]=rgb_RGB(t20);
    t21=imread('D:matlab皮肤库21。
      jpg');[r21,g21]=rgb_RGB(t21);
    t22=imread('D:matlab皮肤库22。jpg');[r22,g22]=rgb_RGB(t22);
    t23=imread('D:matlab皮肤库23。
      jpg');[r23,g23]=rgb_RGB(t23);
    t24=imread('D:matlab皮肤库24。jpg');[r24,g24]=rgb_RGB(t24);
    t25=imread('D:matlab皮肤库25。
      jpg');[r25,g25]=rgb_RGB(t25);
    t26=imread('D:matlab皮肤库26。jpg');[r26,g26]=rgb_RGB(t26);
    t27=imread('D:matlab皮肤库27。
      jpg');[r27,g27]=rgb_RGB(t27);
    r=cat ????????????how to use:cat?cat函数怎么用?????
    (1,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23,r24,r25,r26,r27);
    g=cat(1,g1,g2,g3,g4,g5,g6,g7,g8,g9,g10,g11,g12,g13,g14,g15,g16,g17,g18,g19,g20,g21,g22,g23,g24,g25,g26,g27);
    m=mean([r,g])
    n=cov([r,g])
    3。
      求质心
    function [xmean, ymean] = center(bw) bw is a new image???
    bw=bwfill(bw,'holes'); ???????"holes"is what%二值图像背景区域填充bwfill函数不会用,holes代表什么
    area = bwarea(bw); %计算二值图像中的目标区域
    人脸识别MATLAB代码2
    [m n] =size(bw);
    bw=double(bw);
    xmean =0; ymean = 0;
    for i=1:m,
    for j=1:n,
    xmean = xmean j*bw(i,j);
    ymean = ymean i*bw(i,j);???xmean is what
    end;
    end;
    if(area==0)
    xmean=0;
    ymean=0;
    else
    xmean = xmean/area;
    ymean = ymean/area;
    xmean = round(xmean);
    ymean = round(ymean); %向最近整数元整

    end
    4。
       求偏转角度
    function [theta] = orient(bw,xmean,ymean)
    [m n] =size(bw);
    bw=double(bw);
    a = 0;
    b = 0;
    c = 0;
    for i=1:m,
    for j=1:n,
    a = a (j - xmean)^2 * bw(i,j);
    b = b (j - xmean) * (i - ymean) * bw(i,j);

    c = c (i - ymean)^2 * bw(i,j);
    end;

    end;
    b = 2 * b;
    theta = atan(b/(a-c))/2;
    theta = theta*(180/pi); % 从幅度转换到角度
    5。
       找区域边界
    function [left, right, up, down] = bianjie(A)
    [m n] = size(A);
    left = -1;
    right = -1;
    up = -1;
    down = -1;
    for j=1:n,
    for i=1:m,
    if (A(i,j) ~= 0) ???? ~ is what?是不等于0的意思吗?????
    left = j;
    break;
    end;
    end;
    if (left ~= -1) break;
    end;
    end;
    for j=n:-1:1,
    for i=1:m,
    if (A(i,j) ~= 0)

    right = j;
    break;
    end;
    end;
    if (right ~= -1) break;
    end;
    end;
    for i=1:m,
    for j=1:n,
    if (A(i,j) ~= 0)
    up = i;
    break;

    end;
    end;
    if (up ~= -1)
    break;
    end;
    end;
    for i=m:-1:1,????????m:-1:1 is what?什么意思????????、、
    for j=1:n,
    if (A(i,j) ~= 0)
    down = i;
    break;
    end;
    end;
    if (down ~= -1)
    break;
    end;
    end;
    6。
       求起始坐标
    function newcoord = checklimit(coord,maxval)
    newcoord = coord;?????????coord and maxval represent what?代表什么意思
    if (newcoordmaxval)
    newcoord=maxval;
    end;
    7。
      模板匹配
    function [ccorr, mfit, RectCoord] = mobanpipei(mult, frontalmodel,ly,wx,cx, cy, angle)
    frontalmodel=rgb2gray(frontalmodel);
    model_rot = imresize(frontalmodel,[ly wx],'bilinear'); % 调整模板大小
    model_rot = imrotate(model_rot,angle,'bilinear'); % 旋转模板
    [l,r,u,d] = bianjie(model_rot); % 求边界坐标
    bwmodel_rot=imcrop(model_rot,[l u (r-l) (d-u)]); % 选择模板人脸区域
    [modx,mody] =center(bwmodel_rot); % 求质心
    [morig, norig] = size(bwmodel_rot);
    % 产生一个覆盖了人脸模板的灰度图像
    mfit = zeros(size(mult));
    mfitbw = zeros(size(mult));?????????why need two zeros ?创建0矩阵有什么用途,为什么创建两个
    [limy, limx] = size(mfit);????mfit's number isn't mult's?mfit的大小不就是mult的吗???
    % 计算原图像中人脸模板的坐标
    startx = cx-modx;
    starty = cy-mody;
    endx = startx norig-1;
    endy = starty morig-1;
    startx = checklimit(startx,limx);????checklimit is what?这个函数怎么用
    starty = checklimit(starty,limy);
    endx = checklimit(endx,limx);
    endy = checklimit(endy,limy);
    for i=starty:endy,
    for j=startx:endx,
    mfit(i,j) = model_rot(i-starty 1,j-startx 1);
    end;
    end;
    ccorr = corr2(mfit,mult) % 计算相关度
    [l,r,u,d] = bianjie(bwmodel_rot);
    sx = startx l;
    sy = starty u;
    RectCoord = [sx sy (r-1) (d-u)]; % 产生矩形坐标
    8。
      主程序
    clear;
    [fname,pname]=uigetfile({'*。jpg';'*。bmp';'*。tif';'*。gif'},'Please choose a color picture。。
      。');
    % 返回打开的图片名与图片路径名
    [u,v]=size(fname);
    y=fname(v); ???????? % 图片格式代表值 这个函数不会用????????
    switch y
    case 0
    errordlg('You Should Load Image File First。
      。。','Warning。。。');
    case{'g';'G';'p';'P';'f';'F'}; % 图片格式若是JPG/jpg、BMP/bmp、TIF/tif或者GIF/gif,才打开
    I=cat(2,pname,fname);?????????/ cat函数????????、、
    Ori_Face=imread(I);
    subplot(2,3,1),imshow(Ori_Face);
    otherwise
    errordlg('You Should Load Image File First。
      。。','Warning。。。');
    end
    R=Ori_Face(:,:,1);
    G=Ori_Face(:,:,2);
    B=Ori_Face(:,:,3);
    R1=im2double(R); % 将uint8型转换成double型处理
    G1=im2double(G);
    B1=im2double(B);
    RGB=R1 G1 B1;

    人脸识别MATLAB代码4
    m=[ 0。
      4144,0。3174]; % 均值
    n=[0。0031,-0。0004;-0。0004,0。0003]; % 方差
    row=size(Ori_Face,1); % 行像素数
    column=size(Ori_Face,2); % 列像素数
    for i=1:row
    for j=1:column
    if RGB(i,j)==0
    rr(i,j)=0;gg(i,j)=0;????????where comes rr gg rr和gg是从哪里来的????
    else
    rr(i,j)=R1(i,j)/RGB(i,j); % rgb归一化
    gg(i,j)=G1(i,j)/RGB(i,j);
    x=[rr(i,j),gg(i,j)];
    p(i,j)=exp((-0。
      5)*(x-m)*inv(n)*(x-m)'); % 皮肤概率服从高斯分布
    end
    end
    end
    subplot(2,3,2);imshow(p); % 显示皮肤灰度图像
    low_pass=1/9*ones(3);
    image_low=filter2(low_pass, p); % 低通滤波去噪声
    subplot(2,3,3);imshow(image_low);
    % 自适应阀值程序
    previousSkin2 = zeros(i,j);
    changelist = [];????????????这是什么意思???????、、
    for threshold = 0。
      55:-0。1:0。05
    two_value = zeros(i,j);
    two_value(find(image_low>threshold)) = 1;
    change = sum(sum(two_value - previousSkin2));
    changelist = [changelist change];
    previousSkin2 = two_value;
    end
    [C, I] = min(changelist);
    optimalThreshold = (7-I)*0。
      1
    two_value = zeros(i,j);
    two_value(find(image_low>optimalThreshold)) = 1; % 二值化
    subplot(2,3,4);imshow(two_value); % 显示二值图像
    frontalmodel=imread('E:我的照片人脸模板。
      jpg'); % 读入人脸模板照片
    FaceCoord=[];????????????????????什么意思???????????
    imsourcegray=rgb2gray(Ori_Face); % 将原照片转换为灰度图像
    [L,N]=bwlabel(two_value,8); % 标注二值图像中连接的部分,L为数据矩阵,N为颗粒的个数
    for i=1:N,
    [x,y]=find(bwlabel(two_value)==i); % 寻找矩阵中标号为i的行和列的下标
    bwsegment = bwselect(two_value,y,x,8); % 选择出第i个颗粒
    numholes = 1-bweuler(bwsegment,4); % 计算此区域的空洞数
    if (numholes >= 1) % 若此区域至少包含一个洞,则将其选出进行下一步运算
    RectCoord = -1;
    [m n] = size(bwsegment);
    [cx,cy]=center(bwsegment); % 求此区域的质心
    bwnohole=bwfill(bwsegment,'holes'); % 将洞封住(将灰度值赋为1)
    justface = uint8(double(bwnohole) 。
      * double(imsourcegray));
    % 只在原照片的灰度图像中保留该候选区域
    angle = orient(bwsegment,cx,cy); % 求此区域的偏转角度
    bw = imrotate(bwsegment, angle, 'bilinear');
    bw = bwfill(bw,'holes');
    [l,r,u,d] =bianjie(bw);
    wx = (r - l 1); % 宽度
    ly = (d - u 1); % 高度
    wratio = ly/wx % 高宽比
    if ((0。
      8<=wratio)&(wratio<=2))
    % 如果目标区域的高度/宽度比例大于0。8且小于2。
      0,则将其选出进行下一步运算
    S=ly*wx; % 计算包含此区域矩形的面积

    这就是一个纯人脸识别的程序,特征提取我也有,最近弄人脸识别,大家可以互相学习,呵呵。

    H***

    2018-03-06 18:38:00

类似问题

换一换
  • 软件 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新资料 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):