Doxygen Source Code Documentation
crao.c File Reference
#include "mrilib.h"
#include <string.h>
Go to the source code of this file.
Defines | |
#define | DFAC (PI/180.0) |
Functions | |
float * | mri_align_crao (float filt_fwhm, MRI_IMARR *ims) |
int | main (int argc, char *argv[]) |
Define Documentation
|
Definition at line 37 of file crao.c. Referenced by mri_align_crao(). |
Function Documentation
|
convert DTIStudio fiber format data to SUMA segment data Definition at line 6 of file crao.c. References ADDTO_IMARR, argc, DESTROY_IMARR, INIT_IMARR, mri_align_crao(), mri_read(), and strtod().
00007 { 00008 MRI_IMAGE *imin ; 00009 MRI_IMARR *ims ; 00010 float * dsig ; 00011 float fwhm ; 00012 int ii , iarg ; 00013 00014 if( argc < 4 || strncmp(argv[1],"-help",4) == 0 ){ 00015 printf("Usage: crao fwhm image_files ...\n") ; 00016 exit(0) ; 00017 } 00018 00019 fwhm = strtod( argv[1] , NULL ) ; 00020 if( fwhm <= 0.0 ){fprintf(stderr,"Illegal fwhm!\a\n");exit(1);} 00021 00022 INIT_IMARR(ims) ; 00023 for( iarg=2 ; iarg < argc ; iarg++ ){ 00024 imin = mri_read( argv[iarg] ) ; 00025 ADDTO_IMARR(ims,imin) ; 00026 } 00027 00028 dsig = mri_align_crao( fwhm , ims ) ; 00029 DESTROY_IMARR(ims) ; 00030 00031 printf("fwhm = %g CR: dx = %g dy = %g phi = %g\n", 00032 fwhm,dsig[0],dsig[1],dsig[2] ) ; 00033 00034 exit(0) ; 00035 } |
|
Definition at line 44 of file crao.c. References DFAC, FILT_FFT_WRAPAROUND, MRI_IMARR::imarr, malloc, mri_filt_fft(), MRI_FLOAT_PTR, mri_free(), mri_max(), mri_new(), mri_stat_seq(), MRI_IMARR::num, MRI_IMAGE::nx, MRI_IMAGE::ny, and SQR.
00045 { 00046 MRI_IMAGE **imstat , *imbar , *imsig , *imdx,*imdy,*imphi ; 00047 float sthr,fac , hnx,hny , filt_rms = filt_fwhm*0.42466090 ; 00048 float *xar , *yar , *par , *sar , *bar , *crao ; 00049 int ii , npix , nx,ny , jj , joff , nzero=0 ; 00050 double vdx,vdy,vphi ; 00051 00052 for( ii=1 ; ii < ims->num ; ii++ ) 00053 (void) mri_stat_seq( ims->imarr[ii] ) ; 00054 00055 imstat = mri_stat_seq( NULL ) ; 00056 imbar = imstat[0] ; 00057 imsig = imstat[1] ; 00058 00059 nx = imbar->nx ; ny = imbar->ny ; npix = nx * ny ; 00060 hnx = 0.5*nx ; hny = 0.5*ny ; 00061 00062 imdx = mri_filt_fft( imbar , filt_rms , 1 , 0 , FILT_FFT_WRAPAROUND ) ; /* d/dx */ 00063 imdy = mri_filt_fft( imbar , filt_rms , 0 , 1 , FILT_FFT_WRAPAROUND ) ; /* d/dy */ 00064 imphi = mri_new( nx , ny , MRI_float ) ; 00065 00066 xar = MRI_FLOAT_PTR(imdx) ; yar = MRI_FLOAT_PTR(imdy) ; 00067 par = MRI_FLOAT_PTR(imphi) ; sar = MRI_FLOAT_PTR(imsig) ; 00068 00069 for( jj=0 ; jj < ny ; jj++ ){ 00070 joff = jj * nx ; 00071 for( ii=0 ; ii < nx ; ii++ ){ 00072 par[ii+joff] = DFAC * ( (ii-hnx) * yar[ii+joff] 00073 - (jj-hny) * xar[ii+joff] ) ; 00074 } 00075 } 00076 00077 sthr = 0.01 * mri_max( imsig ) ; 00078 for( ii=0 ; ii < npix ; ii++ ) 00079 if( sar[ii] < sthr ){ 00080 sar[ii] = 0.0 ; 00081 nzero++ ; 00082 } 00083 if( nzero > 0 ) printf("set %d sigmas to zero\n",nzero) ; 00084 00085 for( ii=0 ; ii < npix ; ii++ ){ 00086 fac = (sar[ii] > 0.0) ? (1.0/SQR(sar[ii])) : 0.0 ; 00087 xar[ii] *= fac ; 00088 yar[ii] *= fac ; 00089 par[ii] *= fac ; 00090 } 00091 00092 mri_free(imbar) ; 00093 00094 imbar = mri_filt_fft( imdx , filt_rms , 0 , 0 , FILT_FFT_WRAPAROUND ) ; 00095 mri_free(imdx) ; imdx = imbar ; xar = MRI_FLOAT_PTR(imdx) ; 00096 00097 imbar = mri_filt_fft( imdy , filt_rms , 0 , 0 , FILT_FFT_WRAPAROUND ) ; 00098 mri_free(imdy) ; imdy = imbar ; yar = MRI_FLOAT_PTR(imdy) ; 00099 00100 imbar = mri_filt_fft( imphi , filt_rms , 0 , 0 , FILT_FFT_WRAPAROUND ) ; 00101 mri_free(imphi) ; imphi = imbar ; par = MRI_FLOAT_PTR(imphi) ; 00102 00103 for( ii=0 ; ii < npix ; ii++ ){ 00104 xar[ii] *= sar[ii] ; yar[ii] *= sar[ii] ; par[ii] *= sar[ii] ; 00105 } 00106 00107 vdx = vdy = vphi = 0.0 ; 00108 00109 for( ii=0 ; ii < npix ; ii++ ){ 00110 vdx += SQR( xar[ii] ) ; 00111 vdy += SQR( yar[ii] ) ; 00112 vphi += SQR( par[ii] ) ; 00113 } 00114 00115 mri_free(imsig) ; 00116 mri_free(imdx) ; mri_free(imdy) ; mri_free(imphi) ; 00117 00118 vdx = (vdx > 0.0) ? (1.0/sqrt(vdx)) : 0.0 ; 00119 vdy = (vdy > 0.0) ? (1.0/sqrt(vdy)) : 0.0 ; 00120 vphi = (vphi > 0.0) ? (1.0/sqrt(vphi)) : 0.0 ; 00121 00122 crao = (float *) malloc( sizeof(float) * 3 ) ; 00123 if( crao == NULL ){fprintf(stderr,"malloc(3) fails in mri_align_crao!\a\n");exit(1);} 00124 00125 crao[0] = vdx ; 00126 crao[1] = vdy ; 00127 crao[2] = vphi ; 00128 00129 return crao ; 00130 } |