function [objeto]=regu_naive(Imobservada,b,N,M); Dada una imagen observada que ha pasado por un proceso de degradación representado por b y a la que se ha añadido ruido, se intenta regularizar utilizando la pseudoinversa en el dominio frecuencial. N es el tamaño del bloque y M es el tamaño del bloque más un borde, esto se hace para que los efectos de borde no se vean en la solución. Se devuelve tambien la imagen con los bloques sin procesar para hacer el overlapping EJEMPLO N = 16; M = 44; val = 0.1; figure,[Irest]=regu_naive(BlurredNoisy,PSF,N,M);
0001 % function [objeto]=regu_naive(Imobservada,b,N,M); 0002 % 0003 % Dada una imagen observada que ha pasado por un proceso de degradación representado 0004 % por b y a la que se ha añadido ruido, se intenta regularizar utilizando la 0005 % pseudoinversa en el dominio frecuencial. N es el tamaño del bloque 0006 % y M es el tamaño del bloque más un borde, esto se hace para que los efectos de borde 0007 % no se vean en la solución. 0008 % Se devuelve tambien la imagen con los bloques sin procesar para hacer el overlapping 0009 % 0010 % 0011 % EJEMPLO 0012 % 0013 % N = 16; 0014 % M = 44; 0015 % val = 0.1; 0016 % 0017 % figure,[Irest]=regu_naive(BlurredNoisy,PSF,N,M); 0018 % 0019 0020 0021 function [restaurada]=regu_naive(Imobservada,b,N,M); 0022 0023 [fil,col]=size(Imobservada); 0024 0025 objeto=rand([fil,col]); 0026 0027 nver = fil/N; 0028 nhor = col/N; 0029 0030 objetoparaoverlapping = rand(nver*M,nhor*N); 0031 0032 0033 a=(M-N)/2; 0034 0035 Im2=ampliaconborde(Imobservada,a); 0036 0037 0038 B=freqz2(b,M,M); 0039 0040 B=ifftshift(B); 0041 0042 BB = abs(B).^2; 0043 Bconj = conj(B); 0044 0045 contadorfilas=1; 0046 0047 for i=M/2:N:fil+a 0048 i 0049 contadorcolumnas=1; 0050 for j=M/2:N:col+a 0051 0052 0053 0054 observado=Im2(i-M/2+1:i+M/2,j-M/2+1:j+M/2); 0055 0056 cub=fft2(observado); 0057 0058 Hinv=Bconj./BB; 0059 0060 fftsol = Hinv.*cub; 0061 0062 sol=real(ifft2(fftsol)); 0063 0064 solefectiva=sol(a+1:a+N,a+1:a+N); 0065 0066 %objeto(i-a-N/2+1:i-a+N/2,j-a-N/2+1:j-a+N/2)=deraster(Objetos(:,pos),N,N);; 0067 0068 objeto(i-a-N/2+1:i-a+N/2,j-a-N/2+1:j-a+N/2)=solefectiva; 0069 0070 objetoparaoverlapping((contadorfilas-1)*M+1:contadorfilas*M,(contadorcolumnas-1)*M+1:contadorcolumnas*M) = sol; 0071 0072 0073 %figure(2),imshow(objeto,[0 256]),pause(0.1); 0074 %colormap(gray);imagesc(objeto),pause(0.1); 0075 contadorcolumnas=contadorcolumnas+1; 0076 end 0077 contadorfilas=contadorfilas+1; 0078 end 0079 0080 0081 0082 restaurada = do_overlap(objetoparaoverlapping,M,N,4); 0083 0084 0085 0086 0087