Verified Commit 4ec44939 authored by Bruno Petrus's avatar Bruno Petrus
Browse files

fix: Edge cases in filters.

Division by zero in linear_stretch.
Negative numbers in logarithmic stretch.
parent 3d8b5a24
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
import numpy as np
from numpy.typing import ArrayLike


# Expects an array with dtype=float
def linear_stretch(array: ArrayLike) -> ArrayLike:
    frames, height, width = array.shape
    max_val, min_val = np.max(array), np.min(array)
    if max_val - min_val == 0:
        print("Error: Cannot apply linear stretch filter on constant images, "
              "which would cause a division by 0 error! Ignoring filter.")
        return array
    factor = 1.0 / (max_val - min_val)
    for n in range(frames):
        array[n] = array[n] - min_val
@@ -24,4 +29,7 @@ def linear_contrast(array: ArrayLike, factor: float) -> ArrayLike:


def logarithm_stretch(array: ArrayLike, factor=10.0) -> ArrayLike:
    if array.min() < 0:
        # Shifting if the array contains negative numbers.
        array += abs(array.min())
    return factor * np.log(array + 1.0)