%% Demo SVD disp(' -----------------------Image compression ------------------') for im=1:1%3 disp(['Read image no ' int2str(im) ' ... ']) switch im case 1, Image=imread('bandit','jpg'); kk=[5,20,50]; case 2, Image=imread('Ekkore1024','jpg'); kk=[10,20,50]; otherwise Image=imread('Mart3','jpg'); kk=[3,20,50]; end disp('... Done.') figure(1),clf,image(Image),axis('equal') ImD=im2double(Image); M1=ImD(:,:,1); M2=ImD(:,:,2); M3=ImD(:,:,3); disp('Compute the SVD... '),tic [U1,S1,V1]=svd(M1); [U2,S2,V2]=svd(M2); [U3,S3,V3]=svd(M3); figure(2),clf semilogy(diag(S1),'o'),hold,semilogy(diag(S2),'dr'),semilogy(diag(S3),'pg') disp(['... Done within ' num2str(toc) ' sec.']) wait %% Compression kk=[3,20,50]; for s=1:length(kk), k=kk(s); N1=U1(:,1:k)*S1(1:k,1:k)*V1(:,1:k)'; N2=U2(:,1:k)*S2(1:k,1:k)*V2(:,1:k)'; N3=U3(:,1:k)*S3(1:k,1:k)*V3(:,1:k)'; N1 = adjust(N1); N2 = adjust(N2); N3 = adjust(N3); clear ApIm ApIm(:,:,1) = N1; ApIm(:,:,2) = N2; ApIm(:,:,3) = N3; figure(s+2),clf,image(ApIm),axis('equal') title(['Number of vectors: ' int2str(k) ' out of ' int2str(size(Image,2))]) xlabel(['The savings are :' num2str(100-k*100/size(Image,2)) ' %']) wait end end close all