RESTAURA2 aplica una regularizacion para la restauracion de una imagen degradada conocido el tipo de emborronamiento. PARAMETROS DE ENTRADA Id: imagen a restaurar metodo_rest: 'string' que indica el operador de penalizacion a utilizar. 'AR4' restaura estimando la densidad espectral de potencia mediante un modelo parametrico autorregresivo de orden 4 'AR8' restaura estimando la densidad espectral de potencia mediante un modelo parametrico autorregresivo de orden 8 'AR12' restaura estimando la densidad espectral de potencia mediante un modelo parametrico autorregresivo de orden 12 'L2' restaura utilizando como operador de penalizacion la segunda derivada 'CSF' restaura como operador de penalizacion la inversa de la funcion de sensibilidad al contraste (CSF) 'PER' restaura como operador de penalizacion la inversa de la respuesta perceptual no-lineal 'PERD' ajustado para denoising utilizando la inversa de la respuesta perceptual no-lineal emborronamiento: la matriz con la respuesta al impulso del filtro de emborronamiento (PSF) (por ejemplo se puede usar la PSF que proporciona degrada.m como salida o cualquier otra definida por el usuario). SALIDAS: imr: imagen restaurada USO imr=restaura2(im,metodo_rest,emborronamiento,lambdas)
0001 % 0002 % RESTAURA2 aplica una regularizacion para la restauracion de una imagen 0003 % degradada conocido el tipo de emborronamiento. 0004 % 0005 % PARAMETROS DE ENTRADA 0006 % Id: imagen a restaurar 0007 % 0008 % metodo_rest: 'string' que indica el operador de penalizacion a utilizar. 0009 % 0010 % 'AR4' restaura estimando la densidad espectral de potencia 0011 % mediante un modelo parametrico autorregresivo de orden 4 0012 % 0013 % 'AR8' restaura estimando la densidad espectral de potencia 0014 % mediante un modelo parametrico autorregresivo de orden 8 0015 % 0016 % 'AR12' restaura estimando la densidad espectral de potencia 0017 % mediante un modelo parametrico autorregresivo de orden 12 0018 % 0019 % 'L2' restaura utilizando como operador de penalizacion la 0020 % segunda derivada 0021 % 0022 % 'CSF' restaura como operador de penalizacion la inversa 0023 % de la funcion de sensibilidad al contraste (CSF) 0024 % 0025 % 'PER' restaura como operador de penalizacion la inversa 0026 % de la respuesta perceptual no-lineal 0027 % 0028 % 'PERD' ajustado para denoising utilizando la inversa de 0029 % la respuesta perceptual no-lineal 0030 % 0031 % 0032 % emborronamiento: la matriz con la respuesta al impulso del filtro de emborronamiento (PSF) 0033 % (por ejemplo se puede usar la PSF que proporciona degrada.m como salida 0034 % o cualquier otra definida por el usuario). 0035 % 0036 % SALIDAS: 0037 % 0038 % imr: imagen restaurada 0039 % 0040 % 0041 % USO imr=restaura2(im,metodo_rest,emborronamiento,lambdas) 0042 0043 0044 function imr=restaura2(im,metodo_rest,emborronamiento,lambdas,varargin) 0045 0046 a=size(im); 0047 bordefil=(ceil(a(1)/16)*16-a(1)); 0048 bordecol=(ceil(a(2)/16)*16-a(2)); 0049 im_a = [im repmat(im(:,end),1,bordecol); repmat(im(end,:),bordefil,1) repmat(im(end,end),bordefil,bordecol)]; 0050 u=0; 0051 0052 %%%%%% 0053 0054 N=16; 0055 M=32; 0056 0057 %lambdas = logspace(-4,3,70); 0058 % if (prod(size(emborronamiento))==1) 0059 % % contruimos PSF a partir de la frecuencia de corte 0060 % fc=emborronamiento; 0061 % Numpf = 10; 0062 % [f1,f2] = freqspace(Numpf,'meshgrid'); 0063 % Hd = ones(Numpf); 0064 % r = sqrt(f1.^2 + f2.^2); 0065 % Hd(r>fc) = 0; 0066 % win = fspecial('gaussian',Numpf,3); 0067 % win = win ./ max(win(:)); 0068 % PSF = fwind2(Hd,win); 0069 % else 0070 PSF=emborronamiento; 0071 % end 0072 0073 0074 0075 if strcmp(metodo_rest,'AR4')==1 0076 [imr_a] = regu_modelo_ar4(im_a,PSF,lambdas,N,M,2,0); 0077 elseif strcmp(metodo_rest,'AR8')==1 0078 [imr_a] = regu_modelo_ar8(im_a,PSF,lambdas,N,M,2,0); 0079 elseif strcmp(metodo_rest,'AR12')==1 0080 [imr_a] = regu_modelo_ar12(im_a,PSF,lambdas,N,M,2,0); 0081 elseif strcmp(metodo_rest,'L2')==1 0082 Operador=freqz2(filt2dsegder,M,M); 0083 [imr_a] = regu_operador(im_a,PSF,lambdas,N,M,Operador,2,0); 0084 elseif strcmp(metodo_rest,'CSF')==1 0085 fs = 64; 0086 Operador = operadorCSF(fs,M); 0087 Operador = fftshift(Operador); 0088 [imr_a] = regu_operador(im_a,PSF,lambdas,N,M,Operador,2,0); 0089 elseif strcmp(metodo_rest,'PER')==1 0090 % fs = 64; 0091 % Operador = operadorCSF(fs,M); 0092 % [imr_a, lambCSF] = regu_operador(im_a,PSF,lambdas,N,M,Operador,2,0); 0093 0094 0095 corteResp = 800; 0096 0097 f1=0.5; 0098 f2=1; 0099 0100 [H,k1,k2] = constantes_sin_continua(64,M,1,@ancho1_interaccion,f1,f2); 0101 0102 0103 imr_a=regu_perceptual(im_a,PSF,lambdas,N,M,H,k1,k2,corteResp,2,0); 0104 0105 % elseif strcmp(metodo_rest,'PERD')==1 0106 %% fs = 64; 0107 %% Operador = operadorCSF(fs,M); 0108 %% [imr_a, lambCSF] = regu_operador(im_a,PSF,lambdas,N,M,Operador,2,0); 0109 % 0110 % 0111 % % Para denoising este valor va bien 0112 % 0113 % if (nargin==4) 0114 % corteResp = 12000/sqrt(varargin{1}); 0115 % else 0116 % corteResp = 800; 0117 % end 0118 % 0119 % f1=0.5; 0120 % f2=1; 0121 % 0122 % [H,k1,k2] = constantes_sin_continua(64,M,1,@ancho1_interaccion,f1,f2); 0123 % 0124 % imr_a=regu_perceptual(im_a,PSF,lambdas,N,M,H,k1,k2,corteResp,2,1); 0125 0126 else 0127 ['El metodo ' metodo_rest ' no esta definido'] 0128 u=1; 0129 end 0130 %%%%%%%%%devolvemos la imagen al tamaño original 0131 0132 if u==1 0133 imr=0; 0134 else 0135 imr=imr_a(1:a(1),1:a(2)); 0136 end