1 #include "mrilib.h" 2 3 /*------------------------------------------------------------------------*/ 4 /*! Return 1 if an image is all zero (or NULL), 5 or return 0 if it is not all zero (bytewise) */ 6 mri_allzero(MRI_IMAGE * im)7int mri_allzero( MRI_IMAGE *im ) 8 { 9 char *ar ; unsigned int ii , nch ; 10 11 if( im == NULL ) return 1 ; 12 ar = mri_data_pointer(im) ; if( ar == NULL ) return 1 ; 13 nch = (unsigned int)im->nvox * (unsigned int)im->pixel_size ; 14 for( ii=0 ; ii < nch ; ii++ ) if( ar[ii] != 0 ) return 0 ; 15 return 1 ; 16 } 17 18 /*------------------------------------------------------------------------*/ 19 /*! Return count of nonzero voxels. */ 20 mri_nonzero_count(MRI_IMAGE * im)21int mri_nonzero_count( MRI_IMAGE *im ) 22 { 23 MRI_IMAGE *fim ; float *far ; 24 int ii , nvox , nnz ; 25 26 if( mri_allzero(im) ) return 0 ; 27 28 if( im->kind == MRI_float ) fim = im ; 29 else fim = mri_to_float(im) ; 30 far = MRI_FLOAT_PTR(fim) ; 31 nvox = fim->nvox ; 32 for( nnz=ii=0 ; ii < nvox ; ii++ ) if( far[ii] != 0.0f ) nnz++ ; 33 if( fim != im ) mri_free(fim) ; 34 return nnz ; 35 } 36 37 /*------------------------------------------------------------------------*/ 38 /*! Return count of nonzero voxels in a mask [12 Dec 2019] */ 39 mri_nonzero_count_inmask(MRI_IMAGE * im,byte * mmm)40int mri_nonzero_count_inmask( MRI_IMAGE *im , byte *mmm ) 41 { 42 MRI_IMAGE *fim ; float *far ; 43 int ii , nvox , nnz ; 44 45 if( mri_allzero(im) ) return 0 ; 46 if( mmm == NULL ) return mri_nonzero_count(im) ; 47 48 if( im->kind == MRI_float ) fim = im ; 49 else fim = mri_to_float(im) ; 50 far = MRI_FLOAT_PTR(fim) ; 51 nvox = fim->nvox ; 52 for( nnz=ii=0 ; ii < nvox ; ii++ ) 53 if( mmm[ii] && far[ii] != 0.0f ) nnz++ ; 54 55 if( fim != im ) mri_free(fim) ; 56 return nnz ; 57 } 58