Doxygen Source Code Documentation
mri_to_complex.c File Reference
#include "mrilib.h"
Go to the source code of this file.
Functions | |
MRI_IMAGE * | mri_to_complex (MRI_IMAGE *oldim) |
MRI_IMAGE * | mri_to_complex_ext (MRI_IMAGE *oldim, int xnew, int ynew, int altern) |
MRI_IMAGE * | mri_pair_to_complex (MRI_IMAGE *rim, MRI_IMAGE *iim) |
MRI_IMARR * | mri_complex_to_pair (MRI_IMAGE *cim) |
Function Documentation
|
Definition at line 229 of file mri_to_complex.c. References ADDTO_IMARR, ENTRY, complex::i, INIT_IMARR, MRI_IMAGE::kind, MRI_COMPLEX_PTR, MRI_FLOAT_PTR, mri_new_conforming, MRI_IMAGE::nvox, complex::r, and RETURN. Referenced by mri_affine_bicubic(), mri_dup2D(), mri_rota(), mri_rota_bilinear(), mri_rota_shear(), mri_shift2D_bilinear(), mri_warp3D_cubic(), mri_warp3D_linear(), mri_warp3D_NN(), and mri_warp3D_quintic().
00230 { 00231 MRI_IMARR * imarr ; 00232 MRI_IMAGE * rim , * iim ; 00233 register int ii , nvox ; 00234 register float * rar , * iar ; 00235 register complex * car ; 00236 00237 ENTRY("mri_complex_to_pair") ; 00238 00239 if( cim == NULL || cim->kind != MRI_complex ) RETURN( NULL ); 00240 00241 rim = mri_new_conforming( cim , MRI_float ) ; rar = MRI_FLOAT_PTR(rim) ; 00242 iim = mri_new_conforming( cim , MRI_float ) ; iar = MRI_FLOAT_PTR(iim) ; 00243 car = MRI_COMPLEX_PTR(cim) ; 00244 nvox = cim->nvox ; 00245 00246 for( ii=0 ; ii < nvox ; ii++ ){ rar[ii] = car[ii].r ; iar[ii] = car[ii].i ; } 00247 00248 INIT_IMARR(imarr) ; 00249 ADDTO_IMARR(imarr,rim) ; 00250 ADDTO_IMARR(imarr,iim) ; 00251 00252 RETURN( imarr ); 00253 } |
|
Definition at line 199 of file mri_to_complex.c. References ENTRY, complex::i, MRI_IMAGE::kind, MRI_COMPLEX_PTR, MRI_FLOAT_PTR, mri_free(), mri_new_conforming, mri_to_float(), MRI_IMAGE::nvox, complex::r, and RETURN. Referenced by main(), mri_affine_bicubic(), mri_dup2D(), mri_rota(), mri_rota_bilinear(), mri_rota_shear(), mri_shift2D_bilinear(), mri_warp3D_cubic(), mri_warp3D_linear(), mri_warp3D_NN(), and mri_warp3D_quintic().
00200 { 00201 MRI_IMAGE * cim , * rfim , * ifim ; 00202 register complex * car ; 00203 register float * rar , * iar ; 00204 register int ii , nvox ; 00205 00206 ENTRY("mri_pair_to_complex") ; 00207 00208 if( rim == NULL || iim == NULL || rim->nvox != iim->nvox ) RETURN( NULL ); 00209 00210 cim = mri_new_conforming( rim , MRI_complex ) ; 00211 car = MRI_COMPLEX_PTR(cim) ; 00212 00213 rfim = (rim->kind == MRI_float) ? rim : mri_to_float( rim ) ; 00214 ifim = (iim->kind == MRI_float) ? iim : mri_to_float( iim ) ; 00215 00216 rar = MRI_FLOAT_PTR(rfim) ; iar = MRI_FLOAT_PTR(ifim) ; 00217 nvox = rfim->nvox ; 00218 00219 for( ii=0 ; ii < nvox ; ii++ ){ car[ii].r = rar[ii] ; car[ii].i = iar[ii] ; } 00220 00221 if( rfim != rim ) mri_free( rfim ) ; 00222 if( ifim != iim ) mri_free( ifim ) ; 00223 00224 RETURN( cim ); 00225 } |
|
Definition at line 18 of file mri_to_complex.c. References MRI_DATA::byte_data, MRI_DATA::complex_data, MRI_DATA::double_data, ENTRY, MRI_DATA::float_data, complex::i, MRI_IMAGE::im, MRI_DATA::int_data, MRI_IMAGE::kind, MRI_COMPLEX_PTR, MRI_COPY_AUX, MRI_FATAL_ERROR, mri_new_conforming, MRI_RGB_PTR, MRI_IMAGE::nvox, complex::r, RETURN, and MRI_DATA::short_data. Referenced by mri_fft2D(), mri_to_mri(), mri_to_mri_scl(), and T3D_read_images().
00019 { 00020 MRI_IMAGE *newim ; 00021 register int ii , npix ; 00022 00023 ENTRY("mri_to_complex") ; 00024 00025 if( oldim == NULL ) RETURN( NULL ); /* 09 Feb 1999 */ 00026 00027 newim = mri_new_conforming( oldim , MRI_complex ) ; 00028 npix = oldim->nvox ; 00029 00030 switch( oldim->kind ){ 00031 00032 case MRI_byte: 00033 for( ii=0 ; ii < npix ; ii++ ) 00034 newim->im.complex_data[ii].r = oldim->im.byte_data[ii] ; 00035 break ; 00036 00037 case MRI_short: 00038 for( ii=0 ; ii < npix ; ii++ ) 00039 newim->im.complex_data[ii].r = oldim->im.short_data[ii] ; 00040 break ; 00041 00042 case MRI_int: 00043 for( ii=0 ; ii < npix ; ii++ ) 00044 newim->im.complex_data[ii].r = oldim->im.int_data[ii] ; 00045 break ; 00046 00047 case MRI_float: 00048 for( ii=0 ; ii < npix ; ii++ ) 00049 newim->im.complex_data[ii].r = oldim->im.float_data[ii] ; 00050 break ; 00051 00052 case MRI_double: 00053 for( ii=0 ; ii < npix ; ii++ ) 00054 newim->im.complex_data[ii].r = oldim->im.double_data[ii] ; 00055 break ; 00056 00057 case MRI_complex: 00058 #ifdef DONT_USE_MEMCPY 00059 for( ii=0 ; ii < npix ; ii++ ) 00060 newim->im.complex_data[ii] = oldim->im.complex_data[ii] ; 00061 #else 00062 (void) memcpy( newim->im.complex_data , 00063 oldim->im.complex_data , sizeof(complex)*npix ) ; 00064 #endif 00065 break ; 00066 00067 case MRI_rgb:{ /* 16 Jun 2000 */ 00068 byte * rgb = MRI_RGB_PTR(oldim) ; 00069 complex * car = MRI_COMPLEX_PTR(newim) ; 00070 for( ii=0 ; ii < npix ; ii++ ){ /* scale to brightness */ 00071 car[ii].r = 0.299 * rgb[3*ii] /* between 0 and 255 */ 00072 + 0.587 * rgb[3*ii+1] 00073 + 0.114 * rgb[3*ii+2] ; 00074 car[ii].i = 0.0 ; 00075 } 00076 } 00077 break ; 00078 00079 default: 00080 fprintf( stderr , "mri_to_complex: unrecognized image kind\n" ) ; 00081 MRI_FATAL_ERROR ; 00082 } 00083 00084 if( oldim->kind != MRI_complex ){ 00085 for( ii=0 ; ii < npix ; ii++ ) 00086 newim->im.complex_data[ii].i = 0.0 ; 00087 } 00088 00089 MRI_COPY_AUX(newim,oldim) ; 00090 RETURN( newim ); 00091 } |
|
Definition at line 100 of file mri_to_complex.c. References MRI_DATA::byte_data, MRI_DATA::complex_data, MRI_DATA::double_data, ENTRY, MRI_DATA::float_data, complex::i, MRI_IMAGE::im, MRI_DATA::int_data, MRI_IMAGE::kind, MRI_COPY_AUX, MRI_IS_2D, mri_new(), MRI_IMAGE::nx, MRI_IMAGE::ny, complex::r, RETURN, and MRI_DATA::short_data.
00101 { 00102 MRI_IMAGE *newim ; 00103 int oldx,oldy , itop,jtop , ii,jj , jbold,jbnew ; 00104 00105 ENTRY("mri_to_complex_ext") ; 00106 00107 if( oldim == NULL ) RETURN( NULL ); /* 09 Feb 1999 */ 00108 00109 if( ! MRI_IS_2D(oldim) ){ 00110 fprintf(stderr,"\n*** mri_to_complex_ext only works on 2D images\n") ; 00111 RETURN( NULL ); 00112 } 00113 00114 oldx = oldim->nx ; 00115 oldy = oldim->ny ; 00116 00117 itop = (xnew<oldx) ? xnew : oldx ; /* smallest x dimension */ 00118 jtop = (ynew<oldy) ? ynew : oldy ; /* smallest y dimension */ 00119 00120 newim = mri_new( xnew , ynew , MRI_complex ) ; 00121 00122 /*** copy 0..itop by 0..jtop from old into new ***/ 00123 00124 for( jj=0 ; jj < jtop ; jj++ ){ 00125 jbold = oldx * jj ; 00126 jbnew = xnew * jj ; 00127 for( ii=0 ; ii < itop ; ii++ ){ 00128 newim->im.complex_data[ii+jbnew].i = 0.0 ; 00129 00130 switch( oldim->kind ){ 00131 case MRI_byte: 00132 newim->im.complex_data[ii+jbnew].r = 00133 oldim->im.byte_data[ii+jbold] ; 00134 break ; 00135 case MRI_short: 00136 newim->im.complex_data[ii+jbnew].r = 00137 oldim->im.short_data[ii+jbold] ; 00138 break ; 00139 case MRI_int: 00140 newim->im.complex_data[ii+jbnew].r = 00141 oldim->im.int_data[ii+jbold] ; 00142 break ; 00143 case MRI_float: 00144 newim->im.complex_data[ii+jbnew].r = 00145 oldim->im.float_data[ii+jbold] ; 00146 break ; 00147 case MRI_double: 00148 newim->im.complex_data[ii+jbnew].r = 00149 oldim->im.double_data[ii+jbold] ; 00150 break ; 00151 case MRI_complex: 00152 newim->im.complex_data[ii+jbnew] = 00153 oldim->im.complex_data[ii+jbold] ; 00154 break ; 00155 } 00156 } 00157 } 00158 00159 /*** if old image is smaller in x, extend all x rows with zeros ***/ 00160 00161 if( oldx < xnew ){ 00162 for( jj=0 ; jj < jtop ; jj++ ){ 00163 jbnew = jj * xnew ; 00164 for( ii=oldx ; ii < xnew ; ii++ ){ 00165 newim->im.complex_data[ii+jbnew].r = 0.0 ; 00166 newim->im.complex_data[ii+jbnew].i = 0.0 ; 00167 } 00168 } 00169 } 00170 00171 /*** if old image is smaller in y, fill out last rows with zeros ***/ 00172 00173 for( jj=oldy ; jj < ynew ; jj++ ){ 00174 jbnew = jj * xnew ; 00175 for( ii=0 ; ii < xnew ; ii++ ){ 00176 newim->im.complex_data[ii+jbnew].r = 0.0 ; 00177 newim->im.complex_data[ii+jbnew].i = 0.0 ; 00178 } 00179 } 00180 00181 if( altern ){ 00182 for( jj=0 ; jj < ynew ; jj++ ){ 00183 jbnew = jj * xnew ; 00184 for( ii=0 ; ii < xnew ; ii++ ){ 00185 if( (ii+jj)%2 ){ 00186 newim->im.complex_data[ii+jbnew].r = - newim->im.complex_data[ii+jbnew].r ; 00187 newim->im.complex_data[ii+jbnew].i = - newim->im.complex_data[ii+jbnew].i ; 00188 } 00189 } 00190 } 00191 } 00192 00193 MRI_COPY_AUX(newim,oldim) ; 00194 RETURN( newim ); 00195 } |