Matlab实现简单的人脸识别程序

clear all;
close all;
F = imread(‘face9.jpg’);
F = rgb2gray(F); % 将图像转化为灰度图
level = graythresh(F);
BW = im2bw(F,level); % 将图像二值化
[n1 n2] = size(BW);
H = floor(n1/10); % 将图像分割成10个快
W = floor(n2/10);
h1 = 1;
h2 = H;
s = H*W; % 求得块的面积
h_i = H;
w_i = W;
for i = 1:10
w1 = 1;w2 =W; % 对应列初始化
for j = 1:10
if (w1 <= w_i || w2 >= 9*W) || (h1 <= h_i || h2 >= n1 - h_i) % 判断是否在图片四周的区域
loc = find(BW(h1:h2,w1:w2) == 0)
[num,~] = size(loc);
pr = num*100/s; % 计算灰度为黑色的像素占的比例
if pr < 100
BW(h1:h2,w1:w2) = 0;
end
% figure,imshow(BW);
% hold on
end
w1 = w1+W; % 跳到下一个块对应的列
w2 = w2+W;
end
h1 = h1+H; % 跳到下一个块对应的行
h2 = h2+H;
end
L = bwlabel(BW,8); % 区域标记
BB = regionprops(L,’BoundingBox’); % 得到包围的矩形框
Bd = cat(1,BB.BoundingBox);
[Bd_i,~] = size(Bd);
mx = 0;
for k = 1:Bd_i
p = Bd(k, 3)*Bd(k, 4);
% 如果满足面积块大,而且宽/高<1.8,则跳到Bd的该行
if p > mx && (Bd(k,3)/Bd(k,4)) < 1.8
mx = p;
j = k;
end
end
imshow(F); hold on; % 显示图片
% 画出矩形框
rectangle(‘Position’, Bd(j, :), …
‘EdgeColor’, ‘r’, ‘LineWidth’, 3);
title(‘标记图像’, ‘FontWeight’, ‘Bold’);

  • 16
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
人脸识别可以分为训练和测试两个阶段。在训练阶段,我们需要从已知的人脸图像中提取特征,然后使用这些特征来训练分类器。在测试阶段,我们使用训练好的分类器来识别新的人脸。 以下是一个基于MATLAB人脸识别程序的示例: 1. 数据集准备 首先,我们需要一个包含已知人脸图像的数据集。在本例中,我们将使用ORL人脸数据库。将下载的数据集解压缩到MATLAB的当前工作目录下。 2. 特征提取 我们将使用主成分分析(PCA)算法来提取人脸图像的特征。PCA算法可以将高维数据降维到低维,从而减少计算量并提高分类器的准确性。 首先,我们需要将所有的人脸图像转换为向量,并将这些向量组合成一个矩阵。然后,我们使用MATLAB的pca函数来计算主成分,并将其用于将人脸图像转换为低维特征向量。 以下是一个简单的特征提取代码示例: ```matlab % Load face dataset faceDataset = imageDatastore('orl_faces', 'IncludeSubfolders', true, 'LabelSource', 'foldernames'); % Extract features using PCA [coeff, score, latent] = pca(double(faceDataset.readall())); numComponents = 50; % Number of principal components to keep featureVector = coeff(:, 1:numComponents)'; ``` 在这个示例中,我们加载了ORL人脸数据库,并使用PCA提取了50个主成分。最终特征向量的维度是50。 3. 训练分类器 我们将使用支持向量机(SVM)算法来训练分类器。SVM是一种二元分类器,可以将数据分为两个类别。对于人脸识别问题,我们将为每个已知人脸图像分配一个标签,并将其作为SVM的训练数据。 以下是一个简单的训练分类器代码示例: ```matlab % Train SVM classifier svmModel = fitcecoc(featureVector, faceDataset.Labels); ``` 在这个示例中,我们使用MATLAB的fitcecoc函数来训练SVM分类器。featureVector是特征矩阵,faceDataset.Labels是标签。 4. 测试分类器 在测试阶段,我们将使用训练好的SVM分类器来识别新的人脸图像。我们将对每个新图像提取特征,并使用SVM分类器将其分为已知人脸中的一个。 以下是一个简单的测试分类器代码示例: ```matlab % Test classifier on new images testDataset = imageDatastore('test_faces', 'IncludeSubfolders', true, 'LabelSource', 'foldernames'); numImages = numel(testDataset.Files); for i = 1:numImages % Read test image testImage = readimage(testDataset, i); % Extract features using PCA featureVector = (testImage(:)' * coeff(:, 1:numComponents))'; % Classify test image using SVM predictedLabel = predict(svmModel, featureVector'); % Display result figure; imshow(testImage); title(['Predicted: ' char(predictedLabel)]); end ``` 在这个示例中,我们加载了一个包含新人脸图像的测试数据集,并对每个图像提取特征。然后,我们使用训练好的SVM分类器将其分类,并显示结果。 这就是一个基于MATLAB人脸识别程序简单示例。请注意,这只是一个基本示例,实际中可能需要更复杂的算法和技术来实现更准确的人脸识别

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值