Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

mri_to_complex.c File Reference

#include "mrilib.h"

Go to the source code of this file.


Functions

MRI_IMAGEmri_to_complex (MRI_IMAGE *oldim)
MRI_IMAGEmri_to_complex_ext (MRI_IMAGE *oldim, int xnew, int ynew, int altern)
MRI_IMAGEmri_pair_to_complex (MRI_IMAGE *rim, MRI_IMAGE *iim)
MRI_IMARRmri_complex_to_pair (MRI_IMAGE *cim)

Function Documentation

MRI_IMARR* mri_complex_to_pair MRI_IMAGE   cim
 

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 }

MRI_IMAGE* mri_pair_to_complex MRI_IMAGE   rim,
MRI_IMAGE   iim
 

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 }

MRI_IMAGE* mri_to_complex MRI_IMAGE   oldim
 

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 }

MRI_IMAGE* mri_to_complex_ext MRI_IMAGE   oldim,
int    xnew,
int    ynew,
int    altern
 

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 }
 

Powered by Plone

This site conforms to the following standards: