forked from smatmo/l0-sparse-NMF
-
Notifications
You must be signed in to change notification settings - Fork 0
/
example_ORL_NMFL0_W.m
59 lines (47 loc) · 1.36 KB
/
example_ORL_NMFL0_W.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
%
% simple example application of NMFL0-W.
% The ORL data base is needed, which can be downloaded from
% http://www.cl.cam.ac.uk/Research/DTG/attarchive:pub/data/att_faces.tar.Z
%
clear all
% set this path to the folder which contains the folders s1-s40
ORLpath = '../orl_faces';
DataORL = [];
for s = 1:40
list = dir([ORLpath,'/s',num2str(s)]);
if isempty(list)
error([ORLpath, ' seems to be empty.']);
end
for k = 3:length(list)
im = imread([ORLpath,'/s',num2str(s),'/',list(k).name ]);
im = double(im);
DataORL = [DataORL, im(:)];
end
end
% rp=randperm(size(DataORL,2));
% figure;
% colormap(gray);
% for k=1:25
% subplot(5,5,k)
% imagesc(reshape(DataORL(:,rp(k)),112,92));
% drawnow;
% end
[D,N] = size(DataORL);
prcntList = [33,25,10];
for prcntCount = 1:length(prcntList)
prcnt = prcntList(prcntCount);
options.K = 25;
options.L = round(D*prcnt/100);
options.numIter = 30;
options.updateType = 'ANLS_FC';
options.numUpdateIter = 10;
[W,H,INFO] = NMFL0_W(DataORL,options);
figure
tmpW = repmat(max(W),size(W,1),1) - W;
tmpW = tmpW - repmat(min(tmpW),size(tmpW,1),1);
tmpW = tmpW * diag((1./max(tmpW)));
imagesc(concatImg(tmpW,5,5,92,112,3))
colormap(gray)
axis off
drawnow
end