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