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