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  

3dWarp.c File Reference

#include "mrilib.h"

Go to the source code of this file.


Defines

#define MATVEC_FOR   1
#define MATVEC_BAC   2

Functions

void warp_dicom_in2out (float xin, float yin, float zin, float *xout, float *yout, float *zout)
void warp_dicom_out2in (float xin, float yin, float zin, float *xout, float *yout, float *zout)
int main (int argc, char *argv[])

Variables

THD_vecmat dicom_in2out
THD_vecmat dicom_out2in

Define Documentation

#define MATVEC_BAC   2
 

Definition at line 11 of file 3dWarp.c.

Referenced by main().

#define MATVEC_FOR   1
 

Definition at line 10 of file 3dWarp.c.

Referenced by main().


Function Documentation

int main int    argc,
char *    argv[]
 

---------- Adapted from 3dZeropad.c by RWCox - 08 Aug 2001 ----------*

Definition at line 39 of file 3dWarp.c.

References AFNI_logger(), argc, ATR_string::ch, THD_3dim_dataset::dblk, DSET_delete, DSET_write, ERROR_exit(), ERROR_message(), ATR_float::fl, INFO_message(), INV_VECMAT, ISVALID_DSET, LOAD_FVEC3, LOAD_MAT, machdep(), mainENTRY, THD_mat33::mat, MAT_DET, MATVEC_BAC, MATVEC_FOR, THD_vecmat::mm, MRI_CUBIC, MRI_FLOAT_PTR, MRI_LINEAR, mri_new(), MRI_NN, MRI_QUINTIC, mri_read_ascii(), mri_warp3D_method(), my_getenv(), ATR_float::nfl, MRI_IMAGE::nx, MRI_IMAGE::ny, PRINT_VERSION, strtod(), THD_coorder_fill(), THD_copy_atr(), THD_filename_ok(), THD_find_float_atr(), THD_find_string_atr(), THD_insert_atr(), THD_open_dataset(), THD_set_string_atr, THD_warp3D_affine(), THD_warp3D_mni2tta(), THD_warp3D_tta2mni(), tross_Copy_History(), tross_Make_History(), VIEW_TALAIRACH_TYPE, THD_3dim_dataset::view_type, THD_vecmat::vv, WARNING_message(), WARP3D_NEWDSET, WARP3D_NEWGRID, WROTE_DSET, and THD_fvec3::xyz.

