/*****************************************************************************
Major portions of this software are copyrighted by the Medical College
of Wisconsin, 1994-2000, and are released under the Gnu General Public
License, Version 2. See the file README.Copyright for details.
******************************************************************************/
#include "mrilib.h"
/*** 7D SAFE ***/
#ifndef MAX
# define MAX(x,y) (((x)>(y))?(x):(y))
#endif
/*---------------------------------------------------------------------------*/
MRI_IMAGE * mri_edit_image( float pthr , float power , MRI_IMAGE *imin )
{
int ii , npix , nsum ;
float val ;
MRI_IMAGE *imqq ;
float *flin ;
ENTRY("mri_edit_image") ;
imqq = mri_to_float( imin ) ;
flin = mri_data_pointer( imqq ) ;
npix = imqq->nvox ;
if( (power==0.0 || power==1.0) && (pthr==0.0) ) RETURN(imqq) ;
if( pthr > 0.0 && pthr < 1.0 ){
register float sum , fa , scl,fmax ;
register int nsum ;
fmax = fabs(mri_max(imqq)) ;
val = fabs(mri_min(imqq)) ;
fmax = MAX(fmax,val) ;
val = pthr * fmax ; /* average pixels > pthr * max */
sum = 0.0 ;
nsum = 0 ;
for( ii=0 ; ii < npix ; ii++ ){
fa = flin[ii] = fabs(flin[ii]) ;
if( fa > val ){ sum += fa ; nsum++ ; }
}
val = pthr * sum / nsum ; /* set threshold based on this */
#ifdef HARD_THRESH
for( ii=0 ; ii < npix ; ii++ ) if(flin[ii] < val) flin[ii] = 0.0 ;
#else
scl = fmax / (fmax-val) ;
for( ii=0 ; ii < npix ; ii++ ){
fa = flin[ii] ;
flin[ii] = (fa < val) ? (0.0) : (scl*(fa-val)) ;
}
#endif
} /* end of if(pthr) */
if( power != 0.0 && power != 1.0 ){
for( ii=0 ; ii < npix ; ii++ ) flin[ii] = pow( fabs(flin[ii]) , power ) ;
}
MRI_COPY_AUX(imqq,imin) ;
RETURN(imqq) ;
}
syntax highlighted by Code2HTML, v. 0.9.1