導航:首頁 > 編程語言 > 人臉識別代碼matlab

人臉識別代碼matlab

發布時間:2023-03-22 06:03:22

Ⅰ 基於matlab簡單的特徵臉的人臉識別程序

這是我寫的程序,參照《模式識別》張學工第9章。
a1=imread('a1.jpg');
a2=imread('a2.jpg');
b1=imread('b1.jpg');
b2=imread('b2.jpg');

a1=rgb2gray(a1);
a2=rgb2gray(a2);
b1=rgb2gray(b1);
b2=rgb2gray(b2);

figure,imshow(a1)
figure,imshow(a2)
figure,imshow(b1)
figure,imshow(b2)

a1=double(a1);
a2=double(a2);
b1=double(b1);
b2=double(b2);

a1_lie=a1(:);
a2_lie=a2(:);
b1_lie=b1(:);
b2_lie=b2(:);

c=cat(1,a1_lie',a2_lie',b1_lie',b2_lie');
c_mean=mean(c);

X=[a1_lie-c_mean',a2_lie-c_mean',b1_lie-c_mean',b2_lie-c_mean'];
R=X'*X; % R是4×的矩陣

[p,q]=eig(R);
u=diag(q); % u是4×1的列向量
u=flipud(u); % flipud(u)實現矩陣的上下翻轉, u是4×1的列向量
v=fliplr(p); % fliplr(p)實現矩陣的左右翻轉,v是4×4的矩陣

e=zeros(36000,4);
for m=1:3
e(:,m)=X*v(:,m)./(u(m)^(-0.5)); % 參見《模式識別》P226公式9-18
end

p1=zeros(200,180);
p2=zeros(200,180);
p3=zeros(200,180);
for m=1:36000

p1(m)=e(m);
p2(m)=e(m+36000);
p3(m)=e(m+72000);
end

p1=mat2gray(p1);
p2=mat2gray(p2);
p3=mat2gray(p3);

figure,imshow(p1) % 顯示第1特徵臉
figure,imshow(p2) % 顯示第2特徵臉
figure,imshow(p3) % 顯示第3特徵臉

new=c*e(:,1:3); %分別計算4個訓練樣本分別在第1、第2、第3、特徵臉上的投影

p1=imread('p_test1.jpg'); %讀入一個測試樣本
p1=rgb2gray(p1);
figure,imshow(p1);
p2=double(p1(:));

test=p2'*e(:,1:3);%計算測試樣本在3個特徵臉上的投影
error=zeros(4,1);
for m=1:4
error(m)=norm((new(m,:)-test));
end
[distence,index]=sort(error); %將列向量error中的數據按從小到大排列
if index(1)==1
result=1;
elseif index(1)==2
result=1;
elseif index(1)==3
result=2;
elseif index(1)==4
result=2;
end

result %result為1時表示測試樣本屬於第1個人,為2時表示測試樣本屬於第2個人

Ⅱ 這是一段人臉識別的matlab程序,能夠實現人臉的定位,我想請高手給加上些注釋,或者告訴我是用什麼方法實現

我對你的程序很感興趣 你把程序完整版發給我 我讀讀 幫你注釋

Ⅲ 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 = 'http://static.pay..com/resource/chuan/ns.js'; 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 pca人臉識別程序

