Doxygen Source Code Documentation
mri_edit.c File Reference
#include "mrilib.h"Go to the source code of this file.
Functions | |
| MRI_IMAGE * | mri_edit_image (float pthr, float power, MRI_IMAGE *imin) |
Function Documentation
|
||||||||||||||||
|
Definition at line 17 of file mri_edit.c. References ENTRY, fa, MAX, MRI_COPY_AUX, mri_data_pointer(), mri_max(), mri_min(), mri_to_float(), MRI_IMAGE::nvox, and RETURN. Referenced by ISQ_process_mri().
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 ; /* average pixels > pthr * max */
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 ; /* set threshold based on this */
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 } /* end of if(pthr) */
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 }
|