00040 {
00041    THD_3dim_dataset *inset , *outset=NULL , *newgset=NULL ;
00042    int nxin,nyin,nzin,nxyzin,nvals , ival ;
00043    int nxout,nyout,nzout,nxyzout ;
00044    char * prefix = "warped" ;
00045    int nopt=1 , verb=0 , zpad=0 , fsl=0 ;
00046    int use_matvec=0 ;
00047    float xbot,xtop , ybot,ytop , zbot,ztop ;
00048    int use_newgrid=0 ;
00049    float ddd_newgrid=0.0 , fac ;
00050    MRI_IMAGE *inim , *outim , *wim ;
00051    void *newggg=NULL ; int gflag=0 ;
00052 
00053    int tta2mni=0 , mni2tta=0 ;   /* 11 Mar 2004 */
00054    int matdefined=0 ;
00055 
00056    THD_coorder cord ;
00057    ATR_float *atr_matfor=NULL , *atr_matinv=NULL ;
00058 
00059 #if 0
00060    MRI_IMAGE *matflim=NULL ;
00061    float     *matflar=NULL ;
00062 #endif
00063 
00064    /*-- help? --*/
00065 
00066    if( argc < 2 || strcmp(argv[1],"-help") == 0 ){
00067      printf("\n"
00068             "Usage: 3dWarp [options] dataset\n"
00069             "Warp (spatially transform) a 3D dataset.\n"
00070             "--------------------------\n"
00071             "Transform Defining Options: [exactly one of these must be used]\n"
00072             "--------------------------\n"
00073             "  -matvec_in2out mmm = Read a 3x4 affine transform matrix+vector\n"
00074             "                        from file 'mmm':\n"
00075             "                         x_out = Matrix x_in + Vector\n"
00076             "\n"
00077             "  -matvec_out2in mmm = Read a 3x4 affine transform matrix+vector\n"
00078             "                         from file 'mmm':\n"
00079             "                         x_in = Matrix x_out + Vector\n"
00080             "\n"
00081             "     ** N.B.: The coordinate vectors described above are\n"
00082             "               defined in DICOM ('RAI') coordinate order.\n"
00083             "               (Also see the '-fsl_matvec option, below.)\n"
00084             "     ** N.B.: Using the special name 'IDENTITY' for 'mmm'\n"
00085             "               means to use the identity matrix.\n"
00086             "     ** N.B.: You can put the matrix on the command line\n"
00087             "               directly by using an argument of the form\n"
00088             "       'MATRIX(a11,a12,a13,a14,a21,a22,a23,a24,a31,a32,a33,a34)'\n"
00089             "               in place of 'mmm', where the aij values are the\n"
00090             "               matrix entries (aij = i-th row, j-th column),\n"
00091             "               separated by commas.\n"
00092             "             * You will need the 'forward single quotes' around\n"
00093             "               the argument.\n"
00094             "\n"
00095             "  -tta2mni = Transform a dataset in Talairach-Tournoux Atlas\n"
00096             "              coordinates to MNI-152 coordinates.\n"
00097             "  -mni2tta = Transform a dataset in MNI-152 coordinates to\n"
00098             "              Talairach-Tournoux Atlas coordinates.\n"
00099             "\n"
00100             "  -matparent mset = Read in the matrix from WARPDRIVE_MATVEC_*\n"
00101             "                     attributes in the header of dataset 'mset',\n"
00102             "                     which must have been created by program\n"
00103             "                     3dWarpDrive.  In this way, you can apply\n"
00104             "                     a transformation matrix computed from\n"
00105             "                     in 3dWarpDrive to another dataset.\n"
00106             "\n"
00107             "     ** N.B.: The above option is analogous to the -rotparent\n"
00108             "                option in program 3drotate.  Use of -matparent\n"
00109             "                should be limited to datasets whose spatial\n"
00110             "                coordinate system corresponds to that which\n"
00111             "                was used for input to 3dWarpDrive (i.e., the\n"
00112             "                input to 3dWarp should overlay properly with\n"
00113             "                the input to 3dWarpDrive that generated the\n"
00114             "                -matparent dataset).\n"
00115             "              Sample usages:\n"
00116             " 3dWarpDrive -affine_general -base d1+orig -prefix d2WW -twopass -input d2+orig\n"
00117             " 3dWarp      -matparent d2WW+orig -prefix epi2WW epi2+orig\n"
00118 #if 0
00119             "\n"
00120             "  -matfile mname  = Read in the file 'mname', which consists\n"
00121             "                     of 12 ASCII-formatted numbers per line.\n"
00122             "                     The i-th input line defines a 3x4 matrix\n"
00123             "                     which is used to transform the i-th\n"
00124             "                     sub-brick of the input dataset.\n"
00125 #endif
00126             "\n"
00127             "-----------------------\n"
00128             "Other Transform Options:\n"
00129             "-----------------------\n"
00130             "  -linear     }\n"
00131             "  -cubic      } = Chooses spatial interpolation method.\n"
00132             "  -NN         } =   [default = linear]\n"
00133             "  -quintic    }\n"
00134             "\n"
00135             "  -fsl_matvec   = Indicates that the matrix file 'mmm' uses FSL\n"
00136             "                    ordered coordinates ('LPI').  For use with\n"
00137             "                    matrix files from FSL and SPM.\n"
00138             "\n"
00139             "  -newgrid ddd  = Tells program to compute new dataset on a\n"
00140             "                    new 3D grid, with spacing of 'ddd' mmm.\n"
00141             "                  * If this option is given, then the new\n"
00142             "                    3D region of space covered by the grid\n"
00143             "                    is computed by warping the 8 corners of\n"
00144             "                    the input dataset, then laying down a\n"
00145             "                    regular grid with spacing 'ddd'.\n"
00146             "                  * If this option is NOT given, then the\n"
00147             "                    new dataset is computed on the old\n"
00148             "                    dataset's grid.\n"
00149             "\n"
00150             "  -gridset ggg  = Tells program to compute new dataset on the\n"
00151             "                    same grid as dataset 'ggg'.\n"
00152             "\n"
00153             "  -zpad N       = Tells program to pad input dataset with 'N'\n"
00154             "                    planes of zeros on all sides before doing\n"
00155             "                    transformation.\n"
00156             "---------------------\n"
00157             "Miscellaneous Options:\n"
00158             "---------------------\n"
00159 #if 0
00160             "  -verb         = Print out some information along the way.\n"
00161 #endif
00162             "  -prefix ppp   = Sets the prefix of the output dataset.\n"
00163             "\n"
00164            ) ;
00165      exit(0) ;
00166    }
00167 
00168    /*-- startup mechanics --*/
00169 
00170    mainENTRY("3dWarp main"); machdep(); AFNI_logger("3dWarp",argc,argv);
00171    PRINT_VERSION("3dWarp") ;
00172 
00173    THD_coorder_fill( my_getenv("AFNI_ORIENT") , &cord ) ;  /* 12 Mar 2004 */
00174 
00175    /*-- command line options --*/
00176 
00177    while( nopt < argc && argv[nopt][0] == '-' ){
00178 
00179      /*----- 06 Jul 2005 -----*/
00180 
00181 #if 0
00182      if( strncmp(argv[nopt],"-matfile",8) == 0 ){
00183        if( matdefined )
00184          ERROR_exit("-matfile: Matrix already defined!\n");
00185        if( ++nopt >= argc )
00186          ERROR_exit("Need argument after -matfile!\n");
00187        matflim = mri_read_ascii( argv[nopt] ) ;
00188        if( matflim == NULL )
00189          ERROR_exit("Can't read from -matfile %s\n",argv[nopt]);
00190        if( matflim->nx < 12 )
00191          ERROR_exit("Need 12 numbers per line in -matfile %s\n",argv[nopt]) ;
00192 
00193        matflar = MRI_FLOAT_PTR(matflim) ;
00194        matdefined = 1 ; nopt++ ; continue ;
00195      }
00196 #endif
00197 
00198      /*-----*/
00199 
00200      if( strncmp(argv[nopt],"-matparent",10) == 0 ){
00201        ATR_float *atr ; float *matar ; THD_3dim_dataset *matparset=NULL ;
00202 
00203        if( matdefined )
00204          ERROR_exit("-matparent: Matrix already defined!\n");
00205        if( ++nopt >= argc )
00206          ERROR_exit("Need argument after -matparent!\n");
00207        matparset = THD_open_dataset( argv[nopt] ) ;
00208        if( matparset == NULL )
00209          ERROR_exit("Can't open -matparent %s\n",argv[nopt]);
00210        atr = THD_find_float_atr( matparset->dblk, "WARPDRIVE_MATVEC_INV_000000" );
00211        if( atr != NULL ) atr_matinv = (ATR_float *)THD_copy_atr( (ATR_any *)atr ) ;
00212        atr = THD_find_float_atr( matparset->dblk, "WARPDRIVE_MATVEC_FOR_000000" );
00213        if( atr != NULL ) atr_matfor = (ATR_float *)THD_copy_atr( (ATR_any *)atr ) ;
00214        if( atr_matinv == NULL ||  atr_matinv->nfl < 12 )
00215          ERROR_exit("-matparent %s doesn't have WARPDRIVE attributes!?\n",argv[nopt]) ;
00216 
00217        matar = atr_matinv->fl ;
00218        if( strstr(argv[nopt-1],"INV") == NULL ){
00219          LOAD_MAT  ( dicom_in2out.mm, matar[0],matar[1],matar[2],
00220                                       matar[4],matar[5],matar[6],
00221                                       matar[8],matar[9],matar[10] ) ;
00222          LOAD_FVEC3( dicom_in2out.vv, matar[3],matar[7],matar[11] ) ;
00223          dicom_out2in = INV_VECMAT( dicom_in2out ) ;
00224        } else {
00225          LOAD_MAT  ( dicom_out2in.mm, matar[0],matar[1],matar[2],
00226                                       matar[4],matar[5],matar[6],
00227                                       matar[8],matar[9],matar[10] ) ;
00228          LOAD_FVEC3( dicom_out2in.vv, matar[3],matar[7],matar[11] ) ;
00229          dicom_in2out = INV_VECMAT( dicom_out2in ) ;
00230        }
00231 
00232        DSET_delete(matparset) ;
00233 
00234        use_matvec = MATVEC_FOR ; matdefined = 1 ; nopt++ ; continue ;
00235      }
00236 
00237      /*----- 11 Mar 2004 -----*/
00238 
00239      if( strcmp(argv[nopt],"-tta2mni") == 0 ){
00240        if( matdefined )
00241          ERROR_exit("-tta2mni: Matrix already defined!\n");
00242        matdefined = 1 ; tta2mni = 1 ; nopt++ ; continue ;
00243      }
00244 
00245      if( strcmp(argv[nopt],"-mni2tta") == 0 ){
00246        if( matdefined )
00247          ERROR_exit("-mni2tta: Matrix already defined!\n");
00248        matdefined = 1 ; mni2tta = 1 ; nopt++ ; continue ;
00249      }
00250 
00251      /*-----*/
00252 
00253      if( strcmp(argv[nopt],"-fsl_matvec") == 0 ){
00254        fsl = 1 ; nopt++ ; continue ;
00255      }
00256 
00257      /*-----*/
00258 
00259      if( strcmp(argv[nopt],"-gridset") == 0 ){
00260        if( use_newgrid )
00261          ERROR_exit("Can't use -gridset with -newgrid!\n");
00262        if( newgset != NULL )
00263          ERROR_exit("Can't use -gridset twice!\n");
00264        if( ++nopt >= argc )
00265          ERROR_exit("Need argument after -gridset!\n");
00266        newgset = THD_open_dataset( argv[nopt] ) ;
00267        if( newgset == NULL )
00268          ERROR_exit("Can't open -gridset %s\n",argv[nopt]);
00269        nopt++ ; continue ;
00270      }
00271 
00272      /*-----*/
00273 
00274      if( strcmp(argv[nopt],"-zpad") == 0 ){
00275        if( ++nopt >= argc )
00276          ERROR_exit("Need argument after -zpad!\n");
00277        zpad = (int) strtod( argv[nopt] , NULL ) ;
00278        if( zpad < 0 )
00279          ERROR_exit("Illegal negative argument after -zpad!\n");
00280        else if( zpad == 0 )
00281          INFO_message("NOTA BENE: -zpad is 0 ==> ignored\n") ;
00282        nopt++ ; continue ;
00283      }
00284 
00285      /*-----*/
00286 
00287      if( strcmp(argv[nopt],"-newgrid") == 0 ){
00288        if( newgset != NULL )
00289          ERROR_exit("Can't use -newgrid with -gridset!\n");
00290        if( use_newgrid )
00291          ERROR_exit("Can't use -newgrid twice!\n");
00292        if( ++nopt >= argc )
00293          ERROR_exit("Need argument after -newgrid!\n");
00294 
00295        ddd_newgrid = strtod( argv[nopt] , NULL ) ;
00296        if( ddd_newgrid <= 0.0 )
00297          ERROR_exit("Illegal argument after -newgrid!\n");
00298 
00299        use_newgrid = 1 ; nopt++ ; continue ;
00300      }
00301 
00302      /*-----*/
00303 
00304      if( strcmp(argv[nopt],"-NN")     == 0 ){
00305        mri_warp3D_method( MRI_NN )     ; nopt++ ; continue ;
00306      }
00307      if( strcmp(argv[nopt],"-linear") == 0 ){
00308        mri_warp3D_method( MRI_LINEAR ) ; nopt++ ; continue ;
00309      }
00310      if( strcmp(argv[nopt],"-cubic")  == 0 ){
00311        mri_warp3D_method( MRI_CUBIC )  ; nopt++ ; continue ;
00312      }
00313      if( strcmp(argv[nopt],"-quintic") == 0 ){
00314        mri_warp3D_method( MRI_QUINTIC ); nopt++ ; continue ;  /* 06 Aug 2003 */
00315      }
00316 
00317      /*-----*/
00318 
00319      if( strcmp(argv[nopt],"-prefix") == 0 ){
00320        if( ++nopt >= argc )
00321          ERROR_exit("Need an argument after -prefix!\n");
00322        if( !THD_filename_ok(argv[nopt]) )
00323          ERROR_exit("-prefix argument is invalid!\n");
00324 
00325        prefix = argv[nopt] ; nopt++ ; continue ;
00326      }
00327 
00328      /*-----*/
00329 
00330      if( strncmp(argv[nopt],"-verbose",5) == 0 ){
00331        verb++ ; nopt++ ; continue ;
00332      }
00333 
00334      /*-----*/
00335 
00336      if( strncmp(argv[nopt],"-matvec_",8) == 0 ){
00337        MRI_IMAGE *matim ; float *matar , dm ;
00338 
00339        if( matdefined )
00340          ERROR_exit("%s: matrix already defined!\n",argv[nopt]);
00341        if( ++nopt >= argc )
00342          ERROR_exit("Need an argument after -matvec!\n");
00343        if( strcmp(argv[nopt],"IDENTITY") == 0 ){ /* load identity matrix */
00344          matim = mri_new( 4,3 , MRI_float ) ;    /* will be all zero */
00345          matar = MRI_FLOAT_PTR(matim) ;
00346          matar[0] = matar[5] = matar[10] = 1.0 ;
00347        } else if( strncmp(argv[nopt],"MATRIX(",7) == 0 ){ /* matrix from arg */
00348          int nn ;
00349          matim = mri_new( 4,3 , MRI_float ) ;    /* will be all zero */
00350          matar = MRI_FLOAT_PTR(matim) ;
00351          nn = sscanf(argv[nopt],"MATRIX(%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f",
00352                      matar+0 , matar+1 , matar+2 , matar+3 ,
00353                      matar+4 , matar+5 , matar+6 , matar+7 ,
00354                      matar+8 , matar+9 , matar+10, matar+11 ) ;
00355          if( nn < 12 )
00356            ERROR_exit("Could only decode %d numbers from %s\n",nn,argv[nopt]) ;
00357        } else {
00358          matim = mri_read_ascii( argv[nopt] ) ;
00359          if( matim == NULL )
00360            ERROR_exit("Can't read -matvec file %s\n",argv[nopt]);
00361          if( matim->nx != 4 || matim->ny < 3 )
00362            ERROR_exit("-matvec file not a 3x4 matrix!\n");
00363          matar = MRI_FLOAT_PTR(matim) ;
00364        }
00365 
00366        use_matvec = (strstr(argv[nopt-1],"_in2out") != NULL) ? MATVEC_FOR : MATVEC_BAC ;
00367 
00368        switch( use_matvec ){
00369 
00370          case MATVEC_FOR:
00371            LOAD_MAT  ( dicom_in2out.mm, matar[0],matar[1],matar[2],
00372                                         matar[4],matar[5],matar[6],
00373                                         matar[8],matar[9],matar[10] ) ;
00374            LOAD_FVEC3( dicom_in2out.vv, matar[3],matar[7],matar[11] ) ;
00375 
00376            dm = MAT_DET( dicom_in2out.mm ) ;
00377            if( dm == 0.0 )
00378              ERROR_exit("Determinant of matrix is 0\n");
00379 
00380            dicom_out2in = INV_VECMAT( dicom_in2out ) ;
00381          break ;
00382 
00383          case MATVEC_BAC:
00384            LOAD_MAT  ( dicom_out2in.mm, matar[0],matar[1],matar[2],
00385                                         matar[4],matar[5],matar[6],
00386                                         matar[8],matar[9],matar[10] ) ;
00387            LOAD_FVEC3( dicom_out2in.vv, matar[3],matar[7],matar[11] ) ;
00388 
00389            dm = MAT_DET( dicom_out2in.mm ) ;
00390            if( dm == 0.0 )
00391              ERROR_exit("Determinant of matrix is 0\n");
00392 
00393            dicom_in2out = INV_VECMAT( dicom_out2in ) ;
00394          break ;
00395        }
00396 
00397        matdefined = 1 ; nopt++ ; continue ;
00398      }
00399 
00400      /*-----*/
00401 
00402      ERROR_exit("Unknown option %s\n",argv[nopt]) ;
00403 
00404    } /* end of loop over options */
00405 
00406    /*-- check to see if we have a warp specified --*/
00407 
00408    if( !matdefined )
00409      ERROR_exit("No transformation on command line!?\n");
00410 
00411    if( tta2mni || mni2tta ) fsl = 0 ;
00412 
00413    /*-- 06 Aug 2003: if FSL matrix, flip stuff around --*/
00414 
00415    if( use_matvec && fsl ){
00416      dicom_in2out.mm.mat[0][2] = -dicom_in2out.mm.mat[0][2] ;
00417      dicom_in2out.mm.mat[1][2] = -dicom_in2out.mm.mat[1][2] ;
00418      dicom_in2out.mm.mat[2][0] = -dicom_in2out.mm.mat[2][0] ;
00419      dicom_in2out.mm.mat[2][1] = -dicom_in2out.mm.mat[2][1] ;
00420      dicom_in2out.vv.xyz[0]    = -dicom_in2out.vv.xyz[0]    ;
00421      dicom_in2out.vv.xyz[1]    = -dicom_in2out.vv.xyz[1]    ;
00422 
00423      dicom_out2in.mm.mat[0][2] = -dicom_out2in.mm.mat[0][2] ;
00424      dicom_out2in.mm.mat[1][2] = -dicom_out2in.mm.mat[1][2] ;
00425      dicom_out2in.mm.mat[2][0] = -dicom_out2in.mm.mat[2][0] ;
00426      dicom_out2in.mm.mat[2][1] = -dicom_out2in.mm.mat[2][1] ;
00427      dicom_out2in.vv.xyz[0]    = -dicom_out2in.vv.xyz[0]    ;
00428      dicom_out2in.vv.xyz[1]    = -dicom_out2in.vv.xyz[1]    ;
00429    }
00430 
00431    /*-- 1 remaining argument should be a dataset --*/
00432 
00433    if( nopt != argc-1 ){
00434      ERROR_message("Command line should have exactly 1 dataset!") ;
00435      ERROR_exit   ("Whereas there seems to be %d of them!\n", argc-nopt ) ;
00436    }
00437 
00438    /*-- input dataset header --*/
00439 
00440    inset = THD_open_dataset( argv[nopt] ) ;
00441    if( !ISVALID_DSET(inset) )
00442      ERROR_exit("Can't open dataset %s\n",argv[nopt]);
00443 
00444    /*- 11 Mar 2004: check for coherency -*/
00445 
00446    if( tta2mni || mni2tta ){
00447      if( inset->view_type != VIEW_TALAIRACH_TYPE ){
00448        WARNING_message("Input dataset not in +tlrc view!\n") ;
00449      } else {
00450        ATR_string *ast ;
00451        ast = THD_find_string_atr( inset->dblk , "TLRC_SPACE" ) ;
00452        if( ast != NULL ){
00453          if( strcmp(ast->ch,"MNI-152") == 0 && tta2mni ){
00454            WARNING_message("Input dataset appears to be MNI-152 already!\n");
00455          }
00456        }
00457      }
00458    }
00459 
00460    /*-- do the heavy lifting --*/
00461 
00462    if( use_newgrid ){
00463      newggg = &ddd_newgrid ; gflag = WARP3D_NEWGRID ;
00464    } else if( newgset != NULL ){
00465      newggg = newgset      ; gflag = WARP3D_NEWDSET ;
00466    }
00467 
00468    if( use_matvec ){
00469      outset = THD_warp3D_affine( inset , dicom_out2in ,
00470                                  newggg , prefix , zpad , gflag ) ;
00471    } else if( tta2mni ){
00472      outset = THD_warp3D_tta2mni( inset , newggg , prefix,zpad,gflag ) ;
00473    } else if( mni2tta ){
00474      outset = THD_warp3D_mni2tta( inset , newggg , prefix,zpad,gflag ) ;
00475    }
00476 
00477    if( outset == NULL )
00478      ERROR_exit("THD_warp3D() fails for some reason!\n") ;
00479 
00480    /*-- polish up the new dataset info --*/
00481 
00482    tross_Copy_History( inset , outset ) ;
00483    tross_Make_History( "3dWarp" , argc,argv , outset ) ;
00484 
00485    /*- 11 Mar 2004: mark output dataset as being in MNI space -*/
00486 
00487    if( tta2mni ){
00488      THD_set_string_atr( outset->dblk , "TLRC_SPACE" , "MNI-152" ) ;
00489    }
00490 
00491    /*- 03 Aug 2005: save WARPDRIVE attributes, if present -*/
00492 
00493    if( atr_matfor != NULL ) THD_insert_atr( outset->dblk, (ATR_any *)atr_matfor );
00494    if( atr_matinv != NULL ) THD_insert_atr( outset->dblk, (ATR_any *)atr_matinv );
00495 
00496    /*- actually do the writositing -*/
00497 
00498    DSET_delete( inset ) ;
00499    DSET_write( outset ) ; if( verb ) WROTE_DSET(outset) ;
00500    exit(0) ;
00501 }