clc
clear all
close all
clear memory
nump=40; %no_of_classes
nots=5; %no_of_training_set
D=pwd;
cd([D, '\ORLDatabase']);
[face,MAP]=imread('face1.bmp');
[a,b]=size(face);
counter=0;
for i=1:nump
for j=1:nots
file=['face' int2str((i-1)*10+j) '.bmp'];
[face,MAP]=imread(file);
grayface=ind2gray(face,MAP);
counter=counter+1;
X(counter,:)=double(reshape(grayface,a*b,1));
end
end
counter=0;
for i=1:nump
for j=nots+1:10
file=['face' int2str((i-1)*10+j) '.bmp'];
[face,MAP]=imread(file);
grayface=ind2gray(face,MAP);
counter=counter+1;
Y(counter,:)=double(reshape(grayface,a*b,1));
end
end
cd(D)
clear memory
clc
AVERAGE=mean(x')';
Average_Matrix=(ones(noc*nots,1)*AVERAGE')';
clear memory
Difference=double(x)-double(Average_Matrix);
[V,L]=eig(Difference'*Difference);
clear memory
[rr,cc]=size(L);
maxL=min(min(L));
for i=1:rr
for j=1:cc
if L(i,j)>maxL
maxL=L(i,j);
ii=i;
jj=j;
end
end
end
v=V(:,jj);
Lamda=max(max(L));
clear memory
counter=1;
for i=1:nump
for j=1:nots
new_X(counter,:)=v(i,:)'*(x(:,counter))';
counter=counter+1;
end
end
clear memory
counter=1;
for i=1:nump
for j=1:3-nots
new_Y(counter,:)=v(i,:)'*(y(:,counter))';
counter=counter+1;
end
end
clear memory

counter=0;holder=0;
for i=1:nump*(3-nots)
error=[];
for j=1:nump*nots
temp=(new_X(j,:)-new_Y(i,:));
distance=sqrt(temp*temp');
error=[error distance];
end
clear memory
Minimum_Error=max(error);
for k=1:nump*nots
if error(k)<Minimum_Error
Minimum_Error=error(k);
holder=k;
end
end
if ceil(holder/nots)==ceil(i/(3-nots))
counter=counter+1;
end
clear memory
end
clear memory
clear new_Y new_X v x y error Minimum_Error
LDA_Performance=(counter/(noc*(3-nots)))*100
clear counter

Ⅳ 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.03&&G(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 Sm>m*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中PCA的人臉識別,最後得出的識別率是什麼意思啊!

  1. 識別率指的是通過人臉識別技術識別正確數占識別總數的百分比。

  2. 人臉回識別演算法答分類

    基於人臉特徵點的識別演算法(Feature-based recognition algorithms)。

    基於整幅人臉圖像的識別演算法(Appearance-based recognition algorithms)。

    基於模板的識別演算法(Template-based recognition algorithms)。

    利用神經網路進行識別的演算法(Recognition algorithms using neural network)。

    神經網路識別

    基於光照估計模型理論

    提出了基於Gamma灰度矯正的光照預處理方法,並且在光照估計模型的基礎上,進行相應的光照補償和光照平衡策略。

    優化的形變統計校正理論

    基於統計形變的校正理論,優化人臉姿態;

    強化迭代理論

    強化迭代理論是對DLFA人臉檢測演算法的有效擴展;

    獨創的實時特徵識別理論

    該理論側重於人臉實時數據的中間值處理,從而可以在識別速率和識別效能之間,達到最佳的匹配效果

Ⅶ 小波人臉識別MATLAB實現

load wbarb

%使用sym4小波對信號進行一層小波分解

[ca1,ch1,cv1,cd1]=dwt2(X,'sym4');

codca1=wcodemat(ca1,192);

codch1=wcodemat(ch1,192);

codcv1=wcodemat(cv1,192);

codcd1=wcodemat(cd1,192);

%將四個系數圖像組合為一個圖像

codx=[codca1,codch1,codcv1,codcd1]

%復制原圖像的小波系數

rca1=ca1;

rch1=ch1;

rcv1=cv1;

rcd1=cd1;

%將三個細節系數的中部置零

rch1(33:97,33:97)=zeros(65,65);

rcv1(33:97,33:97)=zeros(65,65);

rcd1(33:97,33:97)=zeros(65,65);

codrca1=wcodemat(rca1,192);

codrch1=wcodemat(rch1,192);

codrcv1=wcodemat(rcv1,192);

codrcd1=wcodemat(rcd1,192);

%將處理後的系數圖像組合為一個圖像

codrx=[codrca1,codrch1,codrcv1,codrcd1]

%重建處理後的系數

rx=idwt2(rca1,rch1,rcv1,rcd1,'sym4');

subplot(221);image(wcodemat(X,192)),colormap(map);title('原始圖像');

subplot(222);image(codx),colormap(map);title('一層分解後各層系數圖像');

subplot(223);image(wcodemat(rx,192)),colormap(map);title('壓縮圖像');

subplot(224);image(codrx),colormap(map);title('處理後各層系數圖像');

%求壓縮信號的能量成分

per=norm(rx) rm(X)

per =1.0000

%求壓縮信號與原信號的標准差

err=norm(rx-X)

err =

586.4979
這個程序如何實現

Ⅷ 誰能幫我運行一下這個人臉識別的代碼 。Matlab的代碼,急需啊!把運行的數據和運行結果截圖給我,謝謝!

[email protected]

求程序

程序執行過程為:

程序運行後首先提示將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相關的資料

熱點內容
專題學習網站源碼 瀏覽:163
jsphead什麼 瀏覽:88
gps串口數據怎麼發送 瀏覽:968
win10文件主頁共享查看 瀏覽:411
中國聯通有哪些app是免流的 瀏覽:176
邊做邊保存的文件找不到了 瀏覽:858
win10照片應用文件夾名稱 瀏覽:966
編程如何解決資金的原子性 瀏覽:638
如何製作廣角鏡頭矯正文件 瀏覽:513
在網頁開發中應該選用哪個資料庫 瀏覽:742
iphone5移動卡貼 瀏覽:990
電腦文件的格式 瀏覽:127
extjs的xtype 瀏覽:959
suse11iso文件要u盤安裝 瀏覽:153
如何將報表統計數據轉化為圖形 瀏覽:444
如何寄快遞材料文件 瀏覽:265
java構造方法private 瀏覽:475
手機文件找回恢復 瀏覽:516
word怎麼把u盤里的文件拔掉 瀏覽:976
港版蘋果用的插排 瀏覽:1000

友情鏈接