From 10f8afd382f7f9395ed8813c8bbe69a8ec08172e Mon Sep 17 00:00:00 2001 From: Grzegorz Bokota Date: Tue, 11 Jul 2023 11:54:27 +0200 Subject: [PATCH 1/3] fix if there are double same axis but one is dummy --- package/PartSegImage/image_reader.py | 22 +++++++++++++++++++ .../test_PartSegImage/test_image_reader.py | 7 ++++++ 2 files changed, 29 insertions(+) diff --git a/package/PartSegImage/image_reader.py b/package/PartSegImage/image_reader.py index bed37b857..11f182d38 100644 --- a/package/PartSegImage/image_reader.py +++ b/package/PartSegImage/image_reader.py @@ -104,6 +104,26 @@ def read_image( instance.set_default_spacing(default_spacing) return instance.read(image_path, mask_path) + @staticmethod + def _reduce_obsolete_dummy_axes(array, axes) -> typing.Tuple[np.ndarray, str]: + """ + If there are duplicates in axes string then remove dimensions of size one + + :return: reduced array and axes + """ + if len(axes) == len(set(axes)): + return array, axes + + ax_li = [] + shape_li = [] + for dim, ax in zip(array.shape, axes): + if dim != 1: + ax_li.append(ax) + shape_li.append(dim) + axes = "".join(ax_li) + array = np.reshape(array, shape_li) + return array, axes + @classmethod def update_array_shape(cls, array: np.ndarray, axes: str): """ @@ -112,6 +132,8 @@ def update_array_shape(cls, array: np.ndarray, axes: str): :param array: array to reorder :param axes: current order of array axes as string like "TZYXC" """ + axes, array = cls._reduce_obsolete_dummy_axes(array, axes) + try: final_mapping_dict = {letter: i for i, letter in enumerate(cls.return_order())} for let1, let2 in [("Z", "I"), ("Z", "Q"), ("C", "S")]: diff --git a/package/tests/test_PartSegImage/test_image_reader.py b/package/tests/test_PartSegImage/test_image_reader.py index ede7fb859..e95dd94cb 100644 --- a/package/tests/test_PartSegImage/test_image_reader.py +++ b/package/tests/test_PartSegImage/test_image_reader.py @@ -129,6 +129,13 @@ def test_obsep_deconv_read(self, data_test_dir, tmp_path): image = GenericImageReader.read_image(tmp_path / "test.obsep") assert image.channels == 3 + def test_double_axes_in_dim_read(self, data_test_dir): + image = GenericImageReader.read_image(os.path.join(data_test_dir, "double_q_in_axes.tif")) + assert image.layers == 360 + assert image.channels == 1 + assert image.stack_pos == 1 + assert image.plane_shape == (360, 32) + class CustomImage(Image): axis_order = "TCXYZ" From 3db163baf638419d06bd81d2dffdeee439b96d8f Mon Sep 17 00:00:00 2001 From: Grzegorz Bokota Date: Tue, 11 Jul 2023 12:06:14 +0200 Subject: [PATCH 2/3] fix dummy bug --- package/PartSegImage/image_reader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/PartSegImage/image_reader.py b/package/PartSegImage/image_reader.py index 11f182d38..5a62a69d3 100644 --- a/package/PartSegImage/image_reader.py +++ b/package/PartSegImage/image_reader.py @@ -132,7 +132,7 @@ def update_array_shape(cls, array: np.ndarray, axes: str): :param array: array to reorder :param axes: current order of array axes as string like "TZYXC" """ - axes, array = cls._reduce_obsolete_dummy_axes(array, axes) + array, axes = cls._reduce_obsolete_dummy_axes(array, axes) try: final_mapping_dict = {letter: i for i, letter in enumerate(cls.return_order())} From 60c79ac3d98a508b9a01f1ab6c0040c0107d7ce6 Mon Sep 17 00:00:00 2001 From: Grzegorz Bokota Date: Tue, 11 Jul 2023 12:34:08 +0200 Subject: [PATCH 3/3] empty commit