Doxygen Source Code Documentation
Main Page Alphabetical List Data Structures File List Data Fields Globals Search
mri_max.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #include "mrilib.h"
00008 #include <math.h>
00009
00010
00011
00012 double mri_max( MRI_IMAGE *im )
00013 {
00014 register int ii , npix ;
00015 byte byte_max = 0 ;
00016 short short_max = -32767 ;
00017 int int_max = -2147483647 ;
00018 float float_max = -1.e+38 ;
00019 double double_max = -1.e+38 ;
00020
00021 npix = im->nvox ;
00022
00023 switch( im->kind ){
00024
00025 case MRI_byte:
00026 for( ii=0 ; ii < npix ; ii++ )
00027 byte_max = MAX( byte_max , im->im.byte_data[ii] ) ;
00028 return (double) byte_max ;
00029
00030 case MRI_short:
00031 for( ii=0 ; ii < npix ; ii++ )
00032 short_max = MAX( short_max , im->im.short_data[ii] ) ;
00033 return (double) short_max ;
00034
00035 case MRI_int:
00036 for( ii=0 ; ii < npix ; ii++ )
00037 int_max = MAX( int_max , im->im.int_data[ii] ) ;
00038 return (double) int_max ;
00039
00040 case MRI_float:
00041 for( ii=0 ; ii < npix ; ii++ )
00042 float_max = MAX( float_max , im->im.float_data[ii] ) ;
00043 return (double) float_max ;
00044
00045 case MRI_double:
00046 for( ii=0 ; ii < npix ; ii++ )
00047 double_max = MAX( double_max , im->im.double_data[ii] ) ;
00048 return double_max ;
00049
00050 case MRI_complex:
00051 for( ii=0 ; ii < npix ; ii++ )
00052 float_max = MAX( float_max , CSQR(im->im.complex_data[ii]) ) ;
00053 return sqrt(float_max) ;
00054
00055 case MRI_rgb:{
00056 byte *rgb = im->im.rgb_data ;
00057 double val , top=0.0 ;
00058 for( ii=0 ; ii < npix ; ii++ ){
00059 val = 0.299 * rgb[3*ii]
00060 + 0.587 * rgb[3*ii+1]
00061 + 0.114 * rgb[3*ii+2] ;
00062 if( val > top ) top = val ;
00063 }
00064 return top ;
00065 }
00066
00067 default:
00068 fprintf( stderr , "mri_max: unknown image kind\n" ) ;
00069 }
00070 return 0 ;
00071 }
00072
00073 double mri_maxabs( MRI_IMAGE * im )
00074 {
00075 register int ii , npix ;
00076 byte byte_max = 0 ;
00077 int int_max = 0 ;
00078 double double_max = 0.0 ;
00079
00080 npix = im->nvox ;
00081
00082 switch( im->kind ){
00083
00084 case MRI_byte:
00085 for( ii=0 ; ii < npix ; ii++ )
00086 byte_max = MAX( byte_max , im->im.byte_data[ii] ) ;
00087 return (double) byte_max ;
00088
00089 case MRI_short:
00090 for( ii=0 ; ii < npix ; ii++ )
00091 int_max = MAX( int_max , abs(im->im.short_data[ii]) ) ;
00092 return (double) int_max ;
00093
00094 case MRI_int:
00095 for( ii=0 ; ii < npix ; ii++ )
00096 int_max = MAX( int_max , abs(im->im.int_data[ii]) ) ;
00097 return (double) int_max ;
00098
00099 case MRI_float:
00100 for( ii=0 ; ii < npix ; ii++ )
00101 double_max = MAX( double_max , fabs(im->im.float_data[ii]) ) ;
00102 return double_max ;
00103
00104 case MRI_double:
00105 for( ii=0 ; ii < npix ; ii++ )
00106 double_max = MAX( double_max , fabs(im->im.double_data[ii]) ) ;
00107 return double_max ;
00108
00109 case MRI_complex:
00110 for( ii=0 ; ii < npix ; ii++ )
00111 double_max = MAX( double_max , CSQR(im->im.complex_data[ii]) ) ;
00112 return sqrt(double_max) ;
00113
00114 case MRI_rgb:
00115 return mri_max( im ) ;
00116
00117 default:
00118 fprintf( stderr , "mri_max: unknown image kind\n" ) ;
00119 }
00120 return 0 ;
00121 }
00122
00123 double mri_min( MRI_IMAGE *im )
00124 {
00125 register int ii , npix ;
00126 byte byte_min = 255 ;
00127 short short_min = 32767 ;
00128 int int_min = 2147483647 ;
00129 float float_min = 1.e+38 ;
00130 double double_min = 1.e+38 ;
00131
00132 npix = im->nvox ;
00133
00134 switch( im->kind ){
00135
00136 case MRI_byte:
00137 for( ii=0 ; ii < npix ; ii++ )
00138 byte_min = MIN( byte_min , im->im.byte_data[ii] ) ;
00139 return (double) byte_min ;
00140
00141 case MRI_short:
00142 for( ii=0 ; ii < npix ; ii++ )
00143 short_min = MIN( short_min , im->im.short_data[ii] ) ;
00144 return (double) short_min ;
00145
00146 case MRI_int:
00147 for( ii=0 ; ii < npix ; ii++ )
00148 int_min = MIN( int_min , im->im.int_data[ii] ) ;
00149 return (double) int_min ;
00150
00151 case MRI_float:
00152 for( ii=0 ; ii < npix ; ii++ )
00153 float_min = MIN( float_min , im->im.float_data[ii] ) ;
00154 return (double) float_min ;
00155
00156 case MRI_double:
00157 for( ii=0 ; ii < npix ; ii++ )
00158 double_min = MIN( double_min , im->im.double_data[ii] ) ;
00159 return double_min ;
00160
00161 case MRI_complex:
00162 for( ii=0 ; ii < npix ; ii++ )
00163 float_min = MIN( float_min , CSQR(im->im.complex_data[ii]) ) ;
00164 return sqrt(float_min) ;
00165
00166 case MRI_rgb:{
00167 byte *rgb = im->im.rgb_data ;
00168 double val , bot=255.9 ;
00169 for( ii=0 ; ii < npix ; ii++ ){
00170 val = 0.299 * rgb[3*ii]
00171 + 0.587 * rgb[3*ii+1]
00172 + 0.114 * rgb[3*ii+2] ;
00173 if( val < bot ) bot = val ;
00174 }
00175 return bot ;
00176 }
00177
00178 default:
00179 fprintf( stderr , "mri_min: unknown image kind\n" ) ;
00180 }
00181 return 0 ;
00182 }