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_dsetto3D.c

Go to the documentation of this file.
00001 #include "mrilib.h"
00002 #include "thd.h"
00003 
00004 /*---------------------------------------------------------------
00005   Routine to extract a float version of a brick from a dataset
00006   -- RWCox - 10 Aug 2001
00007 -----------------------------------------------------------------*/
00008 
00009 MRI_IMAGE * THD_extract_float_brick( int iv , THD_3dim_dataset * dset )
00010 {
00011    MRI_IMAGE * im ;
00012    float * var ;
00013    register int ii , nvox ;
00014 
00015 ENTRY("THD_extract_float_brick") ;
00016 
00017    if( iv < 0 || !ISVALID_DSET(dset) || iv >= DSET_NVALS(dset) ) RETURN(NULL);
00018 
00019    im = mri_new_conforming( DSET_BRICK(dset,iv) , MRI_float ) ;
00020    var = MRI_FLOAT_PTR(im) ;
00021    nvox = DSET_NVOX(dset) ;
00022 
00023    /*-- extract/scale brick into var --*/
00024 
00025    switch( DSET_BRICK_TYPE(dset,iv) ){
00026 
00027       default:
00028          fprintf(stderr,"Can't handle sub-bricks of type %s\n",
00029                  MRI_TYPE_name[DSET_BRICK_TYPE(dset,iv)]) ;
00030          mri_free(im) ;
00031       RETURN(NULL) ;
00032 
00033       case MRI_short:{
00034          register short *dar = DSET_ARRAY(dset,iv) ;
00035          register float fac  = DSET_BRICK_FACTOR(dset,iv) ;
00036          if( fac == 0.0 ) fac = 1.0 ;
00037          for( ii=0 ; ii < nvox ; ii++ ) var[ii] = fac*dar[ii] ;
00038       }
00039       break ;
00040 
00041       case MRI_byte:{
00042          register byte  *dar = DSET_ARRAY(dset,iv) ;
00043          register float fac  = DSET_BRICK_FACTOR(dset,iv) ;
00044          if( fac == 0.0 ) fac = 1.0 ;
00045          for( ii=0 ; ii < nvox ; ii++ ) var[ii] = fac*dar[ii] ;
00046       }
00047       break ;
00048 
00049       case MRI_float:{
00050          register float *dar = DSET_ARRAY(dset,iv) ;
00051          register float fac  = DSET_BRICK_FACTOR(dset,iv) ;
00052          if( fac == 0.0 ) fac = 1.0 ;
00053          for( ii=0 ; ii < nvox ; ii++ ) var[ii] = fac*dar[ii] ;
00054       }
00055       break ;
00056 
00057       case MRI_complex:{
00058          register complex *dar = DSET_ARRAY(dset,iv) ;
00059          register float fac    = DSET_BRICK_FACTOR(dset,iv) ;
00060          if( fac == 0.0 ) fac = 1.0 ;
00061          for( ii=0 ; ii < nvox ; ii++ ) var[ii] = fac*CABS(dar[ii]) ;
00062       }
00063       break ;
00064 
00065       case MRI_int:{
00066          register int   *dar = DSET_ARRAY(dset,iv) ;
00067          register float fac  = DSET_BRICK_FACTOR(dset,iv) ;
00068          if( fac == 0.0 ) fac = 1.0 ;
00069          for( ii=0 ; ii < nvox ; ii++ ) var[ii] = fac*dar[ii] ;
00070       }
00071       break ;
00072 
00073       case MRI_double:{
00074          register double *dar = DSET_ARRAY(dset,iv) ;
00075          register float fac   = DSET_BRICK_FACTOR(dset,iv) ;
00076          if( fac == 0.0 ) fac = 1.0 ;
00077          for( ii=0 ; ii < nvox ; ii++ ) var[ii] = fac*dar[ii] ;
00078       }
00079       break ;
00080 
00081       case MRI_rgb:{
00082          register byte *dar = DSET_ARRAY(dset,iv) ;
00083          for( ii=0 ; ii < nvox ; ii++ )
00084             var[ii] = 0.299*dar[3*ii] + 0.587*dar[3*ii+1] + 0.114*dar[3*ii+2] ;
00085       }
00086    }
00087 
00088    RETURN(im) ;
00089 }
 

Powered by Plone

This site conforms to the following standards: