91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 188KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發(fā)布日期: 2021-06-07
  • 語言: Matlab
  • 標簽: Eigenface??

資源簡介

用MATLAB實現Eigenface算法。 使用orl_face數據庫。 有兩個main函數,一個是把一個圖像數據轉為一行,另外是吧圖像數據轉為一列。

資源截圖

代碼片段和文件信息

%?eigenface

clear?all
close?all
clc

%step?1:Get?some?data
num?=?20;
[height?width]?=?size(imread(‘data\1.pgm‘));
Data(height*widthnum)?=?0;?%convert?one?image?data?into?a?column

for?i=1:num
????path?=?[‘data\‘num2str(i)‘.pgm‘];
????temp?=?imread(path);
????temp?=?im2double(temp);
????Data(:i)?=?reshape(temp?[]?1);???%convert?one?image?data?into?a?column
end

%setp?2:Subtract?the?mean
MeanValue?=?mean(Data?2);
OriginalMean?=?repmat(MeanValue1?size(Data2));
DataAdjust?=?Data?-?OriginalMean;

%step?3:Calculate?the?covariance?matrix
%?注意這里的cov函數,如果傳入參數是矩陣,那么行代表了維度,也就是上面的x1x2x3xn。
%?所以,這里DataAdjust需要轉置一下。
%?Covariance?=?cov(DataAdjust‘);
%?Covariance_2?=?(DataAdjust?*?DataAdjust‘)./(size(Data2)-1);?%驗證了A*A‘/(N-1)等于協方差矩陣

%step?4:calculate?the?eigenvectors?and?eigenvalues
%?[EigenVectors?EigenValues]?=?eig(Covariance);?%返回值EigenValues按照從小到大排序的,所以,從靠后的列選擇主成分

%step?5:choosing?components?and?forming?a?feature?vector.
[row?col]?=?size(Data);
if?row?>=?col
????length?=?col;
else
????length?=?row;
end
%?SortEigenVectors?=?fliplr(EigenVectors);?%特征向量排序,第一列對應的特征值最大,依次往后
%?FeatureVectors?=?SortEigenVectors(:1:length-1);?%%select?part?the?EigenVectors?as?the?components?here?is?the?first?length-1?columns

%用另外一種方法得到FeatureVectors針對的是數據維數較大的情況這種方法更快
C1?=?DataAdjust‘?*?DataAdjust;
[C1_EigenVectors?C1_EigenValues]?=?eig(C1);
V?=?DataAdjust?*?C1_EigenVectors;
%進行歸一化?這一步在好多敘述里都沒有提及到
EigenVectors_2?=?V?./?(ones(size(V?1)1)?*?sqrt(sum(V?.*?V)));
%選取pricipal?components
SortEigenVectors_2?=?fliplr(EigenVectors_2);
FeatureVectors?=?SortEigenVectors_2(:1:length-1);?

%選取一個特征向量進行展示,即所謂的特征臉,目前一共有20-1=19個特征臉
%?EigenFace_1?=?reshape(FeatureVectors(:2)height?width);
%?figure
%?imshow(EigenFace_1?[]);

%圖像數據投影到特征空間上
PatternVectors?=?FeatureVectors‘?*?DataAdjust;?%每一列代表一幅圖像投影到n-1維的空間里。


%測試圖像
%將一張圖像映射到特贈空間后得到的模式向量,也就是在n-1維上的各個投影
TestData?=?imread(‘D:\Matlab\3_eigenface\study\orl_faces\s20\2.pgm‘);
temp?=?im2double(TestData);
TestData?=?reshape(temp?[]?1);
TestDataPatternVector?=?FeatureVectors‘?*?(TestData?-?MeanValue);?
%利用歐氏距離進行比較。
result(1?length)?=?0;
for?i=1:length
????temp?=?(PatternVectors(:i)?-?TestDataPatternVector).^2;
????result(1i)?=?sqrt(sum(temp));
end
[minimum?index]?=?min(result);
X?=?[‘Match?the?s‘?num2str(index)?‘?successfully.??Congratulations!‘];
disp(X)









?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2016-12-07?19:17??data\
?????文件???????10318??2016-12-07?16:01??data\1.pgm
?????文件???????10318??2016-12-07?16:01??data\10.pgm
?????文件???????10318??2016-12-07?16:01??data\11.pgm
?????文件???????10318??2016-12-07?16:01??data\12.pgm
?????文件???????10318??2016-12-07?16:01??data\13.pgm
?????文件???????10318??2016-12-07?16:01??data\14.pgm
?????文件???????10318??2016-12-07?16:01??data\15.pgm
?????文件???????10318??2016-12-07?16:01??data\16.pgm
?????文件???????10318??2016-12-07?16:01??data\17.pgm
?????文件???????10318??2016-12-07?16:01??data\18.pgm
?????文件???????10318??2016-12-07?16:01??data\19.pgm
?????文件???????10318??2016-12-07?16:01??data\2.pgm
?????文件???????10318??2016-12-07?16:01??data\20.pgm
?????文件???????10318??2016-12-07?16:01??data\3.pgm
?????文件???????10318??2016-12-07?16:01??data\4.pgm
?????文件???????10318??2016-12-07?16:01??data\5.pgm
?????文件???????10318??2016-12-07?16:01??data\6.pgm
?????文件???????10318??2016-12-07?16:01??data\7.pgm
?????文件???????10318??2016-12-07?16:01??data\8.pgm
?????文件???????10318??2016-12-07?16:01??data\9.pgm
?????文件????????2676??2016-12-15?16:02??main_4_1.m
?????文件????????2722??2016-12-16?21:09??main_4_2.m

評論

共有 條評論