From e57772e408ba43bc8a956587bfb2627258006416 Mon Sep 17 00:00:00 2001 From: Stephane Rigaud Date: Fri, 29 Nov 2024 11:07:03 +0100 Subject: [PATCH 1/2] add min/max/std param maps --- clic/include/tier4.hpp | 70 ++++++++++++++++++++++++++++++ clic/src/tier4/parametrics_map.cpp | 69 ++++++++++++++++++++++++++++- 2 files changed, 137 insertions(+), 2 deletions(-) diff --git a/clic/include/tier4.hpp b/clic/include/tier4.hpp index 39e89c7e..8d04415a 100644 --- a/clic/include/tier4.hpp +++ b/clic/include/tier4.hpp @@ -301,6 +301,76 @@ extension_ratio_map_func(const Device::Pointer & device, const Array::Pointer & -> Array::Pointer; + + /** + * @name minimum_intensity_map + * @brief Takes an image and a corresponding label map, determines the minimum + * intensity per label and replaces every label with the that number. + * + * This results in a parametric image expressing minimum object intensity. + * + * @param device Device to perform the operation on. [const Device::Pointer &] + * @param src intensity image [const Array::Pointer &] + * @param labels label image [const Array::Pointer &] + * @param dst Parametric image computed[Array::Pointer ( = None )] + * @return Array::Pointer + * + * @note 'label measurement', 'map', 'in assistant', 'combine' + * @see https://clij.github.io/clij2-docs/reference_minimumIntensityMap + */ +auto +minimum_intensity_map_func(const Device::Pointer & device, + const Array::Pointer & src, + const Array::Pointer & labels, + Array::Pointer dst) -> Array::Pointer; + + + /** + * @name maximum_intensity_map + * @brief Takes an image and a corresponding label map, determines the maximum + * intensity per label and replaces every label with the that number. + * + * This results in a parametric image expressing maximum object intensity. + * + * @param device Device to perform the operation on. [const Device::Pointer &] + * @param src intensity image [const Array::Pointer &] + * @param labels label image [const Array::Pointer &] + * @param dst Parametric image computed[Array::Pointer ( = None )] + * @return Array::Pointer + * + * @note 'label measurement', 'map', 'in assistant', 'combine' + * @see https://clij.github.io/clij2-docs/reference_maximumIntensityMap + */ +auto +maximum_intensity_map_func(const Device::Pointer & device, + const Array::Pointer & src, + const Array::Pointer & labels, + Array::Pointer dst) -> Array::Pointer; + + + /** + * @name standard_deviation_intensity_map + * @brief Takes an image and a corresponding label map, determines the standard deviation + * intensity per label and replaces every label with the that number. + * + * This results in a parametric image expressing std object intensity. + * + * @param device Device to perform the operation on. [const Device::Pointer &] + * @param src intensity image [const Array::Pointer &] + * @param labels label image [const Array::Pointer &] + * @param dst Parametric image computed[Array::Pointer ( = None )] + * @return Array::Pointer + * + * @note 'label measurement', 'map', 'in assistant', 'combine' + * @see https://clij.github.io/clij2-docs/reference_standardDeviationIntensityMap + */ +auto +standard_deviation_intensity_map_func(const Device::Pointer & device, + const Array::Pointer & src, + const Array::Pointer & labels, + Array::Pointer dst) -> Array::Pointer; + + } // namespace cle::tier4 #endif // __INCLUDE_TIER4_HPP diff --git a/clic/src/tier4/parametrics_map.cpp b/clic/src/tier4/parametrics_map.cpp index 2bd73eaf..b81fcd69 100644 --- a/clic/src/tier4/parametrics_map.cpp +++ b/clic/src/tier4/parametrics_map.cpp @@ -15,7 +15,7 @@ auto pixel_count_map_func(const Device::Pointer & device, const Array::Pointer & src, Array::Pointer dst) -> Array::Pointer { tier0::create_like(src, dst, dType::FLOAT); - auto props = tier3::statistics_of_background_and_labelled_pixels_func(device, nullptr, src); + auto props = tier3::statistics_of_background_and_labelled_pixels_func(device, src, src); auto values = cle::Array::create(props["area"].size(), 1, 1, 1, dType::FLOAT, mType::BUFFER, device); values->writeFrom(props["area"].data()); @@ -36,7 +36,7 @@ extension_ratio_map_func(const Device::Pointer & device, const Array::Pointer & -> Array::Pointer { tier0::create_like(src, dst, dType::FLOAT); - auto props = tier3::statistics_of_background_and_labelled_pixels_func(device, nullptr, src); + auto props = tier3::statistics_of_background_and_labelled_pixels_func(device, src, src); auto vector = props["mean_max_distance_to_centroid_ratio"]; auto values = Array::create(vector.size(), 1, 1, 1, dType::FLOAT, mType::BUFFER, device); values->writeFrom(vector.data()); @@ -60,5 +60,70 @@ mean_intensity_map_func(const Device::Pointer & device, return tier1::replace_values_func(device, labels, values, dst); } +auto +minimum_intensity_map_func(const Device::Pointer & device, + const Array::Pointer & src, + const Array::Pointer & labels, + Array::Pointer dst) -> Array::Pointer +{ + tier0::create_like(src, dst, dType::FLOAT); + auto props = tier3::statistics_of_background_and_labelled_pixels_func(device, src, labels); + + auto values = cle::Array::create(props["min_intensity"].size(), 1, 1, 1, dType::FLOAT, mType::BUFFER, device); + values->writeFrom(props["min_intensity"].data()); + + tier1::set_column_func(device, values, 0, 0); + return tier1::replace_values_func(device, labels, values, dst); +} + +auto +maximum_intensity_map_func(const Device::Pointer & device, + const Array::Pointer & src, + const Array::Pointer & labels, + Array::Pointer dst) -> Array::Pointer +{ + tier0::create_like(src, dst, dType::FLOAT); + auto props = tier3::statistics_of_background_and_labelled_pixels_func(device, src, labels); + + auto values = cle::Array::create(props["max_intensity"].size(), 1, 1, 1, dType::FLOAT, mType::BUFFER, device); + values->writeFrom(props["max_intensity"].data()); + + tier1::set_column_func(device, values, 0, 0); + return tier1::replace_values_func(device, labels, values, dst); +} + +auto +standard_deviation_intensity_map_func(const Device::Pointer & device, + const Array::Pointer & src, + const Array::Pointer & labels, + Array::Pointer dst) -> Array::Pointer +{ + tier0::create_like(src, dst, dType::FLOAT); + auto props = tier3::statistics_of_background_and_labelled_pixels_func(device, src, labels); + + auto values = cle::Array::create(props["std_intensity"].size(), 1, 1, 1, dType::FLOAT, mType::BUFFER, device); + values->writeFrom(props["std_intensity"].data()); + + tier1::set_column_func(device, values, 0, 0); + return tier1::replace_values_func(device, labels, values, dst); +} + + +auto +touching_neighbor_count_map_func(const Device::Pointer & device, + const Array::Pointer & labels, + Array::Pointer dst) -> Array::Pointer +{ + tier0::create_like(labels, dst, dType::FLOAT); + auto touch_matrix = tier3::generate_touch_matrix_func(device, labels, nullptr); + tier1::set_column_func(device, touch_matrix, 0, 0); + auto nb_touching_neighbors = tier2::count_touching_neighbors_func(device, touch_matrix, nullptr, true); + return tier1::replace_values_func(device, labels, nb_touching_neighbors, dst); +} + + + + + } // namespace cle::tier4 From 25271bf1451c01949f64ac7a55395f00963f20e0 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 29 Nov 2024 10:09:17 +0000 Subject: [PATCH 2/2] style(pre-commit.ci): auto fixes --- clic/include/tier4.hpp | 25 ++++++++++++------------- clic/src/tier4/parametrics_map.cpp | 27 +++++++++++---------------- 2 files changed, 23 insertions(+), 29 deletions(-) diff --git a/clic/include/tier4.hpp b/clic/include/tier4.hpp index 8d04415a..c5b49630 100644 --- a/clic/include/tier4.hpp +++ b/clic/include/tier4.hpp @@ -301,8 +301,7 @@ extension_ratio_map_func(const Device::Pointer & device, const Array::Pointer & -> Array::Pointer; - - /** +/** * @name minimum_intensity_map * @brief Takes an image and a corresponding label map, determines the minimum * intensity per label and replaces every label with the that number. @@ -320,12 +319,12 @@ extension_ratio_map_func(const Device::Pointer & device, const Array::Pointer & */ auto minimum_intensity_map_func(const Device::Pointer & device, - const Array::Pointer & src, - const Array::Pointer & labels, - Array::Pointer dst) -> Array::Pointer; + const Array::Pointer & src, + const Array::Pointer & labels, + Array::Pointer dst) -> Array::Pointer; - /** +/** * @name maximum_intensity_map * @brief Takes an image and a corresponding label map, determines the maximum * intensity per label and replaces every label with the that number. @@ -343,12 +342,12 @@ minimum_intensity_map_func(const Device::Pointer & device, */ auto maximum_intensity_map_func(const Device::Pointer & device, - const Array::Pointer & src, - const Array::Pointer & labels, - Array::Pointer dst) -> Array::Pointer; + const Array::Pointer & src, + const Array::Pointer & labels, + Array::Pointer dst) -> Array::Pointer; - /** +/** * @name standard_deviation_intensity_map * @brief Takes an image and a corresponding label map, determines the standard deviation * intensity per label and replaces every label with the that number. @@ -366,9 +365,9 @@ maximum_intensity_map_func(const Device::Pointer & device, */ auto standard_deviation_intensity_map_func(const Device::Pointer & device, - const Array::Pointer & src, - const Array::Pointer & labels, - Array::Pointer dst) -> Array::Pointer; + const Array::Pointer & src, + const Array::Pointer & labels, + Array::Pointer dst) -> Array::Pointer; } // namespace cle::tier4 diff --git a/clic/src/tier4/parametrics_map.cpp b/clic/src/tier4/parametrics_map.cpp index b81fcd69..7ae1eded 100644 --- a/clic/src/tier4/parametrics_map.cpp +++ b/clic/src/tier4/parametrics_map.cpp @@ -62,9 +62,9 @@ mean_intensity_map_func(const Device::Pointer & device, auto minimum_intensity_map_func(const Device::Pointer & device, - const Array::Pointer & src, - const Array::Pointer & labels, - Array::Pointer dst) -> Array::Pointer + const Array::Pointer & src, + const Array::Pointer & labels, + Array::Pointer dst) -> Array::Pointer { tier0::create_like(src, dst, dType::FLOAT); auto props = tier3::statistics_of_background_and_labelled_pixels_func(device, src, labels); @@ -78,9 +78,9 @@ minimum_intensity_map_func(const Device::Pointer & device, auto maximum_intensity_map_func(const Device::Pointer & device, - const Array::Pointer & src, - const Array::Pointer & labels, - Array::Pointer dst) -> Array::Pointer + const Array::Pointer & src, + const Array::Pointer & labels, + Array::Pointer dst) -> Array::Pointer { tier0::create_like(src, dst, dType::FLOAT); auto props = tier3::statistics_of_background_and_labelled_pixels_func(device, src, labels); @@ -94,9 +94,9 @@ maximum_intensity_map_func(const Device::Pointer & device, auto standard_deviation_intensity_map_func(const Device::Pointer & device, - const Array::Pointer & src, - const Array::Pointer & labels, - Array::Pointer dst) -> Array::Pointer + const Array::Pointer & src, + const Array::Pointer & labels, + Array::Pointer dst) -> Array::Pointer { tier0::create_like(src, dst, dType::FLOAT); auto props = tier3::statistics_of_background_and_labelled_pixels_func(device, src, labels); @@ -110,9 +110,8 @@ standard_deviation_intensity_map_func(const Device::Pointer & device, auto -touching_neighbor_count_map_func(const Device::Pointer & device, - const Array::Pointer & labels, - Array::Pointer dst) -> Array::Pointer +touching_neighbor_count_map_func(const Device::Pointer & device, const Array::Pointer & labels, Array::Pointer dst) + -> Array::Pointer { tier0::create_like(labels, dst, dType::FLOAT); auto touch_matrix = tier3::generate_touch_matrix_func(device, labels, nullptr); @@ -122,8 +121,4 @@ touching_neighbor_count_map_func(const Device::Pointer & device, } - - - - } // namespace cle::tier4