Exemplo n.º 1
0
def get_differences(band):
    with warnings.catch_warnings():
        warnings.simplefilter("ignore")
        RrsR = [
            band.convolve(wavelengths_data, R_rs)
            for wavelengths_data, R_rs in zip(wavelengths, R_rss)
        ]
        RrsL = [
            band.convolve(wavelengths_data, Lw) /
            band.convolve(wavelengths_data, Ed)
            for wavelengths_data, Ed, Lw in zip(wavelengths, Eds, Lws)
        ]

        difference_absolute, difference_relative = zip(*[
            calculate_differences(reflectance_space, radiance_space)
            for reflectance_space, radiance_space in zip(RrsR, RrsL)
        ])

    # Get all differences into one array
    difference_absolute = np.array([x for y in difference_absolute
                                    for x in y]) * 1e6
    difference_relative = np.array([x for y in difference_relative for x in y])
    difference_combined = np.stack([difference_absolute, difference_relative])

    print(band)
    return difference_combined
Exemplo n.º 2
0
print(f"     {band}")

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    RrsR = [
        band.convolve(wavelengths_data, R_rs)
        for wavelengths_data, R_rs in zip(wavelengths, R_rss)
    ]
    RrsL = [
        band.convolve(wavelengths_data, Lw) /
        band.convolve(wavelengths_data, Ed)
        for wavelengths_data, Ed, Lw in zip(wavelengths, Eds, Lws)
    ]

    difference_absolute, difference_relative = zip(*[
        calculate_differences(reflectance_space, radiance_space)
        for reflectance_space, radiance_space in zip(RrsR, RrsL)
    ])

# Convert to 10^-6 sr
difference_absolute = [1e6 * diff for diff in difference_absolute]

short_name = band.label.replace('\n', '_').replace(" ", "_")

boxplot_single(band,
               difference_absolute,
               difference_relative,
               labels,
               saveto=f"results/per_band/OLI_Green.pdf",
               sensor_name="OLI")
wavelengths_central = np.arange(330, 810, 1)
FWHMs = np.arange(6, 66, 1)

# Arrays for storing results - per FWHM, per central wavelength, absolute/relative
medians = np.tile(np.nan, [2, len(FWHMs), len(wavelengths_central)])  # Median
perc5s = np.copy(medians)  # 5th percentile
perc95s = np.copy(medians)  # 95th percentile

for i,center in enumerate(wavelengths_central):
    print(f"Central wavelength: {center} nm")
    for j,fwhm in enumerate(FWHMs):
        boxcar = load_synthetic_sensor(sensor_type, center, fwhm)
        reflectance_space = boxcar.band_average(wavelengths_data, R_rs)
        radiance_space = boxcar.band_average(wavelengths_data, Lw) / boxcar.band_average(wavelengths_data, Ed)

        difference_absolute, difference_relative = calculate_differences(reflectance_space, radiance_space)
        difference_combined = np.array([difference_absolute, difference_relative])[:,0]

        medians[:,j,i] = np.median(difference_combined, axis=1)
        perc5s[:,j,i] = np.percentile(difference_combined, 5, axis=1)
        perc95s[:,j,i] = np.percentile(difference_combined, 95, axis=1)

results_stacked = np.stack([perc5s, medians, perc95s])
results_absrel = np.moveaxis(results_stacked, 1, 0)
results_absrel[0] *= 1e6  # Convert to 10^-6 sr^-1
quantities = ["P5", "Median", "P95"]

for results_combined, absrel in zip(results_absrel, ["abs", "rel"]):
    synthetic_sensor_contourf_combined(wavelengths_central, FWHMs, results_combined, sensor_type=sensor_type, absrel=absrel, label=label, quantities=quantities)

inds = np.searchsorted(FWHMs, [6, 10, 15, 20, 30, 40, 50])
Exemplo n.º 4
0
from sba.bandaveraging import calculate_differences
from sba.io import load_data
from sba.chla import satellite_algorithms, satellite_algorithm_labels, satellite_algorithm_colours
from matplotlib import pyplot as plt

label, wavelengths_data, Ed, Lw, R_rs = load_data()

difference_absolute, difference_relative = zip(*[
    calculate_differences(*func(wavelengths_data, Ed, Lw, R_rs))
    for func in satellite_algorithms
])

fig, ax = plt.subplots(figsize=(7, 1))
bp = ax.boxplot(difference_relative,
                whis=[5, 95],
                showfliers=False,
                labels=satellite_algorithm_labels,
                patch_artist=True)
for patch, colour in zip(bp["boxes"], satellite_algorithm_colours):
    patch.set_facecolor(colour)
ax.set_ylabel("$\Delta$ Chl-a [%]")
ax.grid(ls="--")
ax.axhline(0, ls="--", c="k")
ax.locator_params(axis="y", nbins=5)
ax.set_title(f"Convolution error in retrieval algorithms, {label} data")

ax2 = ax.twinx()
ax2.set_ylabel("$\Delta$ TSM [%]")
ax2.boxplot(difference_relative,
            whis=[5, 95],
            showfliers=False,
from sba.bandaveraging import calculate_differences
from sba.io import load_data_file
from sba.chla import HydroColor
from matplotlib import pyplot as plt
from pathlib import Path

data_files = Path("data").glob("*processed.tab")
labels, wavelengths, Eds, Lws, R_rss = zip(
    *[load_data_file(file) for file in data_files])

difference_absolute, difference_relative = zip(*[
    calculate_differences(*HydroColor(wavelengths_data, Ed, Lw, R_rs))
    for wavelengths_data, Ed, Lw, R_rs in zip(wavelengths, Eds, Lws, R_rss)
])

for difference, absrel in zip([difference_absolute, difference_relative],
                              ["abs", "rel"]):
    unit = "NTU" if absrel == "abs" else "%"

    plt.figure(figsize=(7, 2.5), tight_layout=True)
    bp = plt.boxplot(difference,
                     whis=[5, 95],
                     showfliers=False,
                     labels=labels,
                     patch_artist=True,
                     medianprops={"c": "k"})
    for patch in bp["boxes"]:
        patch.set_facecolor("xkcd:tan")
    plt.ylabel(f"$\Delta$ Turbidity [{unit}]")
    plt.grid(ls="--")
    plt.axhline(0, ls="--", c="k")