Doxygen Source Code Documentation
mri_thresh.c File Reference
#include "mrilib.h"
Go to the source code of this file.
Functions | |
void | mri_threshold (double thbot, double thtop, MRI_IMAGE *thrim, MRI_IMAGE *im) |
Function Documentation
|
Definition at line 16 of file mri_thresh.c. References ENTRY, complex::i, MRI_IMAGE::kind, MRI_BYTE_PTR, MRI_COMPLEX_PTR, MRI_DOUBLE_PTR, MRI_FLOAT_PTR, mri_free(), MRI_INT_PTR, MRI_RGB_PTR, MRI_SHORT_PTR, mri_to_short(), MRI_IMAGE::nvox, complex::r, and SHORTIZE. Referenced by AFNI_func_overlay().
00017 { 00018 register int ii , npix ; 00019 00020 ENTRY("mri_threshold") ; 00021 00022 if( thrim == NULL || im == NULL || 00023 thrim->nvox != im->nvox || thbot >= thtop ) EXRETURN ; 00024 00025 npix = im->nvox ; 00026 00027 switch( thrim->kind ){ 00028 00029 default: EXRETURN ; /* don't know how to use this type of threshold image */ 00030 00031 case MRI_byte:{ /* 20 Dec 2004: very stupid way to do bytes */ 00032 MRI_IMAGE *qim = mri_to_short(1.0,thrim) ; 00033 mri_threshold( thbot,thtop , qim , im ) ; 00034 mri_free(qim) ; 00035 EXRETURN ; 00036 } 00037 00038 case MRI_short:{ /* threshold image is shorts */ 00039 register short th1 , th2 ; 00040 register short *thar = MRI_SHORT_PTR(thrim) ; 00041 th1 = SHORTIZE(thbot) ; th2 = SHORTIZE(thtop) ; 00042 00043 switch( im->kind ){ 00044 00045 default: EXRETURN ; /* unknown type of data image */ 00046 00047 case MRI_byte:{ 00048 register byte *ar = MRI_BYTE_PTR(im) ; 00049 for( ii=0 ; ii < npix ; ii++ ) 00050 if( thar[ii] > th1 && thar[ii] < th2 ) ar[ii] = 0 ; 00051 EXRETURN ; 00052 } 00053 00054 case MRI_rgb:{ /* 20 Dec 2004 */ 00055 register byte *ar = MRI_RGB_PTR(im) ; 00056 for( ii=0 ; ii < npix ; ii++ ) 00057 if( thar[ii] > th1 && thar[ii] < th2 ){ 00058 ar[3*ii] = ar[3*ii+1] = ar[3*ii+2] = 0 ; 00059 } 00060 EXRETURN ; 00061 } 00062 00063 case MRI_short:{ 00064 register short *ar = MRI_SHORT_PTR(im) ; 00065 for( ii=0 ; ii < npix ; ii++ ) 00066 if( thar[ii] > th1 && thar[ii] < th2 ) ar[ii] = 0 ; 00067 EXRETURN ; 00068 } 00069 00070 case MRI_int:{ 00071 register int *ar = MRI_INT_PTR(im) ; 00072 for( ii=0 ; ii < npix ; ii++ ) 00073 if( thar[ii] > th1 && thar[ii] < th2 ) ar[ii] = 0 ; 00074 EXRETURN ; 00075 } 00076 00077 case MRI_float:{ 00078 register float *ar = MRI_FLOAT_PTR(im) ; 00079 for( ii=0 ; ii < npix ; ii++ ) 00080 if( thar[ii] > th1 && thar[ii] < th2 ) ar[ii] = 0.0f ; 00081 EXRETURN ; 00082 } 00083 00084 case MRI_double:{ 00085 register double *ar = MRI_DOUBLE_PTR(im) ; 00086 for( ii=0 ; ii < npix ; ii++ ) 00087 if( thar[ii] > th1 && thar[ii] < th2 ) ar[ii] = 0.0 ; 00088 EXRETURN ; 00089 } 00090 00091 case MRI_complex:{ 00092 register complex *ar = MRI_COMPLEX_PTR(im) ; 00093 for( ii=0 ; ii < npix ; ii++ ) 00094 if( thar[ii] > th1 && thar[ii] < th2 ) ar[ii].r = ar[ii].i = 0.0f ; 00095 EXRETURN ; 00096 } 00097 } 00098 } /* end of short thrim */ 00099 00100 case MRI_float:{ /* threshold image is floats */ 00101 register float th1 , th2 ; 00102 register float *thar = MRI_FLOAT_PTR(thrim) ; 00103 th1 = thbot ; th2 = thtop ; 00104 00105 switch( im->kind ){ 00106 00107 default: EXRETURN ; 00108 00109 case MRI_byte:{ 00110 register byte *ar = MRI_BYTE_PTR(im) ; 00111 for( ii=0 ; ii < npix ; ii++ ) 00112 if( thar[ii] > th1 && thar[ii] < th2 ) ar[ii] = 0 ; 00113 EXRETURN ; 00114 } 00115 00116 case MRI_rgb:{ /* 20 Dec 2004 */ 00117 register byte *ar = MRI_RGB_PTR(im) ; 00118 for( ii=0 ; ii < npix ; ii++ ) 00119 if( thar[ii] > th1 && thar[ii] < th2 ){ 00120 ar[3*ii] = ar[3*ii+1] = ar[3*ii+2] = 0 ; 00121 } 00122 EXRETURN ; 00123 } 00124 00125 case MRI_short:{ 00126 register short *ar = MRI_SHORT_PTR(im) ; 00127 for( ii=0 ; ii < npix ; ii++ ) 00128 if( thar[ii] > th1 && thar[ii] < th2 ) ar[ii] = 0 ; 00129 EXRETURN ; 00130 } 00131 00132 case MRI_int:{ 00133 register int *ar = MRI_INT_PTR(im) ; 00134 for( ii=0 ; ii < npix ; ii++ ) 00135 if( thar[ii] > th1 && thar[ii] < th2 ) ar[ii] = 0 ; 00136 EXRETURN ; 00137 } 00138 00139 case MRI_float:{ 00140 register float *ar = MRI_FLOAT_PTR(im) ; 00141 for( ii=0 ; ii < npix ; ii++ ) 00142 if( thar[ii] > th1 && thar[ii] < th2 ) ar[ii] = 0.0f ; 00143 EXRETURN ; 00144 } 00145 00146 case MRI_double:{ 00147 register double *ar = MRI_DOUBLE_PTR(im) ; 00148 for( ii=0 ; ii < npix ; ii++ ) 00149 if( thar[ii] > th1 && thar[ii] < th2 ) ar[ii] = 0.0 ; 00150 EXRETURN ; 00151 } 00152 00153 case MRI_complex:{ 00154 register complex *ar = MRI_COMPLEX_PTR(im) ; 00155 for( ii=0 ; ii < npix ; ii++ ) 00156 if( thar[ii] > th1 && thar[ii] < th2 ) ar[ii].r = ar[ii].i = 0.0f ; 00157 EXRETURN ; 00158 } 00159 } 00160 } /* end of float thrim */ 00161 00162 } 00163 00164 EXRETURN ; /* should not be reached! */ 00165 } |