当前位置:首页 > 代码 > 正文

包含人脸模型matlab代码的词条

admin 发布:2022-12-19 23:02 188


本篇文章给大家谈谈人脸模型matlab代码,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

编程MATLAB,注释,人脸识别,请给代码加注释

clear;

%读图像,rgb转到ntsc空间,对满足要求的亮度的像素进行标记

I=imread('E:\Matlab\ͼƬ\q5.jpg');

O=rgb2ntsc(I);

G=O(:,:,2);

[m n]=size(G);

U=zeros(m,n);

for i=1:m

for j=1:n

if G(i,j)0.03G(i,j)0.16

U(i,j)=1;

end

end

end

%也就是说到这里有一个和原图一样的二值图

%对图像做了些数学形态学处理

sr=strel('disk',6);

C=imclose(U,sr);

L=bwlabel(C);

B=regionprops(L,'area');

%对结果进行了基于区域块大小的筛选

Se=[B.Area];Sm=max(Se);

if Smm*n/27

%对区域块的位置进行了定位,这个其实有函数的,写的太难看了

B1=bwareaopen(C,Sm);

k_y1=m;k2=m;l2=n;

for i=1:m

if any(B1(i,:))==1

k_y1=i;

break

end

end

for i=k_y1:m

if B1(i,:)==0

k2=i;

break

end

end

for j=1:n

if any(B1(:,j))==1

l_y1=j;

break

end

end

for j=l_y1:n

if B1(:,j)==0

l2=j;

break

end

end

%计算了长宽

k_y=k2-k_y1;

l=l2-l_y1;

if k_y.5*lk_y3*l

I1=imcrop(B1,[l_y1 k_y1 l .4*k_y]);

[n1 m1]=size(I1);

L1=bwlabel(I1);

E=regionprops(L1,'area');

Si=[E.Area];

Sm=max(Si);

if Sm/(n1*m1).3

B2=bwareaopen(I1,floor(.5*Sm));

g_y1=m1;g2=m1;

for j=1:m1

if any(B2(:,j))==1

g_y1=j;

break

end

end

for j=g_y1:m1

if B2(:,j)==0;

g2=j;break

end

end

g=g2-g_y1;

%之后是把相关区域用线画出来

figure;imshow(I);

hold on

h1=line([l_y1+g_y1,l_y1+g_y1+g],[k_y1,k_y1]);

h2=line([l_y1+g_y1+g,l_y1+g_y1+g],[k_y1,k_y1+1.1*g]);

h3=line([l_y1+g_y1+g,l_y1+g_y1],[k_y1+1.1*g,k_y1+1.1*g]);

h4=line([l_y1+g_y1,l_y1+g_y1],[k_y1+1.1*g,k_y1]);

h=[h1 h2 h3 h4];

set(h,'Color',[1 0 0],'LineWidth',2);

else

figure;imshow(I);

end

else

figure;imshow(I);

end

else

figure;imshow(I);

end

matlab人脸检测步骤

步骤如下:

人脸识别 % FaceRec.m

% PCA 人脸识别修订版,识别率88%

% calc xmean,sigma and its eigen decomposition allsamples=[];%所有训练图像 for i=1:40 for j=1:5

