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
00003
00004
00005
00006
00007 #include "mrilib.h"
00008
00009
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 ) ;
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:{
00056 byte * rgb = MRI_RGB_PTR(oldim) ;
00057 float * far = MRI_FLOAT_PTR(newim) ;
00058 for( ii=0 ; ii < npix ; ii++ )
00059 far[ii] = 0.299 * rgb[3*ii]
00060 + 0.587 * rgb[3*ii+1]
00061 + 0.114 * rgb[3*ii+2] ;
00062 }
00063 break ;
00064
00065 case MRI_rgba:{
00066 byte * rgb = (byte *) MRI_RGBA_PTR(oldim) ;
00067 float * far = MRI_FLOAT_PTR(newim) ;
00068 for( ii=0 ; ii < npix ; ii++ )
00069 far[ii] = 0.299 * rgb[4*ii]
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 );
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
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 }