In [1]:
Copied!
from pathlib import Path
from ngio import open_ome_zarr_container
from ngio.utils import download_ome_zarr_dataset
# Download the dataset
download_dir = Path(".").absolute().parent.parent / "data"
hcs_path = download_ome_zarr_dataset("CardiomyocyteTinyMip", download_dir=download_dir)
image_path = hcs_path / "B" / "03" / "0"
# Open the ome-zarr container
ome_zarr = open_ome_zarr_container(image_path)
from pathlib import Path
from ngio import open_ome_zarr_container
from ngio.utils import download_ome_zarr_dataset
# Download the dataset
download_dir = Path(".").absolute().parent.parent / "data"
hcs_path = download_ome_zarr_dataset("CardiomyocyteTinyMip", download_dir=download_dir)
image_path = hcs_path / "B" / "03" / "0"
# Open the ome-zarr container
ome_zarr = open_ome_zarr_container(image_path)
Downloading data from 'https://zenodo.org/records/13305156/files/20200812-CardiomyocyteDifferentiation14-Cycle1_mip.zarr.zip' to file '/home/runner/work/ngio/ngio/data/20200812-CardiomyocyteDifferentiation14-Cycle1-tiny-mip.zarr.zip'.
Unzipping contents of '/home/runner/work/ngio/ngio/data/20200812-CardiomyocyteDifferentiation14-Cycle1-tiny-mip.zarr.zip' to '/home/runner/work/ngio/ngio/data/tmp'
Step 2: Compute the Regionprops Features¶
In [2]:
Copied!
import pandas as pd
from skimage import measure
from ngio.tables import FeatureTable
# First we will need the image object and the FOVs table
nuclei = ome_zarr.get_label("nuclei")
image_data = ome_zarr.get_image(pixel_size=nuclei.pixel_size).get_as_numpy(
axes_order=["z", "y", "x", "c"]
)
nuclei_data = nuclei.get_as_numpy(axes_order=["z", "y", "x"])
feat_table = measure.regionprops_table(
label_image=nuclei_data,
intensity_image=image_data,
properties=["label", "area", "mean_intensity", "max_intensity", "min_intensity"],
)
feat_table = pd.DataFrame(feat_table)
feat_table = feat_table.set_index("label")
# Convert to a FeatureTable
feature_table = FeatureTable(table_data=feat_table, reference_label="nuclei")
# Save the Table in the ome-zarr container
ome_zarr.add_table("nuclei_regionprops", feature_table)
import pandas as pd
from skimage import measure
from ngio.tables import FeatureTable
# First we will need the image object and the FOVs table
nuclei = ome_zarr.get_label("nuclei")
image_data = ome_zarr.get_image(pixel_size=nuclei.pixel_size).get_as_numpy(
axes_order=["z", "y", "x", "c"]
)
nuclei_data = nuclei.get_as_numpy(axes_order=["z", "y", "x"])
feat_table = measure.regionprops_table(
label_image=nuclei_data,
intensity_image=image_data,
properties=["label", "area", "mean_intensity", "max_intensity", "min_intensity"],
)
feat_table = pd.DataFrame(feat_table)
feat_table = feat_table.set_index("label")
# Convert to a FeatureTable
feature_table = FeatureTable(table_data=feat_table, reference_label="nuclei")
# Save the Table in the ome-zarr container
ome_zarr.add_table("nuclei_regionprops", feature_table)
Sanity Check: Read the Table back¶
In [3]:
Copied!
ome_zarr.get_table("nuclei_regionprops").lazy_frame.collect()
ome_zarr.get_table("nuclei_regionprops").lazy_frame.collect()
Out[3]:
shape: (1_497, 5)
label | area | mean_intensity-0 | max_intensity-0 | min_intensity-0 |
---|---|---|---|---|
i64 | f64 | f64 | f64 | f64 |
1 | 85.0 | 183.8 | 221.0 | 151.0 |
2 | 154.0 | 272.493506 | 392.0 | 184.0 |
3 | 123.0 | 276.569106 | 347.0 | 189.0 |
4 | 320.0 | 278.271875 | 370.0 | 170.0 |
5 | 18.0 | 242.611111 | 288.0 | 193.0 |
… | … | … | … | … |
1493 | 78.0 | 268.5 | 338.0 | 178.0 |
1494 | 33.0 | 315.030303 | 407.0 | 196.0 |
1495 | 38.0 | 280.842105 | 327.0 | 192.0 |
1496 | 18.0 | 260.222222 | 304.0 | 172.0 |
1497 | 27.0 | 335.333333 | 390.0 | 256.0 |