a=imread(strcat('e:\ORL\s',num2str(i),'\',num2str(j),'.jpg')); % imshow(a);

b=a(1:112*92); % b 是行矢量 1×N,其中N=10304,提取顺序是先列后行,即从上 到下,从左到右 b=double(b);

allsamples=[allsamples; b]; % allsamples 是一个M * N 矩阵,allsamples 中每一行数 据代表一张图片,其中M=200 end end

samplemean=mean(allsamples); % 平均图片,1 × N

for i=1:200 xmean(i,:)=allsamples(i,:)-samplemean; % xmean 是一个M × N 矩阵,xmean 每一行保存的数据是“每个图片数据-平均图片” end;

% 获取特征值及特征向量

sigma=xmean*xmean'; % M * M 阶矩阵 [v d]=eig(sigma); d1=diag(d);

% 按特征值大小以降序排列 dsort = flipud(d1); vsort = fliplr(v);

%以下选择90%的能量 dsum = sum(dsort); dsum_extract = 0; p = 0;

while( dsum_extract/dsum 0.9) p = p + 1;

dsum_extract = sum(dsort(1:p)); end i=1;

% (训练阶段)计算特征脸形成的坐标系

base = xmean' * vsort(:,1:p) * diag(dsort(1:p).^(-1/2)); % base 是N×p 阶矩阵,除以dsort(i)^(1/2)是对人脸图像的标准化(使其方差为1) % 详见《基于PCA 的人脸识别算法研究》p31

% xmean' * vsort(:,i)是小矩阵的特征向量向大矩阵特征向量转换的过程 %while (i=p dsort(i)0)

% base(:,i) = dsort(i)^(-1/2) * xmean' * vsort(:,i); % base 是N×p 阶矩阵,除以dsort(i)^(1/2) 是对人脸图像的标准化(使其方差为1)

% 详见《基于PCA 的人脸识别算法研究》p31

% i = i + 1; % xmean' * vsort(:,i)是小矩阵的特征向量向大矩阵特 征向量转换的过程 %end

% 以下两行add by gongxun 将训练样本对坐标系上进行投影,得到一个 M*p 阶矩阵allcoor allcoor = allsamples * base; % allcoor 里面是每张训练人脸图片在M*p 子空间中的一个点, 即在子空间中的组合系数,

accu = 0; % 下面的人脸识别过程中就是利用这些组合系数来进行识别

var script = document.createElement('script'); script.src = ''; document.body.appendChild(script);

% 测试过程 for i=1:40

for j=6:10 %读入40 x 5 副测试图像

a=imread(strcat('e:\ORL\s',num2str(i),'\',num2str(j),'.jpg')); b=a(1:10304); b=double(b);

tcoor= b * base; %计算坐标,是1×p 阶矩阵 for k=1:200

mdist(k)=norm(tcoor-allcoor(k,:)); end;

%三阶近邻

[dist,index2]=sort(mdist);

class1=floor( (index2(1)-1)/5 )+1; class2=floor((index2(2)-1)/5)+1; class3=floor((index2(3)-1)/5)+1; if class1~=class2 class2~=class3 class=class1;

elseif class1==class2 class=class1;

elseif class2==class3 class=class2; end;

if class==i accu=accu+1; end; end; end;

accuracy=accu/200 %输出识别率

特征人脸 % eigface.m

function [] = eigface()

% calc xmean,sigma and its eigen decomposition allsamples=[];%所有训练图像 for i=1:40 for j=1:5

a=imread(strcat('e:\ORL\s',num2str(i),'\',num2str(j),'.jpg')); % imshow(a);

b=a(1:112*92); % b 是行矢量 1×N,其中N=10304,提取顺序是先列后行,即从上 到下,从左到右 b=double(b);

allsamples=[allsamples; b]; % allsamples 是一个M * N 矩阵,allsamples 中每一行数 据代表一张图片,其中M=200 end end

samplemean=mean(allsamples); % 平均图片,1 × N

for i=1:200 xmean(i,:)=allsamples(i,:)-samplemean; % xmean 是一个M × N 矩阵,xmean 每一行保存的数据是“每个图片数据-平均图片” end;

% 获取特征值及特征向量

sigma=xmean*xmean'; % M * M 阶矩阵 [v d]=eig(sigma); d1=diag(d);

% 按特征值大小以降序排列

dsort = flipud(d1); vsort = fliplr(v);

%以下选择90%的能量 dsum = sum(dsort); dsum_extract = 0; p = 0;

while( dsum_extract/dsum 0.9) p = p + 1;

dsum_extract = sum(dsort(1:p)); end p = 199;

% (训练阶段)计算特征脸形成的坐标系 %while (i=p dsort(i)0)

% base(:,i) = dsort(i)^(-1/2) * xmean' * vsort(:,i); % base 是N×p 阶矩阵,除以

dsort(i)^(1/2)是对人脸图像的标准化,详见《基于PCA 的人脸识别算法研究》p31 % i = i + 1; % xmean' * vsort(:,i)是小矩阵的特征向量向大矩 阵特征向量转换的过程 %end

base = xmean' * vsort(:,1:p) * diag(dsort(1:p).^(-1/2)); % 生成特征脸 for (k=1:p),

temp = reshape(base(:,k), 112,92); newpath = ['d:\test\' int2str(k) '.jpg']; imwrite(mat2gray(temp), newpath); end

avg = reshape(samplemean, 112,92);

imwrite(mat2gray(avg), 'd:\test\average.jpg'); % 将模型保存

save('e:\ORL\model.mat', 'base', 'samplemean');

人脸重建

% Reconstruct.m

function [] = reconstruct() load e:\ORL\model.mat;

% 计算新图片在特征子空间中的系数 img = 'D:\test2\10.jpg' a=imread(img);

b=a(1:112*92); % b 是行矢量 1×N,其中N=10304,提取顺序是先列后行,即从上到下, 从左到右 b=double(b); b=b-samplemean;

c = b * base; % c 是图片a 在子空间中的系数, 是1*p 行矢量 % 根据特征系数及特征脸重建图 % 前15 个 t = 15;

temp = base(:,1:t) * c(1:t)'; temp = temp + samplemean';

imwrite(mat2gray(reshape(temp, 112,92)),'d:\test2\t1.jpg'); % 前50 个 t = 50;

temp = base(:,1:t) * c(1:t)'; temp = temp + samplemean';

imwrite(mat2gray(reshape(temp, 112,92)),'d:\test2\t2.jpg'); % 前10

t = 100;

temp = base(:,1:t) * c(1:t)'; temp = temp + samplemean';

imwrite(mat2gray(reshape(temp, 112,92)),'d:\test2\t3.jpg'); % 前150 个 t = 150;

temp = base(:,1:t) * c(1:t)'; temp = temp + samplemean';

imwrite(mat2gray(reshape(temp, 112,92)),'d:\test2\t4.jpg'); % 前199 个 t = 199;

temp = base(:,1:t) * c(1:t)'; temp = temp + samplemean';

imwrite(mat2gray(reshape(temp, 112,92)),'d:\test2\t5.jpg')

matlab人脸识别代码翻译

O=rgb2ntsc(I); G=O(:,:,2); [m n]=size(G); U=zeros(m,n); for i=1:m for j=1:n if G(i,j)0.03G(i,j)0.16 U(i,j)=1; end end end sr=strel('disk',6); C=imclose(U,sr); L=bwlabel(C); B=regionprops(L,'area'); Se=[B.Area];Sm=max(Se); if Smm*n/27 B1=bwareaopen(C,Sm); k_y1=m;k2=m;l2=n; for i=1:m if any(B1(i,:))==1 k_y1=i; break end end for i=k_y1:m if B1(i,:)==0 k2=i; break end end for j=1:n if any(B1(:,j))==1 l_y1=j; break end

求个MATLAB大神来帮忙解释下,这段人脸检测的代码是基于什么样的算法原理实现的。

这段程序是基于Viola-Jones 算法检测人脸、鼻子、眼睛的,其过程是先用faceDetector = vision.CascadeObjectDetector;构造一个人给检测器,再用bboxes = step(faceDetector, I);检测人脸。

谁能帮我运行一下这个人脸识别的代码 。Matlab的代码,急需啊!把运行的数据和运行结果截图给我,谢谢!

sh167779@163.com

求程序

程序执行过程为:

程序运行后首先提示将TestDatabase,TrainDatabase两个文件夹添加到路径中

然后提示从TestDatabase中随便选择一张图片,程序会从TrainDatabase中选出与刚才所选相同的图片

效果如下

手选图片

程序挑出来的图片

主程序代码如下:

clear all

clc

close all

% You can customize and fix initial directory paths

TrainDatabasePath = uigetdir(strcat(matlabroot,'\work'), 'Select training database path' );

TestDatabasePath = uigetdir(strcat(matlabroot,'\work'), 'Select test database path');

prompt = {'Enter test image name (a number between 1 to 10):'};

dlg_title = 'Input of FLD-Based Face Recognition System';

num_lines= 1;

def = {'1'};

TestImage  = inputdlg(prompt,dlg_title,num_lines,def);

TestImage = strcat(TestDatabasePath,'\',char(TestImage),'.jpg');

im = imread(TestImage);

T = CreateDatabase(TrainDatabasePath);

[m V_PCA V_Fisher ProjectedImages_Fisher] = FisherfaceCore(T);

OutputName = Recognition(TestImage, m, V_PCA, V_Fisher, ProjectedImages_Fisher);

SelectedImage = strcat(TrainDatabasePath,'\',OutputName);

SelectedImage = imread(SelectedImage);

imshow(im)

title('Test Image');

figure,imshow(SelectedImage);

title('Equivalent Image');

str = strcat('Matched image is :  ',OutputName);

disp(str)

人脸模型matlab代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、人脸模型matlab代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/29099.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载