From b221ca3612d95755875cc2179e4dfffe9ad432ed Mon Sep 17 00:00:00 2001 From: Neil Shephard Date: Thu, 16 May 2024 14:42:26 +0100 Subject: [PATCH] feature(measure): Adds the height_profiles sub-module Further to #755 this adds the `topostats.measure.height_profiles` sub-module which interpolates the heights between the maximum feret co-ordinates. Includes a function in `topostats.plotting.plot_height_profiles()` which produces a line-plot of multiple height profiles. ToDo... Still a fair few steps to integrate this into the processing. + Add configuration options to `topostats/default_config.yaml` of whether to calculate `height_profiles`. + Add configuration option for the `scipy.interpolate.RegularGridInterpolator()` options which are passed via `**kwargs`. + Update `GrainStats()` to calculate the height profile for the image being processed if required. + Return the `height_profile` (1-D Numpy array). + Collect `height_profile` acrss grains into a dictionary (may require current code as written to be adapted to work with dictionaries, currently works with lists in `plot_height_profiles()`). + Add functionality to write the profiles to JSON for subsequent use/plotting (e.g. customising style/axis labels/etc. of plot) Related : #748 #755 --- tests/conftest.py | 130 ++++- tests/measure/test_height_profiles.py | 449 ++++++++++++++++++ ...f different length (one even, two odd).png | Bin 0 -> 37622 bytes ..._height_profiles_Single height profile.png | Bin 0 -> 17197 bytes ...f different length (one even, one odd).png | Bin 0 -> 31547 bytes ...ferent length (diff in length is even).png | Bin 0 -> 24813 bytes ...fferent length (diff in length is odd).png | Bin 0 -> 27743 bytes ...ght_profiles_Two arrays of same length.png | Bin 0 -> 24813 bytes tests/test_plotting.py | 85 +++- topostats/measure/height_profiles.py | 57 +++ topostats/plotting.py | 64 ++- 11 files changed, 773 insertions(+), 12 deletions(-) create mode 100644 tests/measure/test_height_profiles.py create mode 100644 tests/resources/img/height_profiles/test_plot_height_profiles_Four arrays of different length (one even, two odd).png create mode 100644 tests/resources/img/height_profiles/test_plot_height_profiles_Single height profile.png create mode 100644 tests/resources/img/height_profiles/test_plot_height_profiles_Three arrays of different length (one even, one odd).png create mode 100644 tests/resources/img/height_profiles/test_plot_height_profiles_Two arrays of different length (diff in length is even).png create mode 100644 tests/resources/img/height_profiles/test_plot_height_profiles_Two arrays of different length (diff in length is odd).png create mode 100644 tests/resources/img/height_profiles/test_plot_height_profiles_Two arrays of same length.png create mode 100644 topostats/measure/height_profiles.py diff --git a/tests/conftest.py b/tests/conftest.py index 540470303c..d535c6f797 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -4,10 +4,13 @@ from pathlib import Path import numpy as np +import numpy.typing as npt import pandas as pd import pySPM import pytest import yaml +from skimage import draw, filters +from skimage.morphology import skeletonize import topostats from topostats.filters import Filters @@ -164,32 +167,32 @@ def plotting_config_with_plot_dict(default_config: dict) -> dict: @pytest.fixture() -def image_random() -> np.ndarray: +def image_random() -> npt.NDArray: """Random image as NumPy array.""" rng = np.random.default_rng(seed=1000) return rng.random((1024, 1024)) @pytest.fixture() -def small_array() -> np.ndarray: +def small_array() -> npt.NDArray: """Small (10x10) image array for testing.""" return RNG.random(SMALL_ARRAY_SIZE) @pytest.fixture() -def small_mask() -> np.ndarray: +def small_mask() -> npt.NDArray: """Small (10x10) mask array for testing.""" return RNG.uniform(low=0, high=1, size=SMALL_ARRAY_SIZE) > 0.5 @pytest.fixture() -def synthetic_scars_image() -> np.ndarray: +def synthetic_scars_image() -> npt.NDArray: """Small synthetic image for testing scar removal.""" return np.load(RESOURCES / "test_scars_synthetic_scar_image.npy") @pytest.fixture() -def synthetic_marked_scars() -> np.ndarray: +def synthetic_marked_scars() -> npt.NDArray: """Small synthetic boolean array of marked scar coordinates corresponding to synthetic_scars_image.""" return np.load(RESOURCES / "test_scars_synthetic_mark_scars.npy") @@ -777,7 +780,7 @@ def minicircle_all_statistics() -> pd.DataFrame: # Skeletonizing Fixtures @pytest.fixture() -def skeletonize_circular() -> np.ndarray: +def skeletonize_circular() -> npt.NDArray: """A circular molecule for testing skeletonizing.""" return np.array( [ @@ -807,13 +810,13 @@ def skeletonize_circular() -> np.ndarray: @pytest.fixture() -def skeletonize_circular_bool_int(skeletonize_circular: np.ndarray) -> np.ndarray: +def skeletonize_circular_bool_int(skeletonize_circular: np.ndarray) -> npt.NDArray: """A circular molecule for testing skeletonizing as a boolean integer array.""" return np.array(skeletonize_circular, dtype="bool").astype(int) @pytest.fixture() -def skeletonize_linear() -> np.ndarray: +def skeletonize_linear() -> npt.NDArray: """A linear molecule for testing skeletonizing.""" return np.array( [ @@ -846,9 +849,116 @@ def skeletonize_linear() -> np.ndarray: @pytest.fixture() -def skeletonize_linear_bool_int(skeletonize_linear) -> np.ndarray: +def skeletonize_linear_bool_int(skeletonize_linear) -> npt.NDArray: """A linear molecule for testing skeletonizing as a boolean integer array.""" return np.array(skeletonize_linear, dtype="bool").astype(int) -# Curvature Fixtures +# Pruning and Height profile fixtures +# +# Skeletons are generated by... +# +# 1. Generate random boolean images using scikit-image. +# 2. Skeletonize these shapes (gives boolean skeletons), these are our targets +# 3. Scale the skeletons by a factor (100) +# 4. Apply Gaussian filter to blur the heights and give an example original im +# for. + + +def _generate_heights(skeleton: npt.NDArray, scale: float = 100, sigma: float = 5.0, cval: float = 20.0) -> npt.NDArray: + """Generate heights from skeletons by scaling image and applying Gaussian blurring. + + Uses scikit-image 'skimage.filters.gaussian()' to generate heights from skeletons. + + Parameters + ---------- + skeleton : npt.NDArray + Binary array of skeleton. + scale : float + Factor to scale heights by. Boolean arrays are 0/1 and so the factor will be the height of the skeleton ridge. + sigma : float + Standard deviation for Gaussian kernel passed to `skimage.filters.gaussian()'. + cval : float + Value to fill past edges of input, passed to `skimage.filters.gaussian()'. + + Returns + ------- + npt.NDArray + Array with heights of image based on skeleton which will be the backbone and target. + """ + return filters.gaussian(skeleton * scale, sigma=sigma, cval=cval) + + +def _generate_random_skeleton(**extra_kwargs): + """Generate random skeletons and heights using skimage.draw's random_shapes().""" + kwargs = { + "image_shape": (128, 128), + "max_shapes": 20, + "channel_axis": None, + "shape": None, + "allow_overlap": True, + } + heights = {"scale": 100, "sigma": 5.0, "cval": 20.0} + random_image, _ = draw.random_shapes(**kwargs, **extra_kwargs) + mask = random_image != 255 + skeleton = skeletonize(mask) + return {"img": _generate_heights(skeleton, **heights), "skeleton": skeleton} + + +@pytest.fixture() +# def pruning_skeleton_loop1(heights=heights) -> dict: +def skeleton_loop1() -> dict: + """Skeleton with loop to be retained and side-branches.""" + return _generate_random_skeleton(rng=1, min_size=20) + + +@pytest.fixture() +def skeleton_loop2() -> dict: + """Skeleton with loop to be retained and side-branches.""" + return _generate_random_skeleton(rng=165103, min_size=60) + + +@pytest.fixture() +def skeleton_linear1() -> dict: + """Linear skeleton with lots of large side-branches, some forked.""" + return _generate_random_skeleton(rng=13588686514, min_size=20) + + +@pytest.fixture() +def skeleton_linear2() -> dict: + """Linear Skeleton with simple fork at one end.""" + return _generate_random_skeleton(rng=21, min_size=20) + + +@pytest.fixture() +def skeleton_linear3() -> dict: + """Linear Skeletons (i.e. multiple) with branches.""" + return _generate_random_skeleton(rng=894632511, min_size=20) + + +# Helper functions for visualising skeletons and heights +# +# def pruned_plot(gen_shape: dict) -> None: +# """Plot the original skeleton, its derived height and the pruned skeleton.""" +# img_skeleton = gen_shape() +# pruned = topostatsPrune( +# img_skeleton["heights"], +# img_skeleton["skeleton"], +# max_length=-1, +# height_threshold=90, +# method_values="min", +# method_outlier="abs", +# ) +# pruned_skeleton = pruned._prune_by_length(pruned.skeleton, pruned.max_length) +# fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2) +# ax1.imshow(img_skeleton["skeleton"]) +# ax2.imshow(img_skeleton["heights"]) +# ax3.imshow(pruned_skeleton) +# plt.show() + + +# pruned_plot(skeleton_loop1) +# pruned_plot(skeleton_loop2) +# pruned_plot(skeleton_linear1) +# pruned_plot(skeleton_linear2) +# pruned_plot(skeleton_linear3) diff --git a/tests/measure/test_height_profiles.py b/tests/measure/test_height_profiles.py new file mode 100644 index 0000000000..13b366ca9b --- /dev/null +++ b/tests/measure/test_height_profiles.py @@ -0,0 +1,449 @@ +"""Tests for height profiles.""" + +from __future__ import annotations + +import numpy as np +import numpy.typing as npt +import pytest + +from topostats.measure import height_profiles + +# pylint: disable=too-many-lines + + +@pytest.mark.parametrize( + ("img", "skeleton", "interpolate_conf", "target"), + [ + pytest.param( + np.asarray( + [ + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], + [0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0], + [0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0], + [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], + [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], + [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], + [0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0], + [0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0], + [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + ] + ), + np.asarray( + [ + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], + [0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0], + [0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0], + [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], + [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], + [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], + [0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0], + [0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0], + [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + ] + ), + {"method": "linear"}, + np.asarray([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]), + id="Basic circle, interpolation : linear", + ), + pytest.param( + np.asarray( + [ + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + ] + ), + np.asarray( + [ + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + ] + ), + {"method": "linear"}, + np.asarray([6, 7, 8, 9, 10, 9, 8, 7, 6]), + id="Diagonal line, interpolation : linear", + ), + pytest.param( + np.asarray( + [ + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + ] + ), + np.asarray( + [ + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + ] + ), + {"method": "cubic"}, + np.asarray( + [ + 6.00003876621563, + 7.000004717194621, + 7.9999928244616285, + 8.99999298402839, + 9.999970980789172, + 8.999992984028388, + 7.999992824461623, + 7.000004717194617, + 6.0000387662156305, + ] + ), + id="Diagonal line, interpolation : cubic", + ), + pytest.param( + np.asarray( + [ + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + ] + ), + np.asarray( + [ + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + ] + ), + {"method": "quintic"}, + np.asarray( + [ + 5.999989640371591, + 7.000016244559416, + 8.00000614600215, + 8.999994848347821, + 9.999994179877497, + 8.999996962477201, + 8.000007380709196, + 7.000012865886609, + 5.999980338747783, + ] + ), + id="Diagonal line, interpolation : quintic", + ), + ], +) +def test_interpolate_height_profile_basic( + img: npt.NDArray, skeleton: npt.NDArray, interpolate_conf: dict, target: npt.NDArray +) -> None: + """Test interpolate_height_profile() with basic shapes and heights.""" + np.testing.assert_array_almost_equal( + height_profiles.interpolate_height_profile(img, skeleton, **interpolate_conf), target, decimal=18 + ) + + +@pytest.mark.parametrize( + ("img", "interpolate_conf", "target"), + [ + pytest.param( + "skeleton_loop1", + {"method": "linear"}, + np.asarray( + [ + 4.67065435e-19, + 5.27325236e-19, + 5.73001876e-19, + 6.00077154e-19, + 6.02620717e-19, + 5.84638629e-19, + 5.49900643e-19, + 5.01019148e-19, + 4.44454025e-19, + 3.84704618e-19, + 3.24727212e-19, + 2.71579881e-19, + 2.24030707e-19, + 1.82928477e-19, + 1.52009449e-19, + 1.29002796e-19, + 1.12210549e-19, + 1.02377000e-19, + 9.88337895e-20, + 9.86897569e-20, + 1.01606876e-19, + 1.08936285e-19, + 1.18189308e-19, + 1.29587354e-19, + 1.45118712e-19, + 1.64343073e-19, + 1.87514816e-19, + 2.16107520e-19, + 2.50541210e-19, + 2.89309484e-19, + 3.31579050e-19, + 3.77100234e-19, + 4.22750106e-19, + 4.67427278e-19, + 5.12015950e-19, + 5.56562119e-19, + 6.02714720e-19, + 6.52632142e-19, + 7.06722254e-19, + 7.64764648e-19, + 8.24194642e-19, + 8.77655946e-19, + 9.22918373e-19, + 9.55310478e-19, + 9.68676402e-19, + 9.65855291e-19, + 9.48983887e-19, + 9.21105154e-19, + 8.88051609e-19, + 8.54278066e-19, + 8.23290173e-19, + 7.97837145e-19, + 7.78036698e-19, + 7.64027816e-19, + 7.54952213e-19, + 7.49473349e-19, + 7.46876370e-19, + 7.45973399e-19, + 7.45904036e-19, + 7.46705469e-19, + 7.48013031e-19, + 7.49133335e-19, + 7.50512257e-19, + 7.51909422e-19, + 7.52391803e-19, + 7.51626216e-19, + 7.48594362e-19, + 7.41889223e-19, + 7.30464673e-19, + 7.12964755e-19, + 6.88595014e-19, + 6.58882186e-19, + 6.22972271e-19, + 5.81557780e-19, + 5.40406540e-19, + 4.97897592e-19, + 4.55159488e-19, + 4.16411088e-19, + 3.81464749e-19, + 3.49043423e-19, + 3.21295477e-19, + 3.00311339e-19, + 2.84251853e-19, + 2.75044356e-19, + 2.77171887e-19, + 2.90484914e-19, + 3.17730359e-19, + 3.62941157e-19, + 4.27182722e-19, + 5.09548575e-19, + 6.08585652e-19, + 7.20418643e-19, + 8.35361178e-19, + 9.44196778e-19, + 1.03821903e-18, + 1.10607841e-18, + 1.14204135e-18, + 1.14240973e-18, + 1.10717643e-18, + 1.04225817e-18, + 9.53125935e-19, + 8.44475011e-19, + 7.27831261e-19, + 6.10118898e-19, + ] + ), + id="Skeleton loop 1", + # marks=pytest.mark.skip(), + ), + pytest.param( + "skeleton_loop2", + {"method": "linear"}, + np.asarray([4.40393772e-19, 2.04340231e-19, 4.34636982e-19]), + id="Skeleton loop 2", + marks=pytest.mark.skip(reason="Looks weird, expect more than three points."), + ), + pytest.param( + "skeleton_linear3", + {"method": "linear"}, + np.asarray( + [ + 4.60623136e-19, + 5.10302665e-19, + 5.37095486e-19, + 5.37165591e-19, + 5.10075873e-19, + 4.58990375e-19, + 3.92579809e-19, + 3.19427408e-19, + 2.46754846e-19, + 1.80615293e-19, + 1.27149020e-19, + 8.58026832e-20, + 5.56100490e-20, + 3.52552496e-20, + 2.32366177e-20, + 1.81760266e-20, + 1.76398399e-20, + 2.07214078e-20, + 2.66782218e-20, + 3.59301348e-20, + 4.79535313e-20, + 6.15538262e-20, + 7.59615427e-20, + 9.06585187e-20, + 1.07280567e-19, + 1.23941969e-19, + 1.41789438e-19, + 1.63283229e-19, + 1.93542424e-19, + 2.38155898e-19, + 3.00928079e-19, + 3.86080676e-19, + 4.95454001e-19, + 6.28051594e-19, + 7.73088313e-19, + 9.17635389e-19, + 1.04659862e-18, + 1.14401194e-18, + 1.19613838e-18, + 1.20151215e-18, + 1.16362278e-18, + 1.09164268e-18, + 9.98631761e-19, + 8.99456795e-19, + 8.04297034e-19, + 7.19380362e-19, + 6.47489041e-19, + 5.89873525e-19, + 5.40925921e-19, + 4.97410584e-19, + 4.56471131e-19, + 4.16658215e-19, + 3.76537601e-19, + 3.35352015e-19, + 2.93957893e-19, + 2.53511995e-19, + 2.15748369e-19, + 1.81398395e-19, + 1.51714946e-19, + 1.27775160e-19, + 1.10442752e-19, + 1.00520565e-19, + 9.82528292e-20, + 1.04083463e-19, + 1.18546517e-19, + 1.42786089e-19, + 1.77983378e-19, + 2.25405257e-19, + 2.86182615e-19, + 3.60671679e-19, + 4.47865755e-19, + 5.43429420e-19, + 6.41590773e-19, + 7.35104148e-19, + 8.16529727e-19, + 8.79666645e-19, + 9.21252909e-19, + 9.41628849e-19, + 9.44526855e-19, + 9.34636518e-19, + 9.18033824e-19, + 8.99737937e-19, + 8.82842133e-19, + 8.66510367e-19, + 8.47388128e-19, + 8.27092889e-19, + 8.05502825e-19, + 7.83381220e-19, + 7.59121805e-19, + 7.38876243e-19, + 7.26220278e-19, + 7.22418772e-19, + 7.26808537e-19, + 7.36069916e-19, + 7.48213880e-19, + 7.58164506e-19, + 7.60680300e-19, + 7.48834881e-19, + 7.18989781e-19, + 6.71276589e-19, + 6.06946427e-19, + 5.29400316e-19, + ] + ), + id="Linear skeleton 3, row 81", + ), + ], +) +def test_interpolate_height_profile_images(img: dict, interpolate_conf: dict, target: npt.NDArray, request) -> None: + """Test interpolate_height_profile() with more realistic images.""" + _img = request.getfixturevalue(img) + interpolated_heights = height_profiles.interpolate_height_profile(_img["img"], _img["skeleton"], **interpolate_conf) + np.testing.assert_array_almost_equal(interpolated_heights, target, decimal=18) diff --git a/tests/resources/img/height_profiles/test_plot_height_profiles_Four arrays of different length (one even, two odd).png b/tests/resources/img/height_profiles/test_plot_height_profiles_Four arrays of different length (one even, two odd).png new file mode 100644 index 0000000000000000000000000000000000000000..6ce21cdbbc169640c4e8335926cd37226bf8996f GIT binary patch literal 37622 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ð{)_2k_hWbOx^&5E16?)tHFVqv8_OZsBi?b()wQIgB*v)pbRfk_~a*kTe6r@6q{BN4Qm=w zfe9uc@^A$+hND&e6=sfu=>bCZ`kD58!j`hdU?0WSbzQNHP29V^`%YywYPSmF?-}K3q&Zv+6 z2br(|AOeKI2yYh)O#~5x>4s1(n1AZ|rn13{57ofu0xl&dEUQq?2jGZDM5?KPy za|xT8>2l=A3hq4Ds?w1pV%Km<0CtcFCfM=T3L3_})Rl3d&+e#$ zQybd{$)Agv4)=;joPr^R+Q8%z45yk*SoVz&IBpyNcn&D~Th_m&K%Z^8Gu212eo zA?xL++prxnIbcF$oE&Z=E~0LULkc*a=`iv8-Rj=oweGn^Bj_T7*c7t#zz}6hy`u~V z>AGXKn>VG9jSy;sA#>(3^?hZ?2UBvJzLtx;l>+%-fY-Hf?8F5G24;hIF;wMKj?6Q1 zPQ#M|KcifIfirqffjcA*>pZE&d`AF5PU89ID(h5Jl1Mq&tY8wX&V%5mAbV42nsZgH z-`xwNRZt|U!?{Cbo)zjXvDozGByG*McmaXkwt>hB2-v&4wgbP_Aorrwm!l&>&ZfCj zakABtqy}-#kZas>F&sYa$qez(ar4uCxdzLn0I?K?!QPo^ifHJDcn?$xDqlHI^7J}d z0c^)*Ecw)++^z6bjDa3hWx><(HyMBuc;G67CLQ8=!3hfa`2W?E|Klg0&{?1|V+=s@`{}&gM?sWhF literal 0 HcmV?d00001 diff --git a/tests/resources/img/height_profiles/test_plot_height_profiles_Two arrays of different length (diff in length is even).png b/tests/resources/img/height_profiles/test_plot_height_profiles_Two arrays of different length (diff in length is even).png new file mode 100644 index 0000000000000000000000000000000000000000..93be6eedd18799fb750e535a29c143b83af15aa8 GIT binary patch literal 24813 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 P)UckG@!8BX7jOLw+8zAG literal 0 HcmV?d00001 diff --git a/tests/resources/img/height_profiles/test_plot_height_profiles_Two arrays of different length (diff in length is odd).png b/tests/resources/img/height_profiles/test_plot_height_profiles_Two arrays of different length (diff in length is odd).png new file mode 100644 index 0000000000000000000000000000000000000000..31176eba02e628a128823e2bf34c6be66e7bc8b2 GIT binary patch literal 27743 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 P)UckG@!8BX7jOLw+8zAG literal 0 HcmV?d00001 diff --git a/tests/test_plotting.py b/tests/test_plotting.py index 7ce3f91c6d..449f6b9e33 100644 --- a/tests/test_plotting.py +++ b/tests/test_plotting.py @@ -1,8 +1,12 @@ """Tests for the plotting module.""" +from __future__ import annotations + from importlib import resources from pathlib import Path +import numpy as np +import numpy.typing as npt import pandas as pd import pytest import yaml @@ -10,7 +14,7 @@ import topostats from topostats.entry_point import entry_point -from topostats.plotting import TopoSum, toposum +from topostats.plotting import TopoSum, _pad_array, plot_height_profiles, toposum # pylint: disable=protected-access @@ -192,3 +196,82 @@ def test_plot_violin_multiple_directories(toposum_object_multiple_directories: T """Test plotting Kernel Density Estimate and Histogram for area with multiple images.""" fig, _ = toposum_object_multiple_directories.sns_violinplot() return fig + + +@pytest.mark.mpl_image_compare(baseline_dir="resources/img/height_profiles/") +@pytest.mark.parametrize( + ("height_profile"), + [ + pytest.param(np.asarray([0, 0, 0, 2, 3, 4, 4, 4, 3, 2, 0, 0, 0]), id="Single height profile"), + pytest.param( + [ + np.asarray([0, 0, 0, 2, 3, 4, 4, 4, 3, 2, 0, 0, 0]), + np.asarray([0, 0, 0, 2, 4, 5, 5, 5, 4, 2, 0, 0, 0]), + ], + id="Two arrays of same length", + ), + pytest.param( + [ + np.asarray([0, 0, 0, 2, 3, 4, 4, 4, 3, 2, 0, 0, 0]), + np.asarray([0, 0, 2, 4, 5, 5, 5, 4, 2, 0, 0]), + ], + id="Two arrays of different length (diff in length is even)", + ), + pytest.param( + [ + np.asarray([0, 0, 0, 2, 3, 4, 4, 4, 3, 2, 0, 0, 0]), + np.asarray([0, 0, 2, 4, 5, 5, 5, 4, 2, 0, 0, 0]), + ], + id="Two arrays of different length (diff in length is odd)", + ), + pytest.param( + [ + np.asarray([0, 0, 0, 2, 3, 4, 4, 4, 3, 2, 0, 0, 0]), + np.asarray([0, 0, 2, 4, 5, 5, 5, 4, 2, 0, 0]), + np.asarray([0, 0, 1, 5, 6, 7, 6, 5, 1, 0, 0, 0]), + ], + id="Three arrays of different length (one even, one odd)", + ), + pytest.param( + [ + np.asarray([0, 0, 0, 2, 3, 4, 4, 4, 3, 2, 0, 0, 0]), + np.asarray([0, 0, 2, 4, 5, 5, 5, 4, 2, 0, 0]), + np.asarray([0, 0, 1, 5, 6, 7, 6, 5, 1, 0, 0, 0]), + np.asarray([0, 0, 1, 4, 1, 0, 0]), + ], + id="Four arrays of different length (one even, two odd)", + ), + ], +) +def test_plot_height_profiles(height_profile: list | npt.NDArray) -> None: + """Test plotting of height profiles.""" + fig, _ = plot_height_profiles(height_profile) + return fig + + +@pytest.mark.parametrize( + ("arrays", "max_array_length", "target"), + [ + pytest.param( + np.asarray([1, 1, 1]), + 3, + np.asarray([1, 1, 1]), + id="Array length 3, max array length 3", + ), + pytest.param( + np.asarray([1, 1, 1]), + 5, + np.asarray([0, 1, 1, 1, 0]), + id="Array length 3, max array length 5", + ), + pytest.param( + np.asarray([1, 1, 1]), + 4, + np.asarray([1, 1, 1, 0]), + id="Array length 3, max array length 4", + ), + ], +) +def test_pad_array(arrays: list, max_array_length: int, target: list) -> None: + """Test padding of arrays.""" + np.testing.assert_array_equal(_pad_array(arrays, max_array_length), target) diff --git a/topostats/measure/height_profiles.py b/topostats/measure/height_profiles.py new file mode 100644 index 0000000000..a518a2cf11 --- /dev/null +++ b/topostats/measure/height_profiles.py @@ -0,0 +1,57 @@ +"""Derive height profiles across the images.""" + +from __future__ import annotations + +import logging +import warnings + +import numpy as np +import numpy.typing as npt +from scipy import interpolate + +from topostats.logs.logs import LOGGER_NAME +from topostats.measure import feret + +LOGGER = logging.getLogger(LOGGER_NAME) + +# Handle warnings as exceptions (encountered when gradient of base triangle is zero) +warnings.filterwarnings("error") + + +def interpolate_height_profile(img: npt.NDArray, skeleton: npt.NDArray, **kwargs) -> npt.NDArray: + """ + Interpolate heights along the maximum feret. + + Interpolates the height along the line of the maximum feret using SciPy `scipy.interpolateRegularGridInterpolator + https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.RegularGridInterpolator.html`. Arguments can + be passed using 'kwargs'. + + Parameters + ---------- + img : npt.NDArray + Original image with heights. + skeleton : npt.NDArray + Binary skeleton. + **kwargs : dict + Keyword arguments passed on to scipy.interpolate.RegularGridInterpolator(). + + Returns + ------- + npt.NDArray + Interpolated heights between the calculated feret co-cordinates. + """ + # Extract feret coordinates + feret_stats = feret.get_feret_from_mask(skeleton) + x_coords = np.sort(feret_stats["max_feret_coords"][:, 0]) + y_coords = np.sort(feret_stats["max_feret_coords"][:, 1]) + # Evenly spaced points on x-axis + x_points = np.linspace(np.min(x_coords), np.max(x_coords), np.max(x_coords) - np.min(x_coords) + 1) + # Corresponding y values for each x + y_points = np.interp(x_points, x_coords, y_coords) + # Combine into array + xy_points = np.vstack((x_points, y_points)).T + # Interpolate + interp = interpolate.RegularGridInterpolator( + points=(np.arange(img.shape[0]), np.arange(img.shape[1])), values=img, **kwargs + ) + return interp(xy_points) diff --git a/topostats/plotting.py b/topostats/plotting.py index 6bf51b7116..1e702bae4f 100644 --- a/topostats/plotting.py +++ b/topostats/plotting.py @@ -10,9 +10,10 @@ import sys import yaml import matplotlib.pyplot as plt +import numpy as np +import numpy.typing as npt import pandas as pd import seaborn as sns -import numpy as np from topostats.io import read_yaml, save_pkl, write_yaml, convert_basename_to_relative_paths from topostats.logs.logs import LOGGER_NAME @@ -473,3 +474,64 @@ def run_toposum(args=None) -> None: # Plot statistics toposum(config) + + +def plot_height_profiles(height_profiles: list | npt.NDArray) -> tuple: + """ + Plot height profiles. + + Parameters + ---------- + height_profiles : npt.NDArray + Single height profile (1-D numpy array of heights) or array of height profiles. If the later the profiles plot + will be overlaid. + + Returns + ------- + tuple + Matplotlib.pyplot figure object and Matplotlib.pyplot axes object. + """ + # If we have only one profile put it in a list so we can process + if not isinstance(height_profiles, list): + height_profiles = [height_profiles] + # We have 1-D arrays of different sizes, we need to know the maximum length and then pad shorter ones so that the + # profiles will roughly align in the middle + max_array_length = max(map(len, height_profiles)) + + # Pad shorter height profiles to the length of the longest + padded_height_profiles = [_pad_array(profile, max_array_length) for profile in height_profiles] + fig, ax = plt.subplots(1, 1) + max_y = 0 + for height_profile in padded_height_profiles: + ax.plot(np.arange(max_array_length), height_profile) + max_y = max_y if max(height_profile) < max_y else max(height_profile) + 1 + ax.margins(0.01, 0.1) + return fig, ax + + +def _pad_array(profile: npt.NDArray, max_array_length: int) -> npt.NDArray: + """ + Pad array so that it matches the largest profile and plots are somewhat aligned. + + Centering is done based on the mid-point of longest grain and heights of zero ('0.0') are used in padding. + + Parameters + ---------- + profile : npt.NDArray + 1-D Height profile. + max_array_length : int + The longest height profile across a range of detected grains. + + Returns + ------- + npt.NDArray + Array padded to the same length as max_array_length. + """ + profile_length = profile.shape[0] + array_diff = max_array_length - profile_length + pad = array_diff // 2 + if array_diff % 2 == 0: + left, right = pad, pad + else: + left, right = pad, (pad + 1) + return np.pad(profile, (left, right))