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 }
|