Doxygen Source Code Documentation
Main Page Alphabetical List Data Structures File List Data Fields Globals Search
makewt.c
Go to the documentation of this file.00001 #include "mrilib.h"
00002 #include <string.h>
00003
00004 int main( int argc , char * argv[] )
00005 {
00006 MRI_IMAGE * imbar , * imsdev , * imwt ;
00007 int ii , nvox , nsum ;
00008 float * bar , * sdev , * wt ;
00009 float bmax , smax , bcut , scl , bsum ;
00010 float hist[11] ;
00011
00012 if( argc < 4 ){
00013 printf("Usage: %s mean_image sdev_image wt_image\n",argv[0]) ;
00014 exit(0) ;
00015 }
00016
00017 imbar = mri_read_just_one( argv[1] ) ; if( imbar == NULL ) exit(1) ;
00018 imsdev = mri_read_just_one( argv[2] ) ; if( imsdev== NULL ) exit(1) ;
00019
00020 if( imbar->kind != MRI_float ){
00021 imwt = mri_to_float(imbar) ; mri_free(imbar) ; imbar = imwt ;
00022 }
00023
00024 if( imsdev->kind != MRI_float ){
00025 imwt = mri_to_float(imsdev) ; mri_free(imsdev) ; imsdev = imwt ;
00026 }
00027
00028 nvox = imbar->nvox ;
00029 imwt = mri_new( imbar->nx , imbar->ny , MRI_float ) ;
00030
00031 bar = MRI_FLOAT_PTR(imbar) ;
00032 sdev = MRI_FLOAT_PTR(imsdev) ;
00033 wt = MRI_FLOAT_PTR(imwt) ;
00034
00035 bcut = 0.05 * mri_maxabs(imbar) ; bsum = 0.0 ; nsum = 0 ;
00036 for( ii=0 ; ii < nvox ; ii++ ){
00037 if( bar[ii] > bcut ){ bsum += bar[ii] ; nsum++ ; }
00038 }
00039 bcut = 0.25 * bsum / nsum ;
00040
00041 smax = mri_maxabs(imsdev) ; scl = 0.25 * bcut*bcut ;
00042
00043 printf("cutoff value = %f\n",bcut) ;
00044
00045 for( ii=0 ; ii < nvox ; ii++ ){
00046 if( bar[ii] < bcut || sdev[ii] <= 0.0 ) wt[ii] = 0.0 ;
00047 else wt[ii] = scl / SQR(sdev[ii]) ;
00048 }
00049
00050 mri_write( argv[3] , imwt ) ;
00051 exit(0) ;
00052 }