Doxygen Source Code Documentation
Main Page Alphabetical List Data Structures File List Data Fields Globals Search
mri_edit.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #include "mrilib.h"
00008
00009
00010
00011 #ifndef MAX
00012 # define MAX(x,y) (((x)>(y))?(x):(y))
00013 #endif
00014
00015
00016
00017 MRI_IMAGE * mri_edit_image( float pthr , float power , MRI_IMAGE *imin )
00018 {
00019 int ii , npix , nsum ;
00020 float val ;
00021 MRI_IMAGE *imqq ;
00022 float *flin ;
00023
00024 ENTRY("mri_edit_image") ;
00025
00026 imqq = mri_to_float( imin ) ;
00027 flin = mri_data_pointer( imqq ) ;
00028 npix = imqq->nvox ;
00029
00030 if( (power==0.0 || power==1.0) && (pthr==0.0) ) RETURN(imqq) ;
00031
00032 if( pthr > 0.0 && pthr < 1.0 ){
00033 register float sum , fa , scl,fmax ;
00034 register int nsum ;
00035
00036 fmax = fabs(mri_max(imqq)) ;
00037 val = fabs(mri_min(imqq)) ;
00038 fmax = MAX(fmax,val) ;
00039 val = pthr * fmax ;
00040 sum = 0.0 ;
00041 nsum = 0 ;
00042
00043 for( ii=0 ; ii < npix ; ii++ ){
00044 fa = flin[ii] = fabs(flin[ii]) ;
00045 if( fa > val ){ sum += fa ; nsum++ ; }
00046 }
00047 val = pthr * sum / nsum ;
00048
00049 #ifdef HARD_THRESH
00050 for( ii=0 ; ii < npix ; ii++ ) if(flin[ii] < val) flin[ii] = 0.0 ;
00051 #else
00052 scl = fmax / (fmax-val) ;
00053 for( ii=0 ; ii < npix ; ii++ ){
00054 fa = flin[ii] ;
00055 flin[ii] = (fa < val) ? (0.0) : (scl*(fa-val)) ;
00056 }
00057 #endif
00058 }
00059
00060 if( power != 0.0 && power != 1.0 ){
00061 for( ii=0 ; ii < npix ; ii++ ) flin[ii] = pow( fabs(flin[ii]) , power ) ;
00062 }
00063
00064 MRI_COPY_AUX(imqq,imin) ;
00065 RETURN(imqq) ;
00066 }