Shortcuts

Source code for torchgeo.transforms.indices

# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.

"""TorchGeo indices transforms.

For more information about indices see the following references:
- https://www.indexdatabase.de/db/i.php
- https://github.com/davemlz/awesome-spectral-indices
"""

from typing import Dict

import torch
from torch import Tensor
from torch.nn.modules import Module

# https://github.com/pytorch/pytorch/issues/60979
# https://github.com/pytorch/pytorch/pull/61045
Module.__module__ = "torch.nn"


_EPSILON = 1e-10


class AppendNormalizedDifferenceIndex(Module):
    """Append normalized difference index as channel to image tensor.

    .. versionadded:: 0.2
    """

[docs] def __init__(self, index_a: int, index_b: int) -> None: """Initialize a new transform instance. Args: index_a: reference band channel index index_b: difference band channel index """ super().__init__() self.dim = -3 self.index_a = index_a self.index_b = index_b
def _compute_index(self, band_a: Tensor, band_b: Tensor) -> Tensor: """Compute normalized difference index. Args: band_a: reference band tensor band_b: difference band tensor Returns: the index """ return (band_a - band_b) / ((band_a + band_b) + _EPSILON)
[docs] def forward(self, sample: Dict[str, Tensor]) -> Dict[str, Tensor]: """Compute and append normalized difference index to image. Args: sample: a sample or batch dict Returns: the transformed sample """ if "image" in sample: index = self._compute_index( band_a=sample["image"][..., self.index_a, :, :], band_b=sample["image"][..., self.index_b, :, :], ) index = index.unsqueeze(self.dim) sample["image"] = torch.cat([sample["image"], index], dim=self.dim) return sample
class AppendNBR(AppendNormalizedDifferenceIndex): """Normalized Burn Ratio (NBR). If you use this index in your research, please cite the following paper: * https://www.sciencebase.gov/catalog/item/4f4e4b20e4b07f02db6abb36 .. versionadded:: 0.2.0 """
[docs] def __init__(self, index_nir: int, index_swir: int) -> None: """Initialize a new transform instance. Args: index_nir: index of the Near Infrared (NIR) band in the image index_swir: index of the Short-wave Infrared (SWIR) band in the image """ super().__init__(index_a=index_nir, index_b=index_swir)
class AppendNDBI(AppendNormalizedDifferenceIndex): """Normalized Difference Built-up Index (NDBI). If you use this index in your research, please cite the following paper: * https://doi.org/10.1080/01431160304987 """
[docs] def __init__(self, index_swir: int, index_nir: int) -> None: """Initialize a new transform instance. Args: index_swir: index of the Short-wave Infrared (SWIR) band in the image index_nir: index of the Near Infrared (NIR) band in the image """ super().__init__(index_a=index_swir, index_b=index_nir)
class AppendNDSI(AppendNormalizedDifferenceIndex): """Normalized Difference Snow Index (NDSI). If you use this index in your research, please cite the following paper: * https://doi.org/10.1109/IGARSS.1994.399618 """
[docs] def __init__(self, index_green: int, index_swir: int) -> None: """Initialize a new transform instance. Args: index_green: index of the Green band in the image index_swir: index of the Short-wave Infrared (SWIR) band in the image """ super().__init__(index_a=index_green, index_b=index_swir)
class AppendNDVI(AppendNormalizedDifferenceIndex): """Normalized Difference Vegetation Index (NDVI). If you use this index in your research, please cite the following paper: * https://doi.org/10.1016/0034-4257(79)90013-0 """
[docs] def __init__(self, index_red: int, index_nir: int) -> None: """Initialize a new transform instance. Args: index_red: index of the Red band in the image index_nir: index of the Near Infrared (NIR) band in the image """ super().__init__(index_a=index_red, index_b=index_nir)
class AppendNDWI(AppendNormalizedDifferenceIndex): """Normalized Difference Water Index (NDWI). If you use this index in your research, please cite the following paper: * https://doi.org/10.1080/01431169608948714 """
[docs] def __init__(self, index_green: int, index_nir: int) -> None: """Initialize a new transform instance. Args: index_green: index of the Green band in the image index_nir: index of the Near Infrared (NIR) band in the image """ super().__init__(index_a=index_green, index_b=index_nir)

© Copyright 2021, Microsoft Corporation. Revision af389759.

Built with Sphinx using a theme provided by Read the Docs.
Read the Docs v: v0.2.1
Versions
latest
stable
v0.2.1
v0.2.0
v0.1.1
v0.1.0
Downloads
On Read the Docs
Project Home
Builds

Free document hosting provided by Read the Docs.

Docs

Access comprehensive developer documentation for PyTorch

View Docs

Tutorials

Get in-depth tutorials for beginners and advanced developers

View Tutorials

Resources

Find development resources and get your questions answered

View Resources