Home > PR > restaura2.m

restaura2

PURPOSE ^

RESTAURA2 aplica una regularizacion para la restauracion de una imagen

SYNOPSIS ^

function imr=restaura2(im,metodo_rest,emborronamiento,lambdas,varargin)

DESCRIPTION ^

   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)

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

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

Generated on Wed 29-Nov-2006 16:19:19 by m2html © 2003