"""Shared utility for computing sky-colour histograms from a panorama image.""" import numpy as np import torch def compute_sky_histogram(sky_image_np: np.ndarray, hist_range: tuple = (-1, 1), bins: int = 100, skip_bins: int = 10) -> np.ndarray: """Compute a normalised colour histogram from a masked sky image. Parameters ---------- sky_image_np : np.ndarray Sky image array of shape ``(C, H, W)`` (single image, no batch dim). Pixel values should lie within *hist_range*. hist_range : tuple ``(min, max)`` passed to ``np.histogram``. bins : int Number of histogram bins. skip_bins : int Number of leading bins to discard (removes near-zero / masked pixels). Returns ------- np.ndarray Concatenated normalised histogram of shape ``((bins - skip_bins) * C,)``. """ channel_histograms = [] for channel in sky_image_np: histo = np.histogram(channel.flatten(), bins=bins, range=hist_range)[0] histo = histo[skip_bins:] if histo.sum() != 0: histo = histo / histo.sum() channel_histograms.append(histo) return np.concatenate(channel_histograms)