AR faceDB 由MAT格式转换为图片格式

最近在写人脸识别的毕业论文,需要一些人脸的数据库,知名的人脸数据库有好多!我看的那篇论文它用到3个数据库,分别是ORL,AR,和Yale。

下这些数据库都比较难,ORL这个数据库是我以前下过的,我也忘了我是怎么下载的,AR这个数据库我在数据堂这个网站上下的,但是下的是matlab的MAT文件。我想用普通的图片浏览器打开这些图片看看它们都是怎样的,于是就用matlab编了个小程序让这个mat的人脸数据转换为图片。


AR人脸数据库与程序资源


程序思想:

MAT文件包含测试和训练的图片信息,由两个图片矩阵和类标矩阵组成。我将测试人脸跟训练人脸放到两个不同的文件夹下,再对每个人的不同图片放到一个文件夹下。

人脸矩阵是一个2580*700的矩阵,2580=64*43是一张图片的分辨率。

先用reshape将这个矩阵转换为一个3维的矩阵。然后再对每张照片按类标写入到文件系统中。


程序代码

clc;
clear;
load('AR_database_60_43.mat');
newTestFace = reshape(NewTest_DAT, 60,43,700);
newTrainFace = reshape(NewTrain_DAT, 60,43,700);

num = size(newTestFace,3);
faceLabel = -1;
for i = 1 : num
    if(faceLabel ~= testlabels(i))
        faceLabel = testlabels(i);
        faceNum = 0;
    end
    faceNum = faceNum + 1;
    % there is no the floder
    if(exist(sprintf('test\\p%d',faceLabel),'dir') ~= 7)
        mkdir(sprintf('test\\p%d',faceLabel));
    end   
    imwrite(newTestFace(:,:,i),sprintf('test\\p%d\\%d.jpg',faceLabel,faceNum ));
end

faceLabel = -1;
num = size(newTrainFace,3);
for i = 1 : num
    if(faceLabel ~= trainlabels(i))
        faceLabel = trainlabels(i);
        faceNum = 0;
    end
    faceNum = faceNum + 1;
    if(exist(sprintf('train\\p%d',faceLabel),'dir') == 7)
        mkdir(sprintf('train\\p%d',faceLabel));
    end   
    imwrite(newTrainFace(:,:,i),sprintf('train\\p%d\\%d.jpg',faceLabel,faceNum ));
end



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是基于K-L变换的人脸识别的MATLAB实现代码: ```matlab % 读入人脸数据库 faceDB = dir('faceDB/*.bmp'); % 将所有人脸图像作为矩阵存储在faces矩阵中 faces = []; for i = 1:length(faceDB) face = imread(['faceDB/' faceDB(i).name]); faces(:, i) = face(:); end % 求出平均脸 meanFace = mean(faces, 2); % 将所有脸减去平均脸,得到差异矩阵 diffFaces = faces - meanFace; % 计算差异矩阵的协方差矩阵 covMatrix = cov(diffFaces'); % 对协方差矩阵进行特征分解 [V, D] = eig(covMatrix); % 将特征向量作为新的基向量,构造投影矩阵 projectionMatrix = V'; % 将所有脸投影到新的基向量空间中 projectedFaces = projectionMatrix * diffFaces; % 读入测试图像 testFace = imread('test.bmp'); % 将测试图像投影到新的基向量空间中 projectedTestFace = projectionMatrix * (double(testFace(:)) - meanFace); % 计算测试图像与每个人脸的距离(采用欧氏距离) distances = sqrt(sum((projectedFaces - projectedTestFace).^2)); % 找出距离最近的人脸 [minDistance, index] = min(distances); % 显示结果 subplot(1, 2, 1); imshow(testFace); title('Test Face'); subplot(1, 2, 2); imshow(reshape(faces(:, index), size(testFace))); title(['Matched Face (distance = ' num2str(minDistance) ')']); ``` 注意,以上代码只是基于K-L变换的人脸识别的简单实现,实际应用中还需要考虑更多因素,例如人脸图像的预处理、特征向量的选择、距离度量的优化等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值