Esempio n. 1
0
float DES_solve( MRI_IMAGE *psinv , float *z , float *coef , float *wks )
{
   float *psar , *iar , zi ; int ii,jj , ntim,nref ;

   ntim = psinv->ny ;
   nref = psinv->nx ;
   psar = MRI_FLOAT_PTR(psinv) ;

   /* step 1: despike the data the simplistic way */

   if( use_des25 )
     (void) DES_despike25( ntim , z , wks ) ;
   else
     (void) DES_despike9( ntim , z , wks ) ;

   /* least squares solve the equations with the modified data */

   for( jj=0 ; jj < nref ; jj++ ) coef[jj] = 0.0f ;

   for( ii=0 ; ii < ntim ; ii++ ){
     iar = psar + ii*nref ; zi = z[ii] ;
     for( jj=0 ; jj < nref ; jj++ ) coef[jj] += iar[jj]*zi ;
   }

   return 0.0f ;
}
Esempio n. 2
0
static int DES_despike25( int num , float *vec , float *wks )
{
   int ii , nsp ; float *zma,*zme , med,mad,val ;

   if( vec == NULL ) return 0 ;
   if( num <  25   ) return DES_despike9(num,vec,wks) ;

   if( wks != NULL ) zme = wks ;
   else              zme = (float *)malloc(sizeof(float)*(2*num)) ;
   zma = zme + num ;

   DES9_init ; /* 18 Apr 2019 */

   for( ii=0 ; ii < num ; ii++ ){
     mead25(ii) ; zme[ii] = med ; zma[ii] = mad ;
   }
   mad = qmed_float(num,zma) ;
   if( mad <= 0.0f ){ if( wks == NULL ) free(zme); return 0; }  /* should not happen */
   mad *= 6.789f ;  /* threshold value */

   for( nsp=ii=0 ; ii < num ; ii++ )
     if( fabsf(vec[ii]-zme[ii]) > mad ){ vec[ii] = zme[ii]; nsp++; }

   if( wks == NULL ) free(zme) ;
   return nsp ;
}
Esempio n. 3
0
int DES_despike25( int num , float *vec , float *wks )
{
   int ii , nsp ; float *zma,*zme , med,mad,val ;

   if( vec == NULL ) return 0 ;
   if( num <  25   ) return DES_despike9(num,vec,wks) ;

   zme = wks ; zma = zme + num ;

   for( ii=0 ; ii < num ; ii++ ){
     mead25(ii) ; zme[ii] = med ; zma[ii] = mad ;
   }
   mad = qmed_float(num,zma) ;
   if( mad <= 0.0f ){ if( wks == NULL ) free(zme); return 0; }  /* should not happen */
   mad *= 6.789f ;  /* threshold value */

   for( nsp=ii=0 ; ii < num ; ii++ )
     if( fabsf(vec[ii]-zme[ii]) > mad ){ vec[ii] = zme[ii]; nsp++; }

   return nsp ;
}
Esempio n. 4
0
File: 3dTfilter.c Progetto: nno/afni
void DES_despike25( int num , float *vec )
{
   int ii , nsp ; float *zma,*zme , med,mad,val ;

   if( deswks == NULL ) deswks = (float *)malloc(sizeof(float *)*(4*num)) ;

   if( vec == NULL ) return ;
   if( num <  25   ) { DES_despike9(num,vec) ; return ; }

   zme = deswks ; zma = zme + num ;

   for( ii=0 ; ii < num ; ii++ ){
     mead25(ii) ; zme[ii] = med ; zma[ii] = mad ;
   }
   mad = qmed_float(num,zma) ;
   if( mad <= 0.0f ) return ;
   mad *= 6.789f ;  /* threshold value */

   for( nsp=ii=0 ; ii < num ; ii++ )
     if( fabsf(vec[ii]-zme[ii]) > mad ){ vec[ii] = zme[ii]; nsp++; }

   return ;
}