Skip to content

Spectral Images

siapy.entities.images.spimage

T module-attribute

T = TypeVar('T', bound=ImageBase)

SpectralImage dataclass

SpectralImage(
    image: T, geometric_shapes: list[Shape] | None = None
)

Bases: Generic[T]

Source code in siapy/entities/images/spimage.py
31
32
33
34
35
36
37
def __init__(
    self,
    image: T,
    geometric_shapes: list["Shape"] | None = None,
):
    self._image = image
    self._geometric_shapes = GeometricShapes(self, geometric_shapes)

image property

image: T

geometric_shapes property

geometric_shapes: GeometricShapes

filepath property

filepath: Path

metadata property

metadata: dict[str, Any]

shape property

shape: tuple[int, int, int]

width property

width: int

height property

height: int

bands property

bands: int

default_bands property

default_bands: list[int]

wavelengths property

wavelengths: list[float]

camera_id property

camera_id: str

spy_open classmethod

spy_open(
    *,
    header_path: str | Path,
    image_path: str | Path | None = None,
) -> SpectralImage[SpectralLibImage]
Source code in siapy/entities/images/spimage.py
57
58
59
60
61
62
@classmethod
def spy_open(
    cls, *, header_path: str | Path, image_path: str | Path | None = None
) -> "SpectralImage[SpectralLibImage]":
    image = SpectralLibImage.open(header_path=header_path, image_path=image_path)
    return SpectralImage(image)

rasterio_open classmethod

rasterio_open(
    filepath: str | Path,
) -> SpectralImage[RasterioLibImage]
Source code in siapy/entities/images/spimage.py
64
65
66
67
@classmethod
def rasterio_open(cls, filepath: str | Path) -> "SpectralImage[RasterioLibImage]":
    image = RasterioLibImage.open(filepath)
    return SpectralImage(image)

from_numpy classmethod

from_numpy(
    array: NDArray[floating[Any]],
) -> SpectralImage[MockImage]
Source code in siapy/entities/images/spimage.py
69
70
71
72
@classmethod
def from_numpy(cls, array: NDArray[np.floating[Any]]) -> "SpectralImage[MockImage]":
    image = MockImage.open(array)
    return SpectralImage(image)

to_display

to_display(equalize: bool = True) -> Image
Source code in siapy/entities/images/spimage.py
118
119
def to_display(self, equalize: bool = True) -> Image.Image:
    return self.image.to_display(equalize)

to_numpy

to_numpy(
    nan_value: float | None = None,
) -> NDArray[floating[Any]]
Source code in siapy/entities/images/spimage.py
121
122
def to_numpy(self, nan_value: float | None = None) -> NDArray[np.floating[Any]]:
    return self.image.to_numpy(nan_value)

to_xarray

to_xarray() -> XarrayType
Source code in siapy/entities/images/spimage.py
124
125
def to_xarray(self) -> "XarrayType":
    return self.image.to_xarray()

to_signatures

to_signatures(
    pixels: Pixels | DataFrame | Iterable[CoordinateInput],
) -> Signatures
Source code in siapy/entities/images/spimage.py
127
128
129
130
131
def to_signatures(self, pixels: Pixels | pd.DataFrame | Iterable[CoordinateInput]) -> Signatures:
    pixels = validate_pixel_input(pixels)
    image_arr = self.to_numpy()
    signatures = Signatures.from_array_and_pixels(image_arr, pixels)
    return signatures

to_subarray

to_subarray(
    pixels: Pixels | DataFrame | Iterable[CoordinateInput],
) -> NDArray[floating[Any]]
Source code in siapy/entities/images/spimage.py
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
def to_subarray(self, pixels: Pixels | pd.DataFrame | Iterable[CoordinateInput]) -> NDArray[np.floating[Any]]:
    pixels = validate_pixel_input(pixels)
    image_arr = self.to_numpy()
    x_max = pixels.x().max()
    x_min = pixels.x().min()
    y_max = pixels.y().max()
    y_min = pixels.y().min()
    # create new image
    image_arr_area = np.nan * np.ones((int(y_max - y_min + 1), int(x_max - x_min + 1), self.bands))
    # convert original coordinates to coordinates for new image
    y_norm = pixels.y() - y_min
    x_norm = pixels.x() - x_min
    # write values from original image to new image
    image_arr_area[y_norm, x_norm, :] = image_arr[pixels.y(), pixels.x(), :]
    return image_arr_area

average_intensity

average_intensity(
    axis: int
    | tuple[int, ...]
    | Sequence[int]
    | None = None,
) -> float | NDArray[floating[Any]]
Source code in siapy/entities/images/spimage.py
149
150
151
152
153
def average_intensity(
    self, axis: int | tuple[int, ...] | Sequence[int] | None = None
) -> float | NDArray[np.floating[Any]]:
    image_arr = self.to_numpy()
    return np.nanmean(image_arr, axis=axis)