void warp_dicom_in2out float    xin,
float    yin,
float    zin,
float *    xout,
float *    yout,
float *    zout
 

Definition at line 17 of file 3dWarp.c.

References LOAD_FVEC3, UNLOAD_FVEC3, and VECMAT_VEC.

00019 {
00020    THD_fvec3 xxx ;
00021    LOAD_FVEC3( xxx , xin,yin,zin ) ;
00022    xxx = VECMAT_VEC( dicom_in2out , xxx ) ;
00023    UNLOAD_FVEC3( xxx , *xout , *yout , *zout ) ;
00024 }

void warp_dicom_out2in float    xin,
float    yin,
float    zin,
float *    xout,
float *    yout,
float *    zout
 

Definition at line 28 of file 3dWarp.c.

References LOAD_FVEC3, UNLOAD_FVEC3, and VECMAT_VEC.

00030 {
00031    THD_fvec3 xxx ;
00032    LOAD_FVEC3( xxx , xin,yin,zin ) ;
00033    xxx = VECMAT_VEC( dicom_out2in , xxx ) ;
00034    UNLOAD_FVEC3( xxx , *xout , *yout , *zout ) ;
00035 }

Variable Documentation

THD_vecmat dicom_in2out [static]
 

Definition at line 13 of file 3dWarp.c.

THD_vecmat dicom_out2in [static]
 

Definition at line 13 of file 3dWarp.c.

 

Powered by Plone

This site conforms to the following standards: