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_float.c

Go to the documentation of this file.
00001 /*****************************************************************************
00002    Major portions of this software are copyrighted by the Medical College
00003    of Wisconsin, 1994-2000, and are released under the Gnu General Public
00004    License, Version 2.  See the file README.Copyright for details.
00005 ******************************************************************************/
00006    
00007 #include "mrilib.h"
00008 
00009 /*** 7D SAFE ***/
00010 
00011 MRI_IMAGE *mri_to_float( MRI_IMAGE *oldim )
00012 {
00013    MRI_IMAGE *newim ;
00014    register int ii , npix ;
00015 
00016 ENTRY("mri_to_float") ;
00017 
00018    if( oldim == NULL ) RETURN( NULL ) ;  /* 09 Feb 1999 */
00019 
00020    newim = mri_new_conforming( oldim , MRI_float ) ;
00021    npix  = oldim->nvox ;
00022 
00023    switch( oldim->kind ){
00024 
00025       case MRI_byte:
00026          for( ii=0 ; ii < npix ; ii++ )
00027             newim->im.float_data[ii] = oldim->im.byte_data[ii] ;
00028       break ;
00029 
00030       case MRI_short:
00031          for( ii=0 ; ii < npix ; ii++ )
00032             newim->im.float_data[ii] = oldim->im.short_data[ii] ;
00033       break ;
00034 
00035       case MRI_int:
00036          for( ii=0 ; ii < npix ; ii++ )
00037             newim->im.float_data[ii] = oldim->im.int_data[ii] ;
00038       break ;
00039 
00040       case MRI_float:
00041          (void) memcpy( newim->im.float_data ,
00042                         oldim->im.float_data , sizeof(float) * npix ) ;
00043       break ;
00044 
00045       case MRI_double:
00046          for( ii=0 ; ii < npix ; ii++ )
00047             newim->im.float_data[ii] = oldim->im.double_data[ii] ;
00048       break ;
00049 
00050       case MRI_complex:
00051          for( ii=0 ; ii < npix ; ii++ )
00052             newim->im.float_data[ii] = CABS(oldim->im.complex_data[ii]) ;
00053       break ;
00054 
00055       case MRI_rgb:{                          /* 11 Feb 1999 */
00056          byte  * rgb = MRI_RGB_PTR(oldim) ;
00057          float * far = MRI_FLOAT_PTR(newim) ;
00058          for( ii=0 ; ii < npix ; ii++ )       /* scale to brightness */
00059             far[ii] =  0.299 * rgb[3*ii]      /* between 0 and 255     */
00060                      + 0.587 * rgb[3*ii+1]
00061                      + 0.114 * rgb[3*ii+2] ;
00062       }
00063       break ;
00064 
00065       case MRI_rgba:{                         /* 15 Apr 2002 */
00066          byte  * rgb = (byte *) MRI_RGBA_PTR(oldim) ;
00067          float * far = MRI_FLOAT_PTR(newim) ;
00068          for( ii=0 ; ii < npix ; ii++ )       /* scale to brightness */
00069             far[ii] =  0.299 * rgb[4*ii]      /* between 0 and 255     */
00070                      + 0.587 * rgb[4*ii+1]
00071                      + 0.114 * rgb[4*ii+2] ;
00072       }
00073       break ;
00074 
00075       default:
00076          fprintf( stderr , "mri_to_float:  unrecognized image kind %d\n",oldim->kind ) ;
00077          MRI_FATAL_ERROR ;
00078    }
00079 
00080    MRI_COPY_AUX(newim,oldim) ;
00081    RETURN( newim );
00082 }
00083 
00084 MRI_IMAGE *mri_scale_to_float( float scl , MRI_IMAGE *oldim )
00085 {
00086    MRI_IMAGE *newim ;
00087    register int ii , npix ;
00088    register float fac ;
00089 
00090 ENTRY("mri_scale_to_float") ;
00091 
00092    if( oldim == NULL ) RETURN( NULL );  /* 09 Feb 1999 */
00093 
00094    fac   = scl ; if( fac == 0.0 ) fac = 1.0 ;
00095    newim = mri_new_conforming( oldim , MRI_float ) ;
00096    npix  = oldim->nvox ;
00097 
00098    switch( oldim->kind ){
00099 
00100       case MRI_byte:
00101          for( ii=0 ; ii < npix ; ii++ )
00102             newim->im.float_data[ii] = fac * oldim->im.byte_data[ii] ;
00103          break ;
00104 
00105       case MRI_short:
00106          for( ii=0 ; ii < npix ; ii++ )
00107             newim->im.float_data[ii] = fac * oldim->im.short_data[ii] ;
00108          break ;
00109 
00110       case MRI_int:
00111          for( ii=0 ; ii < npix ; ii++ )
00112             newim->im.float_data[ii] = fac * oldim->im.int_data[ii] ;
00113          break ;
00114 
00115       case MRI_float:
00116          for( ii=0 ; ii < npix ; ii++ )
00117             newim->im.float_data[ii] = fac * oldim->im.float_data[ii] ;
00118          break ;
00119 
00120       case MRI_double:
00121          for( ii=0 ; ii < npix ; ii++ )
00122             newim->im.float_data[ii] = fac * oldim->im.double_data[ii] ;
00123          break ;
00124 
00125       case MRI_complex:
00126          for( ii=0 ; ii < npix ; ii++ )
00127             newim->im.float_data[ii] = fac * CABS(oldim->im.complex_data[ii]) ;
00128          break ;
00129 
00130       case MRI_rgb:{
00131          byte  * rgb = MRI_RGB_PTR(oldim) ;
00132          float * far = MRI_FLOAT_PTR(newim) ;
00133          for( ii=0 ; ii < npix ; ii++ )
00134             far[ii] =  fac*(  0.299 * rgb[3*ii]
00135                             + 0.587 * rgb[3*ii+1]
00136                             + 0.114 * rgb[3*ii+2] ) ;
00137       }
00138       break ;
00139 
00140       case MRI_rgba:{
00141          byte  * rgb = (byte *) MRI_RGBA_PTR(oldim) ;
00142          float * far = MRI_FLOAT_PTR(newim) ;
00143          for( ii=0 ; ii < npix ; ii++ )
00144             far[ii] = fac *(  0.299 * rgb[4*ii]
00145                             + 0.587 * rgb[4*ii+1]
00146                             + 0.114 * rgb[4*ii+2] ) ;
00147       }
00148       break ;
00149 
00150       default:
00151          fprintf( stderr , "mri_to_float:  unrecognized image kind %d\n",oldim->kind ) ;
00152          MRI_FATAL_ERROR ;
00153    }
00154 
00155    MRI_COPY_AUX(newim,oldim) ;
00156    RETURN( newim );
00157 }
00158 
00159 /* 13 Dec 1998 */
00160 
00161 #define FAC(q) ( (fac[q] != 0.0) ? fac[q] : 1.0 )
00162 
00163 MRI_IMAGE * mri_mult_to_float( float * fac , MRI_IMAGE * oldim )
00164 {
00165    MRI_IMAGE *newim ;
00166    register int ii , npix ;
00167 
00168 ENTRY("mri_mult_to_float") ;
00169 
00170    newim = mri_new_conforming( oldim , MRI_float ) ;
00171    npix  = oldim->nvox ;
00172 
00173    switch( oldim->kind ){
00174 
00175       case MRI_byte:
00176          for( ii=0 ; ii < npix ; ii++ )
00177             newim->im.float_data[ii] = FAC(ii) * oldim->im.byte_data[ii] ;
00178          break ;
00179 
00180       case MRI_short:
00181          for( ii=0 ; ii < npix ; ii++ )
00182             newim->im.float_data[ii] = FAC(ii) * oldim->im.short_data[ii] ;
00183          break ;
00184 
00185       case MRI_int:
00186          for( ii=0 ; ii < npix ; ii++ )
00187             newim->im.float_data[ii] = FAC(ii) * oldim->im.int_data[ii] ;
00188          break ;
00189 
00190       case MRI_float:
00191          for( ii=0 ; ii < npix ; ii++ )
00192             newim->im.float_data[ii] = FAC(ii) * oldim->im.float_data[ii] ;
00193          break ;
00194 
00195       case MRI_double:
00196          for( ii=0 ; ii < npix ; ii++ )
00197             newim->im.float_data[ii] = FAC(ii) * oldim->im.double_data[ii] ;
00198          break ;
00199 
00200       case MRI_complex:
00201          for( ii=0 ; ii < npix ; ii++ )
00202             newim->im.float_data[ii] = FAC(ii) * CABS(oldim->im.complex_data[ii]) ;
00203          break ;
00204 
00205       default:
00206          fprintf( stderr , "mri_to_float:  unrecognized image kind\n" ) ;
00207          MRI_FATAL_ERROR ;
00208    }
00209 
00210    MRI_COPY_AUX(newim,oldim) ;
00211    RETURN( newim );
00212 }
 

Powered by Plone

This site conforms to the following standards: