Basic statistics with pyclesperanto#

A common use case for image processing in the biology context is deriving statistics of segmented objects. clEsperanto offers a function for that: statistics_of_labelled_pixels.

import pyclesperanto_prototype as cle

import pandas as pd
from skimage.io import imread, imsave, imshow
import matplotlib
import numpy as np

# initialize GPU
cle.select_device("RTX")
<Apple M1 Max on Platform: Apple (2 refs)>
# load data
image = imread('../../data/blobs.tif')

# segment the image
labels = cle.voronoi_otsu_labeling(image, spot_sigma=3.5)
cle.imshow(labels, labels=True)
../_images/a52a734dcc8b43e077f3016749c2d753c2589d480f980f7728d0b4a1bcd3959d.png

Deriving basic statistics of labelled objects#

statistics = cle.statistics_of_labelled_pixels(image, labels)
statistics.keys()
dict_keys(['label', 'original_label', 'bbox_min_x', 'bbox_min_y', 'bbox_min_z', 'bbox_max_x', 'bbox_max_y', 'bbox_max_z', 'bbox_width', 'bbox_height', 'bbox_depth', 'min_intensity', 'max_intensity', 'sum_intensity', 'area', 'mean_intensity', 'sum_intensity_times_x', 'mass_center_x', 'sum_intensity_times_y', 'mass_center_y', 'sum_intensity_times_z', 'mass_center_z', 'sum_x', 'centroid_x', 'sum_y', 'centroid_y', 'sum_z', 'centroid_z', 'sum_distance_to_centroid', 'mean_distance_to_centroid', 'sum_distance_to_mass_center', 'mean_distance_to_mass_center', 'standard_deviation_intensity', 'max_distance_to_centroid', 'max_distance_to_mass_center', 'mean_max_distance_to_centroid_ratio', 'mean_max_distance_to_mass_center_ratio'])

We can use pandas to process that kind of tabular data.

table = pd.DataFrame(statistics)
table
label original_label bbox_min_x bbox_min_y bbox_min_z bbox_max_x bbox_max_y bbox_max_z bbox_width bbox_height ... centroid_z sum_distance_to_centroid mean_distance_to_centroid sum_distance_to_mass_center mean_distance_to_mass_center standard_deviation_intensity max_distance_to_centroid max_distance_to_mass_center mean_max_distance_to_centroid_ratio mean_max_distance_to_mass_center_ratio
0 1 1 0.0 81.0 0.0 19.0 114.0 0.0 20.0 34.0 ... 0.0 5287.089844 9.475071 5299.439941 9.497204 37.766109 17.577013 17.626616 1.855080 1.855979
1 2 2 0.0 129.0 0.0 16.0 150.0 0.0 17.0 22.0 ... 0.0 2064.469482 6.702823 2064.989746 6.704512 37.528027 11.395502 11.287270 1.700105 1.683533
2 3 3 3.0 39.0 0.0 13.0 51.0 0.0 11.0 13.0 ... 0.0 463.362244 4.064581 463.446014 4.065316 26.381859 6.690430 6.719399 1.646032 1.652860
3 4 4 5.0 156.0 0.0 27.0 181.0 0.0 23.0 26.0 ... 0.0 3969.405273 8.304195 3969.532715 8.304461 43.438278 13.714880 13.820534 1.651560 1.664230
4 5 5 10.0 0.0 0.0 35.0 29.0 0.0 26.0 30.0 ... 0.0 4421.953613 9.136268 4421.724121 9.135794 37.722134 20.016039 19.977444 2.190833 2.186722
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
56 57 57 236.0 0.0 0.0 255.0 29.0 0.0 20.0 30.0 ... 0.0 4585.168457 8.903239 4598.605957 8.929332 40.097881 16.315195 15.981338 1.832501 1.789757
57 58 58 244.0 94.0 0.0 255.0 115.0 0.0 12.0 22.0 ... 0.0 1184.635986 5.807039 1188.550781 5.826229 40.151653 12.327801 12.012736 2.122906 2.061837
58 59 59 250.0 123.0 0.0 255.0 127.0 0.0 6.0 5.0 ... 0.0 53.630829 1.986327 53.704212 1.989045 18.981472 3.287124 3.216963 1.654876 1.617341
59 60 60 233.0 136.0 0.0 255.0 167.0 0.0 23.0 32.0 ... 0.0 4798.240234 9.174456 4810.059082 9.197054 41.817959 19.726730 19.146832 2.150180 2.081844
60 61 61 250.0 192.0 0.0 255.0 209.0 0.0 6.0 18.0 ... 0.0 359.631714 4.230961 360.904083 4.245930 43.186157 8.888371 8.803941 2.100792 2.073501

61 rows × 37 columns

table.describe()
label original_label bbox_min_x bbox_min_y bbox_min_z bbox_max_x bbox_max_y bbox_max_z bbox_width bbox_height ... centroid_z sum_distance_to_centroid mean_distance_to_centroid sum_distance_to_mass_center mean_distance_to_mass_center standard_deviation_intensity max_distance_to_centroid max_distance_to_mass_center mean_max_distance_to_centroid_ratio mean_max_distance_to_mass_center_ratio
count 61.000000 61.000000 61.000000 61.000000 61.0 61.000000 61.000000 61.0 61.000000 61.000000 ... 61.0 61.000000 61.000000 61.000000 61.000000 61.000000 61.000000 61.000000 61.000000 61.000000
mean 31.000000 31.000000 128.245895 113.409836 0.0 148.836060 135.672134 0.0 21.590164 23.262295 ... 0.0 3504.359375 7.510857 3505.712891 7.514835 38.998928 13.153982 13.143246 1.757816 1.754179
std 17.752934 17.752934 77.687981 74.343658 0.0 76.843819 73.211273 0.0 6.502248 8.152508 ... 0.0 2726.386963 2.190415 2726.795654 2.189549 6.226861 4.019384 4.042030 0.184103 0.177547
min 1.000000 1.000000 0.000000 0.000000 0.0 13.000000 23.000000 0.0 6.000000 5.000000 ... 0.0 53.630829 1.986327 53.704212 1.989045 18.981472 3.287124 3.216963 1.556777 1.558537
25% 16.000000 16.000000 58.000000 58.000000 0.0 75.000000 75.000000 0.0 17.000000 20.000000 ... 0.0 1617.387451 6.126468 1617.882080 6.128341 36.568157 10.284315 10.368382 1.635635 1.617460
50% 31.000000 31.000000 129.000000 113.000000 0.0 148.000000 136.000000 0.0 21.000000 23.000000 ... 0.0 3057.676758 7.606161 3057.704346 7.606230 39.194824 12.852437 12.946156 1.700105 1.697701
75% 46.000000 46.000000 199.000000 166.000000 0.0 212.000000 196.000000 0.0 25.000000 28.000000 ... 0.0 4890.122070 9.136268 4891.035156 9.135794 43.016975 15.419342 15.526697 1.791790 1.802883
max 61.000000 61.000000 250.000000 249.000000 0.0 255.000000 253.000000 0.0 42.000000 52.000000 ... 0.0 13825.639648 13.825640 13824.682617 13.824682 51.311035 26.949856 27.543896 2.234677 2.248647

8 rows × 37 columns