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 } |