DEGRADA2 crea una imagen degradada test usando una PSF espacialmente invariante h (filtro pasa-baja gaussiano con frecuencia de corte normalizada fc, 0<fc<1 -siendo 1 la frecuencia de Nyquist-). Ademas, aņade un ruido coloreado isotropo en la banda 0<[f1,f2]<1 con la varianza que se le pida. NOTA: Con objeto de permitir la permanencia de seņales de frecuencia mayor que la de corte, introducimos un valor 'val' en la respuesta en frecuencia. Como normalizamos la PSF para conservar la componente de continua de la seņal, el valor final de la respuesta en frecuencia para altas frecuencias no es 'val', sino ligeramente superior. En cualquier caso, el programa devuelve H (respuesta en frecuencia del filtro de emborronamiento), y el usuario puede controlar este valor. Seleccionando val=0 no se introduce ninguna modificacion en la normalizacion. La imagen degradada resultante es: Id = conv2(Im,h) + ruido; PARAMETROS: Im: imagen a degradar fcorte: frecuencia de corte de la PSF val: parametro para controlar el valor de la respuesta en frecuencia por encima de la frecuencia de corte [f1 f2]: Vector con las frecuencias de la banda del ruido coloreado. vari: varianza del ruido aditivo. DEVUELVE: Id: imagen degradada PSF: filtro emborronamiento utilizado H: respuesta en frecuencia H=abs(freqz2(PSF)); noise: ruido aņadido a la imagen blurred: imagen emborronada antes de aņadir el ruido USO: [Imdegradada,PSF,H,noise,Blurred]=degrada2(imagen,fcorte,Val_min,[f1 f2],varianza);
0001 % 0002 % DEGRADA2 crea una imagen degradada test usando una PSF espacialmente 0003 % invariante h (filtro pasa-baja gaussiano con frecuencia de corte normalizada 0004 % fc, 0<fc<1 -siendo 1 la frecuencia de Nyquist-). 0005 % Ademas, aņade un ruido coloreado isotropo 0006 % en la banda 0<[f1,f2]<1 con la varianza que se le pida. 0007 % 0008 % NOTA: Con objeto de permitir la permanencia de seņales de frecuencia mayor 0009 % que la de corte, introducimos un valor 'val' en la respuesta en 0010 % frecuencia. 0011 % Como normalizamos la PSF para conservar la componente de continua de la 0012 % seņal, el valor final de la respuesta en frecuencia para altas 0013 % frecuencias no es 'val', sino ligeramente superior. 0014 % En cualquier caso, el programa devuelve H (respuesta en frecuencia del 0015 % filtro de emborronamiento), y el usuario puede controlar este valor. 0016 % Seleccionando val=0 no se introduce ninguna modificacion en la 0017 % normalizacion. 0018 % 0019 % La imagen degradada resultante es: 0020 % Id = conv2(Im,h) + ruido; 0021 % 0022 % 0023 % PARAMETROS: 0024 % 0025 % Im: imagen a degradar 0026 % fcorte: frecuencia de corte de la PSF 0027 % val: parametro para controlar el valor de la respuesta en frecuencia 0028 % por encima de la frecuencia de corte 0029 % [f1 f2]: Vector con las frecuencias de la banda del ruido coloreado. 0030 % vari: varianza del ruido aditivo. 0031 % 0032 % DEVUELVE: 0033 % Id: imagen degradada 0034 % PSF: filtro emborronamiento utilizado 0035 % H: respuesta en frecuencia H=abs(freqz2(PSF)); 0036 % noise: ruido aņadido a la imagen 0037 % blurred: imagen emborronada antes de aņadir el ruido 0038 % 0039 % USO: 0040 % [Imdegradada,PSF,H,noise,Blurred]=degrada2(imagen,fcorte,Val_min,[f1 f2],varianza); 0041 0042 0043 function [Id,PSF,H,noise,Blurred]=degrada2(Im,fc,Val_min,lim_frec,vari); 0044 0045 N=size(Im); 0046 0047 % Extension en pixels del filtro 0048 Numpf = 11; 0049 0050 [f1,f2] = freqspace(Numpf,'meshgrid'); 0051 Hd = ones(Numpf); 0052 r = sqrt(f1.^2 + f2.^2); 0053 Hd(r>fc) = Val_min; 0054 win = fspecial('gaussian',Numpf,2); 0055 win = win ./ max(win(:)); % Make the maximum window value be 1. 0056 PSF = fwind2(Hd,win); 0057 PSF=PSF/sum(sum(PSF)); 0058 H=abs(freqz2(PSF)); 0059 0060 % inc=0.0001; 0061 % 0062 % while abs(inc)>0.000001 0063 % Hd = ones(Numpf); 0064 % Hd(r>fc) = Val_min+0.1*inc; 0065 % win = fspecial('gaussian',Numpf,2); 0066 % win = win ./ max(win(:)); % Make the maximum window value be 1. 0067 % PSF = fwind2(Hd,win); 0068 % PSF=PSF/sum(sum(PSF)); 0069 % 0070 % H=freqz2(PSF); 0071 % vm=min(min(abs(H))) 0072 % 0073 % inc=Val_min-vm; 0074 % pause 0075 % end 0076 0077 % Convolucion de la imagen con el filtro de emborronamiento 0078 % Primero amplia la imagen antes de convolucionar para evitar efectos de 0079 % borde... 0080 Im2 = ampliaconborde(Im,10); 0081 0082 Im2 = conv2(Im2,PSF,'same'); 0083 0084 Blurred = Im2(11:11+N(1)-1,11:11+N(2)-1); 0085 0086 [f1,f2] = freqspace(N,'meshgrid'); 0087 r = sqrt(f1.^2 + f2.^2); 0088 Hruido=(r>=lim_frec(1))&(r<=lim_frec(2)); 0089 tfruido=Hruido.*exp(sqrt(-1)*2*pi*rand(N)); 0090 ruido=real(ifft2(fftshift(tfruido))); 0091 varruido=var(ruido(:)); 0092 0093 noise = sqrt(vari)*ruido/sqrt(varruido); 0094 0095 Id = Blurred + noise;