1 #include "mrilib.h"
2
3 #undef GOOD
4 #define GOOD(i) ( bmmm == mask[i] )
5
6 /*----------------------------------------------------------------------------*/
7
binarize_mask(int nvox,byte * mask)8 void binarize_mask( int nvox , byte *mask )
9 {
10 register int ii ;
11 if( nvox <= 0 || mask == NULL ) return ;
12 for( ii=0 ; ii < nvox ; ii++ ) if( mask[ii] ) mask[ii] = 1 ;
13 return ;
14 }
15
16 /*----------------------------------------------------------------------------*/
17 /* Extract (into a 1D float image) the values inside the mask.
18 If invert is nonzero, means to extract all values where mask=0.
19 *//*--------------------------------------------------------------------------*/
20
mri_extract_from_mask(MRI_IMAGE * imin,byte * mask,int invert)21 MRI_IMAGE * mri_extract_from_mask( MRI_IMAGE *imin , byte *mask , int invert )
22 {
23 byte bmmm = (invert == 0) ? 1 : 0 ;
24 int ii,jj , ngood , nvox ;
25 float *iar , *oar ;
26 MRI_IMAGE *outim ;
27
28 ENTRY("mri_extract_mask") ;
29
30 if( imin == NULL || mask == NULL ) RETURN(NULL) ; /* bad user == luser */
31
32 /*-- not float? create a float image and recurse! --*/
33
34 if( imin->kind != MRI_float ){
35 MRI_IMAGE *qim = mri_to_float(imin) ;
36 outim = mri_extract_from_mask( qim , mask , invert ) ;
37 mri_free(qim) ;
38 RETURN(outim) ;
39 }
40
41 /*-- count up the good voxels --*/
42
43 nvox = imin->nvox ;
44 for( ngood=ii=0 ; ii < nvox ; ii++ ) if( GOOD(ii) ) ngood++ ;
45 if( ngood == 0 ) RETURN(NULL) ;
46
47 /*-- create the output --*/
48
49 outim = mri_new( ngood , 1 , MRI_float ) ;
50 oar = MRI_FLOAT_PTR(outim) ;
51 iar = MRI_FLOAT_PTR(imin) ;
52
53 /*-- fill the output --*/
54
55 for( jj=ii=0 ; ii < nvox ; ii++ ) if( GOOD(ii) ) oar[jj++] = iar[ii] ;
56
57 RETURN(outim) ;
58 }
59