Doxygen Source Code Documentation
Main Page Alphabetical List Data Structures File List Data Fields Globals Search
thd_outlier_count.c
Go to the documentation of this file.00001 #include "mrilib.h"
00002
00003
00004
00005
00006
00007
00008
00009
00010 void THD_outlier_count( THD_3dim_dataset *dset, float qthr, int **count, int *ctop )
00011 {
00012 int nvals , iv , nxyz , ii , oot , *ccc ;
00013 float alph,fmed,fmad , fbot,ftop ;
00014 MRI_IMAGE * flim ;
00015 float * far , * var , clip_val ;
00016
00017 ENTRY("THD_outlier_count") ;
00018
00019
00020
00021 if( !ISVALID_DSET(dset) ) EXRETURN ;
00022 if( qthr <= 0.0 || qthr >= 0.1 ) qthr = 0.001 ;
00023
00024 nvals = DSET_NUM_TIMES(dset) ;
00025 nxyz = DSET_NVOX(dset) ;
00026 if( nvals < 5 ){ *count = NULL ; *ctop = 0 ; EXRETURN ; }
00027 DSET_load(dset) ;
00028 if( !DSET_LOADED(dset) ){ *count = NULL ; *ctop = 0 ; EXRETURN ; }
00029
00030
00031
00032 flim = THD_median_brick( dset ) ;
00033 clip_val = THD_cliplevel( flim , 0.5 ) ;
00034 mri_free(flim) ;
00035
00036
00037
00038 alph = qginv(qthr/nvals) * sqrt(0.5*PI) ;
00039 *count = ccc = (int *) calloc( sizeof(int) , nvals ) ;
00040 var = (float *) malloc( sizeof(float) * nvals ) ;
00041
00042
00043
00044 far = (float *) calloc(sizeof(float),nvals+1) ;
00045
00046 for( ii=0 ; ii < nxyz ; ii++ ){
00047
00048
00049
00050 THD_extract_array( ii , dset , 0 , far ) ;
00051 memcpy(var,far,sizeof(float)*nvals ) ;
00052
00053 fmed = qmed_float( nvals , far ) ;
00054 if( clip_val > 0.0 && fmed < clip_val ) continue ;
00055 for( iv=0 ; iv < nvals ; iv++ )
00056 far[iv] = fabs(far[iv]-fmed) ;
00057 fmad = qmed_float( nvals , far ) ;
00058 fbot = fmed - alph*fmad ; ftop = fmed + alph*fmad ;
00059
00060 if( fmad > 0.0 ){
00061 for( iv=0 ; iv < nvals ; iv++ )
00062 if( var[iv] < fbot || var[iv] > ftop ) ccc[iv]++ ;
00063 }
00064
00065 }
00066
00067 free(far) ;
00068
00069 for( iv=0 ; iv < nvals ; iv++ ) var[iv] = ccc[iv] ;
00070 qmedmad_float( nvals,var , &fmed,&fmad ) ; free(var) ;
00071 *ctop = (int)(fmed+3.5*fmad+0.499) ;
00072
00073 EXRETURN ;
00074 }