-
Notifications
You must be signed in to change notification settings - Fork 0
/
Q2_a.m
69 lines (60 loc) · 1.86 KB
/
Q2_a.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
clear;
TRAIN_NUM = 468;
TEST_NUM = 52;
EIGVEC_NUM = 467;
load('Q1_b_EigVec.mat');
load('Q1_b_DataSet.mat');
trainMean = mean(trainSet.').';
trainSetDiff = zeros(2576,TRAIN_NUM);
for i = 1:TRAIN_NUM
trainSetDiff(:,i) = trainSet(:,i)-trainMean;
end
baseNumIndex = 1;
reconTrainImg = zeros(2576,4,3); %(pixcel, different number of bases, img)
reconTrain = zeros(EIGVEC_NUM,4,3); %(bases, different number of bases, img)
for baseNum=[10 50 100 EIGVEC_NUM]
imgIndex=1;
for i=[1 1+int32(TRAIN_NUM/52) 1+2*int32(TRAIN_NUM/52)] % img number in train set
reconTrain(1:baseNum,baseNumIndex,imgIndex) = (trainSetDiff(:,i).' * mEigVec(:,EIGVEC_NUM-baseNum+1:EIGVEC_NUM)).';
imgIndex = imgIndex+1;
end
for i=1:3
%for j=1:baseNum %change 364 here
reconTrainImg(:,baseNumIndex,i) = (reconTrain(1:baseNum,baseNumIndex,i).' * mEigVec(:,EIGVEC_NUM-baseNum+1:EIGVEC_NUM).').';
%end
reconTrainImg(:,baseNumIndex,i) = reconTrainImg(:,baseNumIndex,i)+trainMean;
end
baseNumIndex = baseNumIndex + 1;
end
% To evaluate on the difference between recon and ref image
diff=zeros(4,3);
for i=1:4
for j=1:3
diff(i,j)= sum(abs(reconTrainImg(:,i,j)-...
trainSet(:,(j-1)*int32(TRAIN_NUM/52)+1)));
end
end
% To show the plot
IMG_TO_PLOT=2; %change 1 here
Img=zeros(56,46,4);
A=zeros(56,46);
basesUsed=[10 50 100 EIGVEC_NUM];
for j=1:4
for i=1:46
A(:,i)=reconTrainImg(1+(i-1)*56:i*56,j,IMG_TO_PLOT);
end
Img(:,:,j) = mat2gray(A, [min(min(A)) max(max(A))]);
subplot(1,5,j);
imshow(Img(:,:,j));
hold on;
titleStr=sprintf('%d bases',basesUsed(j));
title(titleStr);
end
subplot(1,5,5);
ref = zeros(56,46);
for i=1:46
ref(:,i)=trainSet(1+(i-1)*56:i*56,(IMG_TO_PLOT-1)*int32(TRAIN_NUM/52)+1);
end
Img1 = mat2gray(ref, [min(min(ref)) max(max(ref))]);
imshow(Img1);
title('Reference');