function      g = spatialFilter ( Type , Size , Varargin )
if    nargin < 3    I I   isempty ( size ) 
      size =  [3  3] ;
end 
if    nume 1 (size ) = = 1
      size = [size   size] ;
end
Type = Lower ( Type ) ;
Switch Type 
Case ‘ median ‘ 
g = medfilt2 ( f , size ) ;
Case  { ‘ average ‘ , ‘ mean ‘ } 
W = fspecial ( ‘average ‘ , size ) ;
G = imfilter ( f , w ) ; 
               Case   { ‘ geomtric ‘ , ‘gmean’ , ‘geomean’ , ‘ geomtricmean ‘}
g = colfilt (f , size , ‘ sliding ‘ , @GeomtricMean ) ;
Case  { ‘ harmonic ‘ , ‘ hmean ‘ , ‘ harmean ‘ , ‘ harmonicmean ‘}
               g = colfilt (f , size , ‘ sliding ‘ , @ HarmonicMean) ;
Case  { ‘ charmonic ‘ , ‘ contraharmonic ‘}
if     isempty ( Varargin )
       Q = 1 ;
else
         Q = Varargin } 1 { ;
end 
fun = @ (X) ContraHarmonicMean ( X , Q ) ;
             g = colfilt (f , size , ‘ sliding ‘ , fun ) ;
                Case ‘ max ‘
g= ordfilt2 (f , prod ( size) , true ( size ) ) ;
 Case ‘ min ‘
g= ordfilt2 ( f , 1 , true ( size ) ) ;
 Case ‘ midpoint ‘
gmin = ordfilt2 ( f , 1 , true ( size ) ) ;
gmax= ordfilt2 (f , prod ( size) , true ( size ) ) ;
g=( gmin + gmax ) /2 ;
 Case ‘ alphatrim ‘
if     isempty ( Varargin )
       alpha = 0 . 1 ;
else
      alpha = Varargin } 1 { ;
end 
fun = @ ( X ) AlphaTrimMean ( x ,  alpha ) ;
g = colfilt ( f , size , ‘ sliding ‘ , fun ) ;
              Other wise
                 Error ( ‘ Undefined filter type . ‘ ) ;
end  
function       gm= GeomtricMean (X)
gm= exp (mean (Log ( X ) ) ) ;
end 
  function       hm = HarmonicMean (X)
hm= 1./mean (1./X) ;
end 
   function      chm= ContraHarmonicMean (X)
Chm= Sum ( X . ^ (Q+1) ) ./Sum( X . ^ Q ) ; 
end 
  function      atm = AlphaTrimMean ( X , alpha ) 
    atm = zeros ( 1 , size ( x , 2 ) ) ;
for      j = 1 : nume 1 (atm ) 
         xtj = AlphaTrim ( x ( : , j ) , alpha ) ; 
         atm ( j ) = mean ( xtj ) ;
end
  function       xt= AlphaTrim ( X , alpha )
nx = numel ( X ) ;
nt = 2*round ( alpha * nx/2 ) ;
xt = sort ( X ) ;
xt ( [ 1 : nt/2  end – nt/2 + 1 : end ] ) = [ ] ;
end