1 #ifndef _AFNI_BILINEAR_WARP_HEADER_ 2 #define _AFNI_BILINEAR_WARP_HEADER_ 3 4 /** This header is independent of other AFNI header files [we hope] **/ 5 6 #include <string.h> 7 #include <stdio.h> 8 #include <stdlib.h> 9 #include <math.h> 10 11 #undef INLINE 12 #ifdef __GNUC__ 13 # define INLINE __inline__ 14 #else 15 # define INLINE /*nada*/ 16 #endif 17 18 /*--------------------------------------------------------------------------*/ 19 20 typedef struct { float v[3] ; } BLvec ; 21 typedef struct { float m[3][3] ; } BLmat ; 22 typedef struct { float t[3][3][3] ; } BLten ; 23 24 typedef struct { 25 BLmat a ; 26 BLvec b ; 27 BLten c ; 28 } BL_standard_warp ; /* inv[I+c.x][a.x+b] */ 29 30 typedef struct { 31 BLmat e , g ; 32 BLvec h , t ; 33 BLten f ; 34 } BL_general_warp ; /* inv[e+f.x][g.x+h]+t */ 35 36 typedef struct { 37 BLmat a ; 38 BLvec b ; 39 } BL_affine_warp ; 40 41 extern BL_standard_warp BL_invert_warp ( BL_standard_warp wi ) ; 42 extern BL_standard_warp BL_standardize_warp( BL_general_warp wi ) ; 43 extern BL_standard_warp BL_warp_from_params( int npar , float *par ) ; 44 45 46 extern BL_affine_warp BL_affine_from_12_params ( float *par ) ; 47 extern BL_affine_warp BL_affine_from_12_elements( float *par ) ; 48 extern BL_affine_warp BL_extract_affine_warp ( BL_standard_warp wi ) ; 49 extern BL_standard_warp BL_extend_affine_warp ( BL_affine_warp wa ) ; 50 51 extern BL_standard_warp BL_bilinear_x_affine( BL_standard_warp, BL_affine_warp ) ; 52 extern BL_standard_warp BL_affine_x_bilinear( BL_affine_warp, BL_standard_warp ) ; 53 54 extern void BL_print_standard_warp( char *name , BL_standard_warp ws ) ; 55 extern int BL_warp_tensor_status( BL_standard_warp wi ) ; 56 extern void BL_params_from_warp( BL_standard_warp wi , float *par ) ; 57 58 extern void BL_apply_warp( BL_standard_warp wi , 59 int npt , 60 float *xi , float *yi , float *zi , 61 float *xo , float *yo , float *zo ) ; 62 63 #endif /* _AFNI_BILINEAR_WARP_HEADER_ */ 64