Masks and segmentation
A mask defines the segmentation of an image into two or more regions, encoding the interpretation of the content of that image. Combinations and multi-level masks can be used to define all regions of interest in an image.
Mask type | # regions | Edges | Overlaps | Data type |
---|---|---|---|---|
Bit/Binary | 2 | hard | no | bit/char |
Fuzzy | 2 | soft | yes | float |
Bit-level | bits | hard | yes | char/short/int |
Multi-level | 2^bits | hard | no | char/short/int |
Bit/binary mask
Bit or binary mask data consist of only two numbers, usually 0 and 1.
bmask -v 7 -threshold 1.3 phi6.map phi6_mask.map
Fuzzy mask
A fuzzy mask is the same as a bit or binary mask, but with the edges smoothed in some way. The following example uses an averaging filter kernel to smooth the edges.
bfilter -verb 7 -dat f -kernel Avg5.krn phi6_mask.map phi6_mask_a5.map
Bit-level mask
A bit-level mask encodes each region as a bit in an integer number. Regions can therefore overlap and any voxel may belong to multiple regions, with equal weight for each region.
Multi-level mask
A multi-level mask encodes each region as a unique integer. Voxels are therefore assigned to regions and overlapping is not allowed. The following mask was generated using the watershed algorithm (also called flooding), and then colorized to show the different regions.
bflood -v 7 -thresh 1,0.05 -fill phi6.map phi6_mask.tiff
bcolour -v 7 -color 1,241 phi6_mask.tiff phi6_mask_col.tiff
Multi-level masks can be added to each other:
baddmask -v 7 -type level -output new_mask.pif mask1.tif mask2.pif
Segmentation with an algorithm such as flooding typically produces many small regions. These can be added to larger regions or deleted if they are disconnected. The user has to decided what is considered a small region, and how large the interface between regions should be to consider merging:
bmultimask -v 7 -interface 70,10 multi_mask.tif new_mask.tif