30 lines
709 B
Mathematica
30 lines
709 B
Mathematica
|
|
function interactiverec(F)
|
||
|
|
% given a 243x320 image F, displays it as sum of components
|
||
|
|
stdsize=[243,320];
|
||
|
|
|
||
|
|
F = F(:);
|
||
|
|
|
||
|
|
if not(numel(F) == prod(stdsize))
|
||
|
|
error('The first argument must be the picture to reconstruct');
|
||
|
|
end
|
||
|
|
|
||
|
|
X=readyalefaces_to_tensor;
|
||
|
|
X=reshape(X,[prod(stdsize),numel(X)/prod(stdsize)]);
|
||
|
|
avg=mean(X,2);
|
||
|
|
Xs=bsxfun(@minus,X,avg);
|
||
|
|
[U,S,V]=svd(X,0);
|
||
|
|
colormap(gray);
|
||
|
|
ncolors=size(gray,1);
|
||
|
|
h = image(reshape(avg,stdsize)*ncolors);
|
||
|
|
|
||
|
|
% Add a slider
|
||
|
|
uicontrol('Style', 'slider', 'Min', 0, 'Max', size(U,2), ...
|
||
|
|
'Callback', @callback,'Position',[10 0 300 20]);
|
||
|
|
|
||
|
|
function callback(src,evt)
|
||
|
|
d=round(get(src, 'Value'))
|
||
|
|
set(h, 'CData', reshape(ncolors*(avg+U(:,1:d)*(U(:,1:d)'*F)),stdsize));
|
||
|
|
end
|
||
|
|
|
||
|
|
end
|