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  

thd_makemask.c File Reference

#include "mrilib.h"

Go to the source code of this file.


Functions

byteTHD_makemask (THD_3dim_dataset *mask_dset, int miv, float mask_bot, float mask_top)
int THD_countmask (int nvox, byte *mmm)

Function Documentation

int THD_countmask int    nvox,
byte   mmm
 

Count the number of nonzero voxels in a mask. -----------------------------------------------------------------------

Definition at line 103 of file thd_makemask.c.

References mc, and mmm.

Referenced by BFIT_prepare_dataset(), CORREL_main(), get_cmask(), HISTO_main(), init_floatvector_array(), main(), MRG_read_opts(), mri_medianfilter(), read_input_data(), SCAT_main(), SUMA_FormAfnidset(), SUMA_Get_isosurface_datasets(), THD_orient_guess(), UC_read_opts(), and validate_datasets().

00104 {
00105    int ii,mc ;
00106 
00107    if( nvox <= 0 || mmm == NULL ) return 0 ;
00108 
00109    for( ii=mc=0 ; ii < nvox ; ii++ ) if( mmm[ii] ) mc++ ;
00110 
00111    return mc ;
00112 }

byte* THD_makemask THD_3dim_dataset   mask_dset,
int    miv,
float    mask_bot,
float    mask_top
 

Make a byte mask from mask dataset: miv = sub-brick of input if( mask_bot <= mask_top ) then only nonzero values in this range will be used else all nonzero values in the mask will be used The input dataset should be byte-, short-, or float-valued.

The output is a byte array with 1s in "hit" locations and 0s in other locations. The number of bytes is DSET_NVOX(mask_dset). This array should be free()-d someday. If NULL is returned, some grotesque error transpired. -----------------------------------------------------------------------

Definition at line 24 of file thd_makemask.c.

References BYTEIZE, calloc, DSET_ARRAY, DSET_BRICK_FACTOR, DSET_BRICK_TYPE, DSET_load, DSET_LOADED, DSET_NVALS, DSET_NVOX, DSET_unload, free, ISVALID_DSET, mmm, and SHORTIZE.

Referenced by BFIT_prepare_dataset(), CORREL_main(), get_options(), HI_read_opts(), HISTO_main(), init_floatvector_array(), main(), MRG_read_opts(), PC_read_opts(), read_input_data(), SCAT_main(), SUMA_FormAfnidset(), and UC_read_opts().

00026 {
00027    byte *mmm = NULL ;
00028    int nvox , ii ;
00029 
00030    if( !ISVALID_DSET(mask_dset)    ||
00031        miv < 0                     ||
00032        miv >= DSET_NVALS(mask_dset)  ) return NULL ;
00033 
00034    nvox = DSET_NVOX(mask_dset) ;
00035 
00036    DSET_load(mask_dset) ; if( !DSET_LOADED(mask_dset) ) return NULL ;
00037 
00038    mmm = (byte *) calloc( sizeof(byte) * nvox , 1 ) ;
00039 
00040    switch( DSET_BRICK_TYPE(mask_dset,miv) ){
00041       default:
00042          free(mmm) ; DSET_unload(mask_dset) ; return NULL ;
00043 
00044       case MRI_short:{
00045          short mbot , mtop ;
00046          short *mar = (short *) DSET_ARRAY(mask_dset,miv) ;
00047          float mfac = DSET_BRICK_FACTOR(mask_dset,miv) ;
00048          if( mfac == 0.0 ) mfac = 1.0 ;
00049          if( mask_bot <= mask_top ){
00050             mbot = SHORTIZE(mask_bot/mfac) ;
00051             mtop = SHORTIZE(mask_top/mfac) ;
00052          } else {
00053             mbot = (short) -MRI_TYPE_maxval[MRI_short] ;
00054             mtop = (short)  MRI_TYPE_maxval[MRI_short] ;
00055          }
00056          for( ii=0 ; ii < nvox ; ii++ )
00057             if( mar[ii] >= mbot && mar[ii] <= mtop && mar[ii] != 0 ) mmm[ii]=1;
00058       }
00059       break ;
00060 
00061       case MRI_byte:{
00062          byte mbot , mtop ;
00063          byte *mar = (byte *) DSET_ARRAY(mask_dset,miv) ;
00064          float mfac = DSET_BRICK_FACTOR(mask_dset,miv) ;
00065          if( mfac == 0.0 ) mfac = 1.0 ;
00066          if( mask_bot <= mask_top && mask_top > 0.0 ){
00067             mbot = BYTEIZE(mask_bot/mfac) ;
00068             mtop = BYTEIZE(mask_top/mfac) ;
00069          } else {
00070             mbot = 0 ;
00071             mtop = (byte) MRI_TYPE_maxval[MRI_short] ;
00072          }
00073          for( ii=0 ; ii < nvox ; ii++ )
00074             if( mar[ii] >= mbot && mar[ii] <= mtop && mar[ii] != 0 ) mmm[ii]=1;
00075       }
00076       break ;
00077 
00078       case MRI_float:{
00079          float mbot , mtop ;
00080          float *mar = (float *) DSET_ARRAY(mask_dset,miv) ;
00081          float mfac = DSET_BRICK_FACTOR(mask_dset,miv) ;
00082          if( mfac == 0.0 ) mfac = 1.0 ;
00083          if( mask_bot <= mask_top ){
00084             mbot = (float) (mask_bot/mfac) ;
00085             mtop = (float) (mask_top/mfac) ;
00086          } else {
00087             mbot = -WAY_BIG ;
00088             mtop =  WAY_BIG ;
00089          }
00090          for( ii=0 ; ii < nvox ; ii++ )
00091             if( mar[ii] >= mbot && mar[ii] <= mtop && mar[ii] != 0 ) mmm[ii]=1;
00092       }
00093       break ;
00094    }
00095 
00096    return mmm ;
00097 }
 

Powered by Plone

This site conforms to the following standards: