Source code for torchgeo.datasets.airphen

# Copyright (c) TorchGeo Contributors. All rights reserved.
# Licensed under the MIT License.

"""Airphen dataset."""

import matplotlib.pyplot as plt
from matplotlib.figure import Figure

from .errors import RGBBandsMissingError
from .geo import RasterDataset
from .utils import Sample, percentile_normalization


[docs] class Airphen(RasterDataset): """Airphen dataset. `Airphen <https://ideol.sakura.ne.jp/img/20170123_HiphenAirphenKeyfeatures.pdf>`__ is a multispectral scientific camera developed by agronomists and photonics engineers at `Hiphen <https://www.hiphen-plant.com/>`_ to match plant measurements needs and constraints. Main characteristics: * 6 Synchronized global shutter sensors * Sensor resolution 1280 x 960 pixels * Data format (.tiff, 12 bit) * SD card storage * Metadata information: Exif and XMP * Internal or external GPS * Synchronization with different sensors (TIR, RGB, others) If you use this dataset in your research, please cite the following paper: * https://doi.org/10.34133/2021/9892647 .. versionadded:: 0.6 """ # Each camera measures a custom set of spectral bands chosen at purchase time. # Hiphen offers 8 bands to choose from, sorted from short to long wavelength. all_bands = ('B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8') rgb_bands = ('B4', 'B3', 'B1')
[docs] def plot( self, sample: Sample, show_titles: bool = True, suptitle: str | None = None ) -> Figure: """Plot a sample from the dataset. Args: sample: a sample returned by :meth:`RasterDataset.__getitem__` show_titles: flag indicating whether to show titles above each panel suptitle: optional string to use as a suptitle Returns: a matplotlib Figure with the rendered sample Raises: RGBBandsMissingError: If *bands* does not include all RGB bands. """ rgb_indices = [] for band in self.rgb_bands: if band in self.bands: rgb_indices.append(self.bands.index(band)) else: raise RGBBandsMissingError() image = sample['image'][rgb_indices].permute(1, 2, 0).float() image = percentile_normalization(image, axis=(0, 1)) fig, ax = plt.subplots(1, 1, figsize=(4, 4)) ax.imshow(image) ax.axis('off') if show_titles: ax.set_title('Image') if suptitle is not None: plt.suptitle(suptitle) return fig