%Practica de SVD %Haga help checkerboard y lea las caracteristicas %asignemos una imagen a la variable I I=checkerboard(20); %haga whos y vea el tamanio y %la clase de la variable I %ahora haga help svd y lea las caracteristicas [u,s,v]=svd(I); %extraemos la diagonal de la matriz s midiag=diag(s); %haga help semilogy y lea las caracteristicas semilogy(midiag); %que observa???? %trunque la matriz s tomando los %valore singulares mas significativos y reconstruya %la imagen, por ejemplo pruebe midiag(10:end)=0; %matamos los valores singulares desde el decimo %reconstruimos una nueva s nus=diag(midiag); %rearmamos la imagen nuI=u*nus*v'; %usemos imtool imtool(nuI); %que observa? %como ejercicio reconstruya %la matriz nuI usando solo %los primeros autovectores %a izquierda y a derecha, seria algo asi nuI=zeros(size(I)); for k=1:9 nuI=nuI+midiag(k)*u(:,k)*v(:,k)'; end imtool(nuI); %%continue eliminando valores singulares %mientras la imagen mantenga su aspecto %calcule el ahorro de memoria si intentara %"comprimir" la imagen con esta tecnica. % le conviene hacer whos y calcular la %cantidad de bytes en cada caso %elimine todas la variables y ejecute I=imread('cameraman.tif'); imview(I); %la idea es repetir el ejercicio %anterior con un caso mas real % tenga cuidado en lo siguiente: % haga whos y va a notar que % la variable I es ahora de unsigned integers %por lo que no va a funcionar el svd % haga los siguiente I=str2num(num2str(I)); %pasamos los enteros a string y despues a double %realize el trabajo ejercicio anterior %pero a ala hora de visualizar haga imview(uint8(nuI)); %volvemos a usar unsigned integers de 8 bits