4. Masked Images and Labels¶
Masked images (or labels) are images that are masked by an instance segmentation mask.
In this section we will show how to create a MaskedImage object and how to use it to get the data of the image.
Similar to the Image and Label objects, the MaskedImage can be initialized from an OME-Zarr Container object using the get_masked_image method.
Let's create a masked image from the nuclei label:
>>> masked_image = ome_zarr_container.get_masked_image("nuclei")
>>> masked_image
MaskedImage(path=0, Dimensions(c: 3, z: 1, y: 4320, x: 5120), nuclei)
Since the MaskedImage is a subclass of Image, we can use all the methods available for Image objects.
The two most notable exceptions are the get_roi and set_roi which now instead of requiring a roi object, require an integer label.
>>> roi_data = masked_image.get_roi(label=1009, c=0)
>>> roi_data.shape
(1, 77, 84)
Additionally we can used the zoom_factor argument to get more context around the ROI.
For example we can zoom out the ROI by a factor of 2:
>>> roi_data = masked_image.get_roi(label=1009, c=0, zoom_factor=2)
>>> roi_data.shape
(1, 154, 167)
Masked operations¶
In addition to the get_roi method, the MaskedImage class also provides a masked operation method that allows you to perform reading and writing only on the masked pixels.
For these operations we can use the get_roi_masked and set_roi_masked methods.
For example, we can use the get_roi_masked method to get the masked data for a specific label:
>>> masked_roi_data = masked_image.get_roi_masked(label=1009, c=0, zoom_factor=2)
>>> masked_roi_data.shape
(1, 154, 167)
We can also use the set_roi_masked method to set the masked data for a specific label:
>>> masked_data = masked_image.get_roi_masked(label=1009, c=0)
>>> masked_data = np.random.randint(0, 255, masked_data.shape, dtype=np.uint8)
>>> masked_image.set_roi_masked(label=1009, c=0, patch=masked_data)
Masked Labels¶
The MaskedLabel class is a subclass of Label and provides the same functionality as the MaskedImage class.
The MaskedLabel class can be used to create a masked label from an OME-Zarr Container object using the get_masked_label method.
>>> masked_label = ome_zarr_container.get_masked_label(label_name = "wf_2_labels", masking_label_name = "nuclei")
>>> masked_label
MaskedLabel(path=0, Dimensions(z: 1, y: 4320, x: 5120), nuclei)