pgm是什么意思 pgm是什么意思( 二 )
从第二行开始下面是4个if条件语句 。第一个if语句,如下所示:
if nargin ~= 4
disp('输入的参数必须是4个');
return;
end
它的功能是:判断输入变量个数是不是4个,nargin表示输入变量个数,当nargin不等于4时,在命令窗口中显示“输入的参数必须是4个”,并终止整个程序(由return实现) 。注意:if语句和for循环都是用end结束的 。
第2个if语句的功能是:判断输入变量dtrain的维数是否是2维,如果不是2维的话,就报错,并终止程序 。
第3个if语句的功能和第2个if语句几乎相同,只不过这里判断的变量是dtest 。
第4个if语句的功能是判断训练样本的特征向量维数和测试样本的特征向量维数是否相等 。如果不相等,欧氏距离也就没有办法计算了!!!
思考:为什么加这些if语句?
编写函数文件是为了实现一定的功能的,但它只能处理特定的数据 。如果输入的数据不符合程序的需要,程序执行过程中也会报错(这还是好事,如果不报错,你的程序按照错误的方式执行,你还以为结果是正确的,这才真悲剧!) 。所以,为了程序的正常运行,有必要在正式执行程序前,检测一下输入变量是否符号要求 。
下面就是程序的主要内容了,就像脚本文件中一样写代码就可以了 。标记2下面的四行语句的功能是将输入变量都变成double型,目的是为了防止有的输入变量不是双精度 。这四行分别将训练样本、测试样本、训练样本标签和测试样本标签变成双精度数据 。
标记3和标记4之间的代码如下所示:
index = zeros(m2,1);
第一行代码计算了dtrain的尺寸,m1即dtrain的行数;同理,第2行代码计算dtest的行数m2 。第3行生成的全0变量index,是用来存储测试样本的预测标签的 。
标记4下面的for循环实现了欧式距离分类器的功能 。其中,i=1:m2分别对应每一个测试样本,即最外边的循环执行一次,就处理一个测试样本 。”distance = 1000000;”设定了初始距离(该距离必须足够大) 。内部的for循环j = 1:m1 是对所有的训练样本进行了遍历,其实就是一个测试样本和所有的训练样本做了次比较 。“temp = sqrt(norm(dtest(i,:) - dtrain(j,:)));”就是利用上面的公式计算欧式距离 。下面的if语句实现的功能是:判断刚刚计算的欧式距离temp和参考距离distance的大小关系,当temp小于distance时,说明这两个样本之间的距离更近(欧式距离又称为最近距离法,当然认为最近的两个样本为同一类了),就把temp的值赋给distance,并将该训练样本的标签放到index中,作为该测试样本的预测标签 。总的来说,就是先拿出一个测试样本,然后计算它和所有训练样本之间的距离,与它距离最近的训练样本的标签就是该测试样本的预测值 。
标记5下面的语句就是实现计算准确度,并在命令窗口中显示准确度 。第一个语句计算了准确度,index是测试样本的预测值,ltest是测试样本的实际值,如果它们相等,就说明预测结果对呗 。求预测对的个数sum()并除以总数m2,就得到了准确度 。
最简人脸识别程序
最简单的人脸识别算法的实现程序在FaceED1.m文件中,当然为了便于大家观察,还是将代码贴在下面吧 。
% ORL人脸库 + 欧式距离分类器
% 有均值化
clear;
clc;
-------------------------------------------------------------------------------------------------------------标记1
M=40; %40个人
【pgm是什么意思 pgm是什么意思】N=5; %选每个人的前五幅图片
row=8; %图像尺寸归一化后的行数
clum=7; %图像尺寸归一化后的列数
pho=zeros(row*clum,M*N); %用来存储训练样本
pic=zeros(row*clum,M*(10-N)); %用来存储测试样本
-------------------------------------------------------------------------------------------------------------标记2
% 导入训练样本
t=1; %赋值t的值为1
for i=1:M
for j=1:N
str=strcat('F:\科研\人脸识别\人脸数据库\ORL\',num2str(i),'_',num2str(j),'.pgm');%获得图像的路径
I1=imread(str); %读入图像
I2=imresize(I1,
pho(:,t) = reshape(I2,
t=t+1; %计数变量t加1
end
end
dtrain = pho'; % 转置,dtrain中每一行表示一个样本
-------------------------------------------------------------------------------------------------------------标记3
% 导入测试样本
t = 1;
for i=1:M
for j=N+1:10
str=strcat('F:\科研\人脸识别\人脸数据库\ORL\',num2str(i),'_',num2str(j),'.pgm');%获得图像的路径
推荐阅读
- 鸽子党什么意思
- 12mis含义是什么
- 医学endo什么意思
- 10h是什么意思
- 核数是什么意思
- 12个月花歌谣是什么
- 14点30分是什么时辰
- x和xs外观区别是什么
- 26朵玫瑰花代表什么意思
- 时间太瘦,指缝太宽什么意思
