ecopulse / src /metrics.py
acibZ's picture
Deploy EcoPulse
43abac3
Raw
History Blame Contribute Delete
1.54 kB
import numpy as np
def calculate_iou(pred_mask, true_mask):
"""
Calculate Intersection over Union (IoU) for binary masks.
"""
intersection = np.logical_and(pred_mask, true_mask).sum()
union = np.logical_or(pred_mask, true_mask).sum()
if union == 0:
return 1.0 # If both are empty, perfect match
return intersection / union
def calculate_dice(pred_mask, true_mask):
"""
Calculate Dice Coefficient for binary masks.
"""
intersection = np.logical_and(pred_mask, true_mask).sum()
return (2. * intersection) / (pred_mask.sum() + true_mask.sum() + 1e-6)
def calculate_accuracy(preds, labels):
"""
Calculate simple classification accuracy.
"""
correct = (preds == labels).sum().item()
total = labels.size(0)
return correct / total
def calculate_ndvi(nir_band, red_band):
"""
Calculate NDVI given NIR and Red bands.
NDVI = (NIR - Red) / (NIR + Red)
"""
nir = nir_band.astype(float)
red = red_band.astype(float)
denominator = (nir + red)
# Avoid division by zero
denominator[denominator == 0] = 1e-6
ndvi = (nir - red) / denominator
return ndvi
def ndvi_correlation(predicted_greenery_percentages, true_mean_ndvis):
"""
Calculate Pearson correlation coefficient between predicted greenery
percentage and true mean NDVI across a set of images.
"""
if len(predicted_greenery_percentages) < 2:
return 0.0
return np.corrcoef(predicted_greenery_percentages, true_mean_ndvis)[0, 1]