From bfdbc65157fbafb4825a5347480d1c48b2a454e7 Mon Sep 17 00:00:00 2001 From: janezlapajne Date: Mon, 2 Sep 2024 10:27:00 +0200 Subject: [PATCH 1/4] docs: Update funding configuration file docs: funding update --- .github/FUNDING.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 6063601..3685788 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1 +1,5 @@ -github: [janezlapajne] +github: + - janezlapajne + - siapy +ko_fi: janezlapajne +custom: buymeacoffee.com/janezlapajne From 26d7f6818b8136bd241214992d73e15343321a10 Mon Sep 17 00:00:00 2001 From: janezlapajne Date: Mon, 2 Sep 2024 10:31:52 +0200 Subject: [PATCH 2/4] chore: Rename filename in docs; license -> permit --- docs/{license.md => permit.md} | 0 mkdocs.yml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename docs/{license.md => permit.md} (100%) diff --git a/docs/license.md b/docs/permit.md similarity index 100% rename from docs/license.md rename to docs/permit.md diff --git a/mkdocs.yml b/mkdocs.yml index d0cb926..7c9d150 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -98,7 +98,7 @@ nav: - Plots: api/utils/plots.md - Contributing: contributing.md - Release Notes: changelog.md - - License: license.md + - License: permit.md markdown_extensions: # Python Markdown From 39cf7a243171557c3d0c449420d8a2ce4797a88a Mon Sep 17 00:00:00 2001 From: janezlapajne Date: Tue, 3 Sep 2024 17:33:04 +0200 Subject: [PATCH 3/4] perf: Refactor code to improve performance in test_to_signatures_perf --- siapy/entities/signatures.py | 2 +- tests/entities/test_entities_images.py | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/siapy/entities/signatures.py b/siapy/entities/signatures.py index ccbe606..a8a88a3 100644 --- a/siapy/entities/signatures.py +++ b/siapy/entities/signatures.py @@ -76,7 +76,7 @@ def _create(cls, pixels: Pixels, signals: Signals) -> "Signatures": def from_array_and_pixels(cls, image: np.ndarray, pixels: Pixels) -> "Signatures": u = pixels.u() v = pixels.v() - signals_list = list(image[v, u, :]) + signals_list = image[v, u, :] signals = Signals(pd.DataFrame(signals_list)) return cls._create(pixels, signals) diff --git a/tests/entities/test_entities_images.py b/tests/entities/test_entities_images.py index 44a1703..1796dfb 100644 --- a/tests/entities/test_entities_images.py +++ b/tests/entities/test_entities_images.py @@ -7,6 +7,7 @@ from siapy.entities import Pixels, Shape, SpectralImage from siapy.entities.images import GeometricShapes, _parse_description +from siapy.utils.plots import pixels_select_lasso def test_envi_open(configs): @@ -180,6 +181,14 @@ def test_to_signatures(spectral_images): assert np.array_equal(signatures.pixels.df.iloc[2].to_numpy(), iterable[2]) +@pytest.mark.manual +def test_to_signatures_perf(spectral_images): + spectral_image_vnir = spectral_images.vnir + selected_areas_vnir = pixels_select_lasso(spectral_image_vnir) + spectral_image_vnir.to_signatures(selected_areas_vnir[0]).signals.to_numpy() + pass + + def test_mean(spectral_images): spectral_image_vnir = spectral_images.vnir From f892a0edd998ef655596794a4650be6cad4b470f Mon Sep 17 00:00:00 2001 From: janezlapajne Date: Tue, 3 Sep 2024 18:14:01 +0200 Subject: [PATCH 4/4] chore: add method to_subarray for image extraction --- siapy/entities/images.py | 17 +++++++++++++++++ tests/entities/test_entities_images.py | 15 +++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/siapy/entities/images.py b/siapy/entities/images.py index 8a0147f..173256f 100644 --- a/siapy/entities/images.py +++ b/siapy/entities/images.py @@ -220,6 +220,23 @@ def to_signatures(self, pixels: "Pixels") -> Signatures: signatures = Signatures.from_array_and_pixels(image_arr, pixels) return signatures + def to_subarray(self, pixels: "Pixels") -> np.ndarray: + image_arr = self.to_numpy() + u_max = pixels.u().max() + u_min = pixels.u().min() + v_max = pixels.v().max() + v_min = pixels.v().min() + # create new image + image_arr_area = np.nan * np.ones( + (v_max - v_min + 1, u_max - u_min + 1, self.bands) + ) + # convert original coordinates to coordinates for new image + v_norm = pixels.v() - v_min + u_norm = pixels.u() - u_min + # write values from original image to new image + image_arr_area[v_norm, u_norm, :] = image_arr[pixels.v(), pixels.u(), :] + return image_arr_area + def mean(self, axis: int | tuple[int] | None = None) -> float | np.ndarray: image_arr = self.to_numpy() return np.nanmean(image_arr, axis=axis) diff --git a/tests/entities/test_entities_images.py b/tests/entities/test_entities_images.py index 1796dfb..cb342aa 100644 --- a/tests/entities/test_entities_images.py +++ b/tests/entities/test_entities_images.py @@ -189,6 +189,21 @@ def test_to_signatures_perf(spectral_images): pass +def test_to_subarray(spectral_images): + spectral_image_vnir = spectral_images.vnir + iterable = [(1, 2), (3, 4), (2, 4)] + pixels = Pixels.from_iterable(iterable) + subarray = spectral_image_vnir.to_subarray(pixels) + expected_subarray = np.full((3, 3, spectral_image_vnir.bands), np.nan) + image_array = spectral_image_vnir.to_numpy() + expected_subarray[0, 0, :] = image_array[2, 1, :] + expected_subarray[2, 2, :] = image_array[4, 3, :] + expected_subarray[2, 1, :] = image_array[4, 2, :] + + assert expected_subarray.shape == (3, 3, spectral_image_vnir.bands) + assert np.array_equal(subarray, expected_subarray, equal_nan=True) + + def test_mean(spectral_images): spectral_image_vnir = spectral_images.vnir