Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

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    Major portions of this software are copyrighted by the Medical College
00003    of Wisconsin, 1994-2000, and are released under the Gnu General Public
00004    License, Version 2.  See the file README.Copyright for details.
00005 ******************************************************************************/
00006 
00007 #include "mrilib.h"
00008 
00009 /*** 7D SAFE ***/
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 ;           /* 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 }
 

Powered by Plone

This site conforms to the following standards: