Doxygen Source Code Documentation
Main Page Alphabetical List Data Structures File List Data Fields Globals Search
mri_complex_arith.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #include "mrilib.h"
00008
00009
00010
00011
00012
00013
00014
00015
00016 MRI_IMAGE *mri_multiply_complex( int mode , MRI_IMAGE *f , MRI_IMAGE* g )
00017 {
00018 register int ii , npix ;
00019 MRI_IMAGE *newImg ;
00020
00021 if( f->nvox != g->nvox ){
00022 fprintf( stderr , "mri_multiply_complex shapes imcompatible!\n" ) ;
00023 MRI_FATAL_ERROR ;
00024 }
00025
00026 if( f->kind != MRI_complex || g->kind != MRI_complex ){
00027 fprintf( stderr , "mri_multiply_complex illegal image type!\n" ) ;
00028 MRI_FATAL_ERROR ;
00029 }
00030
00031 newImg = mri_new_conforming( f , MRI_complex ) ;
00032 npix = f->nvox ;
00033 MRI_COPY_AUX( newImg , f ) ;
00034
00035 switch( mode ){
00036 case 0:
00037 for( ii=0 ; ii < npix ; ii++ ){
00038 newImg->im.complex_data[ii] =
00039 CMULT( f->im.complex_data[ii] , g->im.complex_data[ii] ) ;
00040 }
00041 break ;
00042
00043 case 1:
00044 for( ii=0 ; ii < npix ; ii++ ){
00045 newImg->im.complex_data[ii] =
00046 CJMULT( f->im.complex_data[ii] , g->im.complex_data[ii] ) ;
00047 }
00048 break ;
00049
00050 default:
00051 fprintf( stderr , "mri_multiply_complex illegal mode %d\n" , mode ) ;
00052 MRI_FATAL_ERROR ;
00053 }
00054 return newImg ;
00055 }
00056
00057
00058
00059 MRI_IMAGE *mri_complex_phase( MRI_IMAGE *im )
00060 {
00061 register int ii , npix ;
00062 MRI_IMAGE *newImg ;
00063
00064 if( im->kind != MRI_complex ){
00065 fprintf( stderr , "mri_complex_phase illegal image type!\n" ) ;
00066 MRI_FATAL_ERROR ;
00067 }
00068
00069 npix = im->nvox ;
00070 newImg = mri_new_conforming( im , MRI_float ) ;
00071 MRI_COPY_AUX( newImg , im ) ;
00072
00073 for( ii=0 ; ii < npix ; ii++ )
00074 newImg->im.float_data[ii] =
00075 atan2( im->im.complex_data[ii].i , im->im.complex_data[ii].r ) ;
00076
00077 return newImg ;
00078 }
00079
00080
00081
00082 MRI_IMAGE *mri_complex_abs( MRI_IMAGE *im )
00083 {
00084 register int ii , npix ;
00085 MRI_IMAGE *newImg ;
00086
00087 if( im->kind != MRI_complex ){
00088 fprintf( stderr , "mri_complex_abs illegal type!\n" ) ;
00089 MRI_FATAL_ERROR ;
00090 }
00091
00092 npix = im->nvox ;
00093 newImg = mri_new_conforming( im , MRI_float ) ;
00094 MRI_COPY_AUX( newImg , im ) ;
00095
00096 for( ii=0 ; ii < npix ; ii++ )
00097 newImg->im.float_data[ii] = sqrt( CSQR( im->im.complex_data[ii] ) ) ;
00098
00099 return newImg ;
00100 }