diff --git a/pyclesperanto_prototype/_tier9/_push_regionprops.py b/pyclesperanto_prototype/_tier9/_push_regionprops.py index 0c94ed8a..b751e38e 100644 --- a/pyclesperanto_prototype/_tier9/_push_regionprops.py +++ b/pyclesperanto_prototype/_tier9/_push_regionprops.py @@ -97,7 +97,9 @@ def push_regionprops(props : Union[dict, RegionProperties], first_row_index : in # MAX_DISTANCE_TO_CENTROID = 34 props['max_distance_to_centroid'], # MAX_MEAN_DISTANCE_TO_CENTROID_RATIO = 35 - props['mean_max_distance_to_centroid_ratio'] + props['mean_max_distance_to_centroid_ratio'], + # STANDARD_ERROR_INTENSITY = 36 + props['standard_error_intensity'] ] matrix = np.asarray(list).T diff --git a/pyclesperanto_prototype/_tier9/_statistics_of_labelled_pixels.py b/pyclesperanto_prototype/_tier9/_statistics_of_labelled_pixels.py index 973366f5..eab3a37b 100644 --- a/pyclesperanto_prototype/_tier9/_statistics_of_labelled_pixels.py +++ b/pyclesperanto_prototype/_tier9/_statistics_of_labelled_pixels.py @@ -276,6 +276,9 @@ def statistics_of_labelled_pixels(intensity_image : Image = None, label_image : power(sum_dim, result_vector, 0.5) region_props['standard_deviation_intensity'] = pull(result_vector)[0] + # standard error intensity + region_props['standard_error_intensity'] = region_props['standard_deviation_intensity'] / np.sqrt(region_props['area']) + crop(max_statistics, result_vector, measurements_start_x, 4, 0) region_props['max_distance_to_centroid'] = pull(result_vector)[0] crop(max_statistics, result_vector, measurements_start_x, 5, 0) diff --git a/tests/test_statistics_of_labelled_pixels.py b/tests/test_statistics_of_labelled_pixels.py index 8e8a4077..03236d10 100644 --- a/tests/test_statistics_of_labelled_pixels.py +++ b/tests/test_statistics_of_labelled_pixels.py @@ -90,8 +90,10 @@ def test_statistics_of_labelled_pixels(): [0.65403885, 0.65403885, 0.6666667], # MAX_DISTANCE_TO_CENTROID(34), [0.74535596, 0.745356, 1.], - # MAX_MEAN_DISTANCE_TO_CENTROID_RATIO(35); - [1.1396203, 1.1396204, 1.5] + # MAX_MEAN_DISTANCE_TO_CENTROID_RATIO(35), + [1.1396203, 1.1396204, 1.5], + # STANDARD_ERROR_INTENSITY(36); + [0.27216553, 0.27216551, 0.4714043] ] )) @@ -205,8 +207,10 @@ def test_statistics_of_labelled_pixels_3d(): [0.65403885, 0.65403885, 0.6666667], # MAX_DISTANCE_TO_CENTROID(34), [0.74535596, 0.745356, 1.], - # MAX_MEAN_DISTANCE_TO_CENTROID_RATIO(35); - [1.1396203, 1.1396204, 1.5] + # MAX_MEAN_DISTANCE_TO_CENTROID_RATIO(35), + [1.1396203, 1.1396204, 1.5], + # STANDARD_ERROR_INTENSITY(36); + [0.27216553, 0.27216551, 0.4714043] ] )) @@ -226,7 +230,7 @@ def test_statistics_of_labelled_pixels_3d(): assert (np.allclose(a, b, 0.0001)) -def test_standard_deviation(): +def test_standard_deviation_and_standard_error(): import numpy as np image = np.asarray([ @@ -243,11 +247,14 @@ def test_standard_deviation(): print("numpy standard deviation", np.std(image)) print("numpy variance", np.var(image)) + print("numpy standard error", np.std(image) / np.sqrt(image.size)) stats = cle.statistics_of_labelled_pixels(image, labels) print("std", stats['standard_deviation_intensity'][0]) + print("sterr", stats['standard_error_intensity'][0]) from numpy import testing testing.assert_almost_equal(stats['standard_deviation_intensity'][0], 2.58, decimal=1) + testing.assert_almost_equal(stats['standard_error_intensity'][0], 0.86, decimal=1)