Doxygen Source Code Documentation
3dUniformize.c File Reference
#include "mrilib.h"
#include "matrix.h"
#include "matrix.c"
#include "estpdf3.c"
Go to the source code of this file.
Data Structures | |
struct | UN_options |
Defines | |
#define | PROGRAM_NAME "3dUniformize" |
#define | PROGRAM_AUTHOR "B. D. Ward" |
#define | PROGRAM_INITIAL "28 January 2000" |
#define | PROGRAM_LATEST "16 April 2003" |
#define | MAX_STRING_LENGTH 80 |
#define | USE_QUIET |
#define | MTEST(ptr) |
Typedefs | |
typedef UN_options | UN_options |
Functions | |
void | UN_error (char *message) |
void | display_help_menu () |
void | initialize_options (UN_options *option_data) |
void | get_options (int argc, char **argv, UN_options *option_data) |
void | check_one_output_file (char *filename) |
void | verify_inputs (UN_options *option_data) |
void | initialize_program (int argc, char **argv, UN_options **option_data, short **sfim) |
void | ts_write (char *filename, int ts_length, float *data) |
void | resample (UN_options *option_data, int *ir, float *vr) |
void | create_map (pdf vpdf, float *pars, float *vtou) |
void | map_vtou (pdf vpdf, int rpts, float *vr, float *vtou, float *ur) |
void | subtract (int rpts, float *a, float *b, float *c) |
void | create_row (int ixyz, int nx, int ny, int nz, float *xrow) |
void | poly_field (int nx, int ny, int nz, int rpts, int *ir, float *fr, int spts, int npar, float *fpar) |
float | warp_image (int npar, float *fpar, int nx, int ny, int nz, int rpts, int *ir, float *fs) |
void | estimate_field (UN_options *option_data, int *ir, float *vr, float *fpar) |
void | remove_field (UN_options *option_data, float *fpar, short *sfim) |
void | uniformize (UN_options *option_data, short *sfim) |
void | write_afni_data (UN_options *option_data, short *sfim) |
int | main (int argc, char **argv) |
Variables | |
THD_3dim_dataset * | anat_dset = NULL |
char * | commandline = NULL |
int | input_datum = MRI_short |
int | quiet = 0 |
Define Documentation
|
Definition at line 41 of file 3dUniformize.c. Referenced by check_one_output_file(), estimate_field(), and get_options(). |
|
Value: if((ptr)==NULL) \ ( UN_error ("Cannot allocate memory") ) Definition at line 88 of file 3dUniformize.c. |
|
Definition at line 23 of file 3dUniformize.c. Referenced by main(). |
|
Definition at line 24 of file 3dUniformize.c. Referenced by main(). |
|
Definition at line 25 of file 3dUniformize.c. Referenced by main(). |
|
Definition at line 22 of file 3dUniformize.c. Referenced by get_options(), initialize_program(), main(), and UN_error(). |
|
Definition at line 48 of file 3dUniformize.c. |
Typedef Documentation
|
|
Function Documentation
|
RWCox [16 Apr 2003] If input is a byte dataset, make a short copy of it. * Definition at line 269 of file 3dUniformize.c. References ADN_label1, ADN_none, ADN_prefix, ADN_self_name, THD_3dim_dataset::dblk, THD_datablock::diskptr, EDIT_dset_items(), EDIT_empty_copy(), THD_diskptr::header_name, MAX_STRING_LENGTH, THD_delete_3dim_dataset(), THD_is_file(), and UN_error().
00273 { 00274 char message[MAX_STRING_LENGTH]; /* error message */ 00275 THD_3dim_dataset * new_dset=NULL; /* output afni data set pointer */ 00276 int ierror; /* number of errors in editing data */ 00277 00278 00279 /*----- make an empty copy of input dataset -----*/ 00280 new_dset = EDIT_empty_copy ( anat_dset ); 00281 00282 00283 ierror = EDIT_dset_items( new_dset , 00284 ADN_prefix , filename , 00285 ADN_label1 , filename , 00286 ADN_self_name , filename , 00287 ADN_none ) ; 00288 00289 if( ierror > 0 ) 00290 { 00291 sprintf (message, 00292 "*** %d errors in attempting to create output dataset!\n", 00293 ierror); 00294 UN_error (message); 00295 } 00296 00297 if( THD_is_file(new_dset->dblk->diskptr->header_name) ) 00298 { 00299 sprintf (message, 00300 "Output dataset file %s already exists" 00301 "--cannot continue!\a\n", 00302 new_dset->dblk->diskptr->header_name); 00303 UN_error (message); 00304 } 00305 00306 /*----- deallocate memory -----*/ 00307 THD_delete_3dim_dataset( new_dset , False ) ; new_dset = NULL ; 00308 00309 } |
|
Definition at line 446 of file 3dUniformize.c. References pdf::nbin, PDF_ibin_to_xvalue(), and v. Referenced by estimate_field().
00448 { 00449 int ibin; 00450 float v; 00451 00452 for (ibin = 0; ibin < vpdf.nbin; ibin++) 00453 { 00454 v = PDF_ibin_to_xvalue (vpdf, ibin); 00455 00456 if ((v > pars[4]-2.0*pars[5]) && (v < 0.5*(pars[4]+pars[7]))) 00457 vtou[ibin] = pars[4]; 00458 else if ((v > 0.5*(pars[4]+pars[7])) && (v < pars[7]+2.0*pars[8])) 00459 vtou[ibin] = pars[7]; 00460 else 00461 vtou[ibin] = v; 00462 00463 } 00464 00465 } |
|
Definition at line 515 of file 3dUniformize.c. References IJK_TO_THREE, nz, and x2. Referenced by poly_field(), remove_field(), and warp_image().
00517 { 00518 int ix, jy, kz; 00519 float x, y, z, x2, y2, z2, x3, y3, z3, x4, y4, z4; 00520 00521 00522 IJK_TO_THREE (ixyz, ix, jy, kz, nx, nx*ny); 00523 00524 00525 x = (float) ix / (float) nx - 0.5; 00526 y = (float) jy / (float) ny - 0.5; 00527 z = (float) kz / (float) nz - 0.5; 00528 00529 x2 = x*x; x3 = x*x2; x4 = x2*x2; 00530 y2 = y*y; y3 = y*y2; y4 = y2*y2; 00531 z2 = z*z; z3 = z*z2; z4 = z2*z2; 00532 00533 00534 xrow[0] = 1.0; 00535 xrow[1] = x; 00536 xrow[2] = y; 00537 xrow[3] = z; 00538 xrow[4] = x*y; 00539 xrow[5] = x*z; 00540 xrow[6] = y*z; 00541 xrow[7] = x2; 00542 xrow[8] = y2; 00543 xrow[9] = z2; 00544 xrow[10] = x*y*z; 00545 xrow[11] = x2*y; 00546 xrow[12] = x2*z; 00547 xrow[13] = y2*x; 00548 xrow[14] = y2*z; 00549 xrow[15] = z2*x; 00550 xrow[16] = z2*y; 00551 xrow[17] = x3; 00552 xrow[18] = y3; 00553 xrow[19] = z3; 00554 xrow[20] = x2*y*z; 00555 xrow[21] = x*y2*z; 00556 xrow[22] = x*y*z2; 00557 xrow[23] = x2*y2; 00558 xrow[24] = x2*z2; 00559 xrow[25] = y2*z2; 00560 xrow[26] = x3*y; 00561 xrow[27] = x3*z; 00562 xrow[28] = x*y3; 00563 xrow[29] = y3*z; 00564 xrow[30] = x*z3; 00565 xrow[31] = y*z3; 00566 xrow[32] = x4; 00567 xrow[33] = y4; 00568 xrow[34] = z4; 00569 00570 00571 return; 00572 } |
|
Definition at line 98 of file 3dUniformize.c. References MASTER_SHORTHELP_STRING.
00099 { 00100 printf 00101 ( 00102 "This program corrects for image intensity non-uniformity.\n\n" 00103 "Usage: \n" 00104 "3dUniformize \n" 00105 "-anat filename Filename of anat dataset to be corrected \n" 00106 " \n" 00107 "[-quiet] Suppress output to screen \n" 00108 " \n" 00109 "-prefix pname Prefix name for file to contain corrected image \n" 00110 ); 00111 00112 printf("\n" MASTER_SHORTHELP_STRING ) ; 00113 exit(0); 00114 } |
|
Definition at line 738 of file 3dUniformize.c. References create_map(), DSET_NX, DSET_NY, DSET_NZ, estpdf_float(), free, malloc, map_vtou(), MAX_STRING_LENGTH, MTEST, pdf::nbin, UN_options::nbin, UN_options::npar, nz, p, PDF_float_to_pdf(), PDF_initialize(), PDF_sprint(), PDF_write_file(), poly_field(), quiet, UN_options::rpts, UN_options::spts, subtract(), ts_write(), and warp_image(). Referenced by uniformize().
00740 { 00741 float * ur = NULL, * us = NULL, * fr = NULL, * fs = NULL, * wr = NULL; 00742 float * vtou = NULL; 00743 float * gpar; 00744 int iter = 0; 00745 int ip; 00746 int it; 00747 int nx, ny, nz, nxy, nxyz; 00748 int rpts, spts, nbin, npar; 00749 float parameters [DIMENSION]; /* parameters for PDF estimation */ 00750 Boolean ok = TRUE; /* flag for successful PDF estimation */ 00751 char filename[MAX_STRING_LENGTH]; 00752 00753 00754 /*----- Initialize local variables -----*/ 00755 nx = DSET_NX(anat_dset); ny = DSET_NY(anat_dset); nz = DSET_NZ(anat_dset); 00756 nxy = nx*ny; nxyz = nxy*nz; 00757 rpts = option_data->rpts; 00758 spts = option_data->spts; 00759 nbin = option_data->nbin; 00760 npar = option_data->npar; 00761 00762 00763 00764 /*----- Allocate memory -----*/ 00765 ur = (float *) malloc (sizeof(float) * rpts); MTEST (ur); 00766 us = (float *) malloc (sizeof(float) * rpts); MTEST (us); 00767 fr = (float *) malloc (sizeof(float) * rpts); MTEST (fr); 00768 fs = (float *) malloc (sizeof(float) * rpts); MTEST (fs); 00769 wr = (float *) malloc (sizeof(float) * rpts); MTEST (wr); 00770 gpar = (float *) malloc (sizeof(float) * npar); MTEST (gpar); 00771 vtou = (float *) malloc (sizeof(float) * nbin); MTEST (vtou); 00772 00773 00774 /*----- Initialize polynomial coefficients -----*/ 00775 for (ip = 0; ip < npar; ip++) 00776 { 00777 fpar[ip] = 0.0; 00778 gpar[ip] = 0.0; 00779 } 00780 00781 00782 /*----- Estimate pdf for resampled data -----*/ 00783 PDF_initialize (&p); 00784 PDF_float_to_pdf (rpts, vr, nbin, &p); 00785 00786 if( !quiet ){ 00787 sprintf (filename, "p%d.1D", iter); 00788 PDF_write_file (filename, p); 00789 } 00790 00791 00792 /*----- Estimate gross field distortion -----*/ 00793 poly_field (nx, ny, nz, rpts, ir, vr, spts, npar, fpar); 00794 warp_image (npar, fpar, nx, ny, nz, rpts, ir, fs); 00795 subtract (rpts, vr, fs, ur); 00796 00797 00798 for (ip = 0; ip < rpts; ip++) 00799 vr[ip] = ur[ip]; 00800 00801 00802 /*----- Iterate over field distortion for concentrating the PDF -----*/ 00803 for (iter = 1; iter <= 5; iter++) 00804 { 00805 /*----- Estimate pdf for perturbed image ur -----*/ 00806 estpdf_float (rpts, ur, nbin, parameters); 00807 PDF_sprint ("p", p); 00808 if( !quiet ){ 00809 sprintf (filename, "p%d.1D", iter); 00810 PDF_write_file (filename, p); 00811 } 00812 00813 /*----- Sharpen the pdf and produce modified image wr -----*/ 00814 create_map (p, parameters, vtou); 00815 if( !quiet ){ 00816 sprintf (filename, "vtou%d.1D", iter); 00817 ts_write (filename, p.nbin, vtou); 00818 } 00819 map_vtou (p, rpts, ur, vtou, wr); 00820 00821 /*----- Estimate smooth distortion field fs -----*/ 00822 subtract (rpts, vr, wr, fr); 00823 poly_field (nx, ny, nz, rpts, ir, fr, spts, npar, gpar); 00824 warp_image (npar, gpar, nx, ny, nz, rpts, ir, fs); 00825 00826 /*----- Create perturbed image ur -----*/ 00827 subtract (rpts, vr, fs, ur); 00828 } 00829 00830 00831 /*----- Accumulate distortion field polynomial coefficients -----*/ 00832 for (ip = 0; ip < npar; ip++) 00833 fpar[ip] += gpar[ip]; 00834 00835 00836 /*----- Deallocate memory -----*/ 00837 free (ur); ur = NULL; 00838 free (us); us = NULL; 00839 free (fr); fr = NULL; 00840 free (fs); fs = NULL; 00841 free (wr); wr = NULL; 00842 free (gpar); gpar = NULL; 00843 free (vtou); vtou = NULL; 00844 00845 00846 return; 00847 } |
|
Definition at line 149 of file 3dUniformize.c. References AFNI_logger(), argc, THD_3dim_dataset::dblk, display_help_menu(), DSET_ARRAY, DSET_BRICK_TYPE, DSET_delete, DSET_NVOX, EDIT_empty_copy(), EDIT_substitute_brick(), input_datum, ISVALID_3DIM_DATASET, malloc, MAX_STRING_LENGTH, MTEST, PROGRAM_NAME, quiet, THD_load_datablock(), THD_open_dataset(), and UN_error().
00155 { 00156 int nopt = 1; /* input option argument counter */ 00157 int ival, index; /* integer input */ 00158 float fval; /* float input */ 00159 char message[MAX_STRING_LENGTH]; /* error message */ 00160 00161 00162 /*----- does user request help menu? -----*/ 00163 if (argc < 2 || strncmp(argv[1], "-help", 5) == 0) display_help_menu(); 00164 00165 00166 /*----- add to program log -----*/ 00167 AFNI_logger (PROGRAM_NAME,argc,argv); 00168 00169 00170 /*----- main loop over input options -----*/ 00171 while (nopt < argc ) 00172 { 00173 00174 /*----- -anat filename -----*/ 00175 if (strncmp(argv[nopt], "-anat", 5) == 0) 00176 { 00177 nopt++; 00178 if (nopt >= argc) UN_error ("need argument after -anat "); 00179 option_data->anat_filename = 00180 malloc (sizeof(char) * MAX_STRING_LENGTH); 00181 MTEST (option_data->anat_filename); 00182 strcpy (option_data->anat_filename, argv[nopt]); 00183 00184 anat_dset = THD_open_dataset (option_data->anat_filename); 00185 if (!ISVALID_3DIM_DATASET (anat_dset)) 00186 { 00187 sprintf (message, "Can't open dataset: %s\n", 00188 option_data->anat_filename); 00189 UN_error (message); 00190 } 00191 THD_load_datablock (anat_dset->dblk); 00192 if (DSET_ARRAY(anat_dset,0) == NULL) 00193 { 00194 sprintf (message, "Can't access data: %s\n", 00195 option_data->anat_filename); 00196 UN_error (message); 00197 } 00198 00199 /** RWCox [16 Apr 2003] 00200 If input is a byte dataset, make a short copy of it. **/ 00201 00202 if( DSET_BRICK_TYPE(anat_dset,0) == MRI_byte ){ 00203 00204 THD_3dim_dataset *qset ; 00205 register byte *bar ; register short *sar ; 00206 register int ii,nvox ; 00207 00208 fprintf(stderr,"++ WARNING: converting input dataset from byte to short\n") ; 00209 qset = EDIT_empty_copy(anat_dset) ; 00210 nvox = DSET_NVOX(anat_dset) ; 00211 bar = (byte *) DSET_ARRAY(anat_dset,0) ; 00212 sar = (short *)malloc(sizeof(short)*nvox) ; 00213 for( ii=0 ; ii < nvox ; ii++ ) sar[ii] = (short) bar[ii] ; 00214 EDIT_substitute_brick( qset , 0 , MRI_short , sar ) ; 00215 DSET_delete(anat_dset) ; anat_dset = qset ; input_datum = MRI_byte ; 00216 00217 } else if ( DSET_BRICK_TYPE(anat_dset,0) != MRI_short ){ 00218 00219 fprintf(stderr,"** ERROR: input dataset not short or byte type!\n") ; 00220 exit(1) ; 00221 00222 } 00223 00224 nopt++; 00225 continue; 00226 } 00227 00228 00229 /*----- -quiet -----*/ 00230 if (strncmp(argv[nopt], "-quiet", 6) == 0) 00231 { 00232 option_data->quiet = TRUE; 00233 quiet = 1 ; /* 16 Apr 2003 */ 00234 nopt++; 00235 continue; 00236 } 00237 00238 00239 /*----- -prefix prefixname -----*/ 00240 if (strncmp(argv[nopt], "-prefix", 7) == 0) 00241 { 00242 nopt++; 00243 if (nopt >= argc) UN_error ("need argument after -prefix "); 00244 option_data->prefix_filename = 00245 malloc (sizeof(char) * MAX_STRING_LENGTH); 00246 MTEST (option_data->prefix_filename); 00247 strcpy (option_data->prefix_filename, argv[nopt]); 00248 nopt++; 00249 continue; 00250 } 00251 00252 00253 /*----- unknown command -----*/ 00254 sprintf(message,"Unrecognized command line option: %s\n", argv[nopt]); 00255 UN_error (message); 00256 00257 } 00258 00259 00260 } |
|
Definition at line 123 of file 3dUniformize.c.
00127 { 00128 00129 /*----- initialize default values -----*/ 00130 option_data->anat_filename = NULL; /* file name for input anat dataset */ 00131 option_data->prefix_filename = NULL; /* prefix name for output dataset */ 00132 option_data->quiet = FALSE; /* flag for suppress screen output */ 00133 option_data->lower_limit = 25; /* voxel intensity lower limit */ 00134 option_data->rpts = 200000; /* #voxels in sub-sampled image (for pdf) */ 00135 option_data->spts = 10000; /* #voxels in subsub-sampled image 00136 (for field polynomial estimation) */ 00137 option_data->nbin = 250; /* #bins for pdf estimation */ 00138 option_data->npar = 35; /* #parameters for field polynomial */ 00139 00140 } |
|
Definition at line 329 of file 3dUniformize.c. References argc, commandline, DSET_NX, DSET_NY, DSET_NZ, get_options(), initialize_options(), malloc, MTEST, PROGRAM_NAME, rand_initialize(), tross_commandline(), and verify_inputs().
00336 { 00337 int nxyz; /* #voxels in input dataset */ 00338 00339 00340 /*----- Save command line for history notes -----*/ 00341 commandline = tross_commandline( PROGRAM_NAME , argc,argv ) ; 00342 00343 00344 /*----- Allocate memory for input options -----*/ 00345 *option_data = (UN_options *) malloc (sizeof(UN_options)); 00346 MTEST (*option_data); 00347 00348 00349 /*----- Initialize the input options -----*/ 00350 initialize_options (*option_data); 00351 00352 00353 /*----- Get operator inputs -----*/ 00354 get_options (argc, argv, *option_data); 00355 00356 00357 /*----- Verify that inputs are acceptable -----*/ 00358 verify_inputs (*option_data); 00359 00360 00361 /*----- Initialize random number generator -----*/ 00362 rand_initialize (1234567); 00363 00364 00365 /*----- Allocate memory for output volume -----*/ 00366 nxyz = DSET_NX(anat_dset) * DSET_NY(anat_dset) * DSET_NZ(anat_dset); 00367 *sfim = (short *) malloc (sizeof(short) * nxyz); 00368 MTEST (*sfim); 00369 } |
|
Definition at line 1076 of file 3dUniformize.c. References argc, initialize_program(), PROGRAM_AUTHOR, PROGRAM_INITIAL, PROGRAM_LATEST, PROGRAM_NAME, quiet, uniformize(), and write_afni_data().
01081 { 01082 UN_options * option_data = NULL; /* uniformization program options */ 01083 short * sfim = NULL; /* output uniformized image */ 01084 01085 01086 { int ii ; /* 16 Apr 2003 */ 01087 for( ii=1 ; ii < argc ; ii++ ){ 01088 if( strcmp(argv[ii],"-quiet") == 0 ){ quiet = 1; break; } 01089 } 01090 } 01091 01092 /*----- Identify software -----*/ 01093 if( !quiet ){ 01094 printf ("\n\n"); 01095 printf ("Program: %s \n", PROGRAM_NAME); 01096 printf ("Author: %s \n", PROGRAM_AUTHOR); 01097 printf ("Initial Release: %s \n", PROGRAM_INITIAL); 01098 printf ("Latest Revision: %s \n", PROGRAM_LATEST); 01099 printf ("\n"); 01100 } 01101 01102 01103 /*----- Program initialization -----*/ 01104 initialize_program (argc, argv, &option_data, &sfim); 01105 01106 01107 /*----- Perform uniformization -----*/ 01108 uniformize (option_data, sfim); 01109 01110 01111 /*----- Write out the results -----*/ 01112 write_afni_data (option_data, sfim); 01113 01114 01115 exit(0); 01116 01117 } |
|
Definition at line 473 of file 3dUniformize.c. References i, pdf::nbin, PDF_xvalue_to_ibin(), and v. Referenced by estimate_field().
|
|
Definition at line 580 of file 3dUniformize.c. References create_row(), vector::elts, matrix::elts, i, malloc, matrix_create(), matrix_destroy(), matrix_initialize(), matrix_inverse(), matrix_multiply(), matrix_sprint(), matrix_transpose(), nz, p, rand_uniform(), UN_error(), vector_create(), vector_destroy(), vector_initialize(), and vector_multiply(). Referenced by estimate_field().
00583 { 00584 int p; /* number of parameters in the full model */ 00585 int i, j, k; 00586 matrix x; /* independent variable matrix */ 00587 matrix xtxinv; /* matrix: 1/(X'X) */ 00588 matrix xtxinvxt; /* matrix: (1/(X'X))X' */ 00589 vector y; 00590 vector coef; 00591 float * xrow = NULL; 00592 int ip; 00593 int iter; 00594 float f; 00595 00596 00597 p = npar; 00598 00599 00600 /*----- Initialize matrices and vectors -----*/ 00601 matrix_initialize (&x); 00602 matrix_initialize (&xtxinv); 00603 matrix_initialize (&xtxinvxt); 00604 vector_initialize (&y); 00605 vector_initialize (&coef); 00606 00607 00608 /*----- Allocate memory -----*/ 00609 matrix_create (spts, p, &x); 00610 vector_create (spts, &y); 00611 xrow = (float *) malloc (sizeof(float) * p); 00612 00613 00614 /*----- Set up the X matrix and Y vector -----*/ 00615 for (i = 0; i < spts; i++) 00616 { 00617 k = rand_uniform (0, rpts); 00618 create_row (ir[k], nx, ny, nz, xrow); 00619 00620 for (j = 0; j < p; j++) 00621 x.elts[i][j] = xrow[j]; 00622 y.elts[i] = fr[k]; 00623 } 00624 00625 00626 /* 00627 matrix_sprint ("X matrix = ", x); 00628 vector_sprint ("Y vector = ", y); 00629 */ 00630 00631 00632 { 00633 /*----- calculate various matrices which will be needed later -----*/ 00634 matrix xt, xtx; /* temporary matrix calculation results */ 00635 int ok; /* flag for successful matrix inversion */ 00636 00637 00638 /*----- initialize matrices -----*/ 00639 matrix_initialize (&xt); 00640 matrix_initialize (&xtx); 00641 00642 00643 matrix_transpose (x, &xt); 00644 matrix_multiply (xt, x, &xtx); 00645 ok = matrix_inverse (xtx, &xtxinv); 00646 00647 if (ok) 00648 matrix_multiply (xtxinv, xt, &xtxinvxt); 00649 else 00650 { 00651 matrix_sprint ("X matrix = ", x); 00652 matrix_sprint ("X'X matrix = ", xtx); 00653 UN_error ("Improper X matrix (cannot invert X'X) "); 00654 } 00655 00656 /*----- dispose of matrices -----*/ 00657 matrix_destroy (&xtx); 00658 matrix_destroy (&xt); 00659 00660 } 00661 00662 00663 /* 00664 matrix_sprint ("1/(X'X) = ", xtxinv); 00665 matrix_sprint ("(1/(X'X))X' = ", xtxinvxt); 00666 vector_sprint ("Y data = ", y); 00667 */ 00668 00669 vector_multiply (xtxinvxt, y, &coef); 00670 /* 00671 vector_sprint ("Coef = ", coef); 00672 */ 00673 00674 00675 for (ip = 0; ip < p; ip++) 00676 { 00677 fpar[ip] = coef.elts[ip]; 00678 } 00679 00680 00681 /*----- Dispose of matrices and vectors -----*/ 00682 matrix_destroy (&x); 00683 matrix_destroy (&xtxinv); 00684 matrix_destroy (&xtxinvxt); 00685 vector_destroy (&y); 00686 vector_destroy (&coef); 00687 00688 00689 } |
|
Definition at line 855 of file 3dUniformize.c. References create_row(), DSET_BRICK_ARRAY, DSET_NX, DSET_NY, DSET_NZ, UN_options::lower_limit, malloc, UN_options::npar, nz, and UN_options::rpts. Referenced by uniformize().
00856 { 00857 short * anat_data = NULL; 00858 int rpts; 00859 int npar; 00860 int lower_limit; 00861 int nx, ny, nz, nxyz; 00862 int ixyz, jpar; 00863 float x; 00864 float * xrow; 00865 float f; 00866 00867 00868 /*----- Initialize local variables -----*/ 00869 nx = DSET_NX(anat_dset); ny = DSET_NY(anat_dset); nz = DSET_NZ(anat_dset); 00870 nxyz = nx*ny*nz; 00871 anat_data = (short *) DSET_BRICK_ARRAY(anat_dset,0); 00872 rpts = option_data->rpts; 00873 npar = option_data->npar; 00874 lower_limit = option_data->lower_limit; 00875 00876 xrow = (float *) malloc (sizeof(float) * npar); 00877 00878 00879 for (ixyz = 0; ixyz < nxyz; ixyz++) 00880 { 00881 if (anat_data[ixyz] > lower_limit) 00882 { 00883 create_row (ixyz, nx, ny, nz, xrow); 00884 00885 f = 0.0; 00886 for (jpar = 1; jpar < npar; jpar++) 00887 f += fpar[jpar] * xrow[jpar]; 00888 00889 sfim[ixyz] = exp( log(anat_data[ixyz]) - f); 00890 } 00891 else 00892 sfim[ixyz] = anat_data[ixyz]; 00893 } 00894 00895 00896 return; 00897 } |
|
Definition at line 404 of file 3dUniformize.c. References DSET_BRICK_ARRAY, DSET_NX, DSET_NY, DSET_NZ, and rand_uniform(). Referenced by uniformize().
00410 { 00411 short * anat_data = NULL; 00412 int nxyz; 00413 int rpts; 00414 int lower_limit; 00415 int it, k; 00416 00417 00418 /*----- Initialize local variables -----*/ 00419 nxyz = DSET_NX(anat_dset) * DSET_NY(anat_dset) * DSET_NZ(anat_dset); 00420 anat_data = (short *) DSET_BRICK_ARRAY(anat_dset,0); 00421 lower_limit = option_data->lower_limit; 00422 rpts = option_data->rpts; 00423 00424 it = 0; 00425 while (it < rpts) 00426 { 00427 k = rand_uniform (0, nxyz); 00428 if ( (k >= 0) && (k < nxyz) && (anat_data[k] > lower_limit) ) 00429 { 00430 ir[it] = k; 00431 vr[it] = log (anat_data[k] + rand_uniform (0.0,1.0)); 00432 it++; 00433 } 00434 } 00435 00436 return; 00437 } |
|
Definition at line 496 of file 3dUniformize.c. Referenced by estimate_field().
|
|
Definition at line 377 of file 3dUniformize.c. Referenced by estimate_field().
00378 { 00379 int it; 00380 FILE * outfile = NULL; 00381 00382 outfile = fopen (filename, "w"); 00383 00384 00385 for (it = 0; it < ts_length; it++) 00386 { 00387 fprintf (outfile, "%f ", data[it]); 00388 fprintf (outfile, " \n"); 00389 } 00390 00391 fclose (outfile); 00392 } |
|
Definition at line 77 of file 3dUniformize.c. References PROGRAM_NAME. Referenced by check_one_output_file(), get_options(), and poly_field().
00078 { 00079 fprintf (stderr, "%s Error: %s \n", PROGRAM_NAME, message); 00080 exit(1); 00081 } |
|
Definition at line 905 of file 3dUniformize.c. References estimate_field(), free, malloc, MTEST, UN_options::npar, remove_field(), resample(), and UN_options::rpts. Referenced by main().
00907 { 00908 int * ir = NULL; 00909 float * vr = NULL; 00910 float * fpar = NULL; 00911 int rpts, npar; 00912 00913 00914 /*----- Initialize local variables -----*/ 00915 rpts = option_data->rpts; 00916 npar = option_data->npar; 00917 00918 00919 /*----- Allocate memory -----*/ 00920 ir = (int *) malloc (sizeof(int) * rpts); MTEST(ir); 00921 vr = (float *) malloc (sizeof(float) * rpts); MTEST(vr); 00922 fpar = (float *) malloc (sizeof(float) * npar); MTEST(fpar); 00923 00924 00925 /*----- Resample the data -----*/ 00926 resample (option_data, ir, vr); 00927 00928 00929 /*----- Estimate the nonuniformity field -----*/ 00930 estimate_field (option_data, ir, vr, fpar); 00931 00932 00933 /*----- Remove the nonuniformity field -----*/ 00934 remove_field (option_data, fpar, sfim); 00935 00936 00937 /*----- Deallocate memory -----*/ 00938 free (ir); ir = NULL; 00939 free (vr); vr = NULL; 00940 free (fpar); fpar = NULL; 00941 00942 } |
|
Definition at line 315 of file 3dUniformize.c.
00319 { 00320 } |
|
Definition at line 698 of file 3dUniformize.c. References create_row(), free, i, malloc, and nz. Referenced by estimate_field().
00700 { 00701 int i, j; 00702 float x; 00703 float * xrow; 00704 float max_warp; 00705 00706 00707 xrow = (float *) malloc (sizeof(float) * npar); 00708 00709 00710 max_warp = 0.0; 00711 00712 for (i = 0; i < rpts; i++) 00713 { 00714 create_row (ir[i], nx, ny, nz, xrow); 00715 00716 fs[i] = 0.0; 00717 00718 for (j = 1; j < npar; j++) 00719 fs[i] += fpar[j] * xrow[j]; 00720 00721 if (fabs(fs[i]) > max_warp) 00722 max_warp = fabs(fs[i]); 00723 } 00724 00725 00726 free (xrow); xrow = NULL; 00727 00728 00729 return (max_warp); 00730 } |
|
Definition at line 953 of file 3dUniformize.c. References ADN_brick_fac, ADN_datum_array, ADN_label1, ADN_malloc_type, ADN_none, ADN_prefix, ADN_self_name, ADN_stat_aux, commandline, DATABLOCK_MEM_MALLOC, THD_3dim_dataset::dblk, THD_datablock::diskptr, DSET_BRICK, DSET_BRIKNAME, DSET_NX, DSET_NY, DSET_NZ, EDIT_dset_items(), EDIT_empty_copy(), free, THD_diskptr::header_name, input_datum, malloc, MAX_STAT_AUX, mri_fix_data_pointer(), quiet, THD_delete_3dim_dataset(), THD_is_file(), THD_load_statistics(), THD_write_3dim_dataset(), tross_Append_History(), and tross_Copy_History(). Referenced by calculate_acontrasts(), calculate_adifferences(), calculate_ameans(), calculate_bcontrasts(), calculate_bdifferences(), calculate_bmeans(), calculate_ccontrasts(), calculate_cdifferences(), calculate_cmeans(), calculate_contrasts(), calculate_differences(), calculate_f_statistic(), calculate_fa(), calculate_fab(), calculate_fabc(), calculate_fac(), calculate_fb(), calculate_fbc(), calculate_fc(), calculate_ftr(), calculate_means(), calculate_xcontrasts(), calculate_xdifferences(), calculate_xmeans(), main(), output_parameters(), output_results(), and SEGMENT_auto().
00958 { 00959 int nxyz; /* number of voxels */ 00960 int ii; /* voxel index */ 00961 THD_3dim_dataset * new_dset=NULL; /* output afni data set pointer */ 00962 int ierror; /* number of errors in editing data */ 00963 int ibuf[32]; /* integer buffer */ 00964 float fbuf[MAX_STAT_AUX]; /* float buffer */ 00965 float fimfac; /* scale factor for short data */ 00966 int output_datum; /* data type for output data */ 00967 char * filename; /* prefix filename for output */ 00968 byte *bfim = NULL ; /* 16 Apr 2003 */ 00969 00970 00971 /*----- initialize local variables -----*/ 00972 filename = option_data->prefix_filename; 00973 nxyz = DSET_NX(anat_dset) * DSET_NY(anat_dset) * DSET_NZ(anat_dset); 00974 00975 00976 /*-- make an empty copy of this dataset, for eventual output --*/ 00977 new_dset = EDIT_empty_copy( anat_dset ) ; 00978 00979 00980 /*----- Record history of dataset -----*/ 00981 tross_Copy_History( anat_dset , new_dset ) ; 00982 if( commandline != NULL ) 00983 tross_Append_History( new_dset , commandline ) ; 00984 00985 00986 /*----- deallocate memory -----*/ 00987 THD_delete_3dim_dataset (anat_dset, False); anat_dset = NULL ; 00988 00989 /*-- 16 Apr 2003 - RWCox: 00990 see if we can convert output back to bytes, if input was bytes --*/ 00991 00992 output_datum = MRI_short ; /* default, in sfim */ 00993 00994 if( input_datum == MRI_byte ){ /* if input was byte */ 00995 short stop = sfim[0] ; 00996 for( ii=1 ; ii < nxyz ; ii++ ) 00997 if( sfim[ii] > stop ) stop = sfim[ii] ; 00998 output_datum = MRI_byte ; 00999 bfim = malloc(sizeof(byte)*nxyz) ; 01000 if( stop <= 255 ){ /* output fits into byte range */ 01001 for( ii=0 ; ii < nxyz ; ii++ ) bfim[ii] = (byte) sfim[ii] ; 01002 } else { /* must scale output down */ 01003 float sfac = 255.9 / stop ; 01004 fprintf(stderr,"++ WARNING: scaling by %g back down to byte data\n",sfac); 01005 for( ii=0 ; ii < nxyz ; ii++ ) bfim[ii] = (byte)(sfim[ii]*sfac) ; 01006 } 01007 free(sfim) ; 01008 } 01009 01010 /*-- we now return control to your regular programming --*/ 01011 ibuf[0] = output_datum ; 01012 01013 ierror = EDIT_dset_items( new_dset , 01014 ADN_prefix , filename , 01015 ADN_label1 , filename , 01016 ADN_self_name , filename , 01017 ADN_datum_array , ibuf , 01018 ADN_malloc_type, DATABLOCK_MEM_MALLOC , 01019 ADN_none ) ; 01020 01021 01022 if( ierror > 0 ){ 01023 fprintf(stderr, 01024 "*** %d errors in attempting to create output dataset!\n", 01025 ierror ) ; 01026 exit(1) ; 01027 } 01028 01029 01030 if( THD_is_file(new_dset->dblk->diskptr->header_name) ){ 01031 fprintf(stderr, 01032 "*** Output dataset file %s already exists--cannot continue!\a\n", 01033 new_dset->dblk->diskptr->header_name ) ; 01034 exit(1) ; 01035 } 01036 01037 01038 /*----- attach bricks to new data set -----*/ 01039 01040 if( output_datum == MRI_short ) 01041 mri_fix_data_pointer (sfim, DSET_BRICK(new_dset,0)); 01042 else if( output_datum == MRI_byte ) 01043 mri_fix_data_pointer (bfim, DSET_BRICK(new_dset,0)); /* 16 Apr 2003 */ 01044 01045 fimfac = 1.0; 01046 01047 /*----- write afni data set -----*/ 01048 if (!quiet) 01049 { 01050 printf ("\nWriting anatomical dataset: "); 01051 printf("%s\n", DSET_BRIKNAME(new_dset) ) ; 01052 printf("data type = %s\n",MRI_TYPE_name[output_datum]) ; 01053 } 01054 01055 01056 for( ii=0 ; ii < MAX_STAT_AUX ; ii++ ) fbuf[ii] = 0.0 ; 01057 (void) EDIT_dset_items( new_dset , ADN_stat_aux , fbuf , ADN_none ) ; 01058 fbuf[0] = (output_datum == MRI_short && fimfac != 1.0 ) ? fimfac : 0.0 ; 01059 (void) EDIT_dset_items( new_dset , ADN_brick_fac , fbuf , ADN_none ) ; 01060 THD_load_statistics( new_dset ) ; 01061 THD_write_3dim_dataset( NULL,NULL , new_dset , True ) ; 01062 01063 01064 /*----- deallocate memory -----*/ 01065 THD_delete_3dim_dataset( new_dset , False ) ; new_dset = NULL ; 01066 01067 } |
Variable Documentation
|
Definition at line 43 of file 3dUniformize.c. |
|
Definition at line 44 of file 3dUniformize.c. Referenced by initialize_program(), and write_afni_data(). |
|
Definition at line 46 of file 3dUniformize.c. Referenced by EDIT_main(), get_options(), main(), and write_afni_data(). |
|
Definition at line 47 of file 3dUniformize.c. Referenced by estimate_field(), get_options(), main(), and write_afni_data(). |