import numpy as np from math import sqrt, pow def saft_algorithm(image, h, wid, hig, win, A, B): """ Implémentation de l'algorithme SAFT pour corriger les images. :param image: np.array, l'image à traiter sous forme de tableau 2D numpy. :param h: int, hauteur des données sum_prod. :param wid: int, largeur de l'image. :param hig: int, hauteur de l'image. :param win: int, taille de la fenêtre de moyenne. :param A: float, coefficient de correction. :param B: float, coefficient de correction. :return: np.array, l'image corrigée. """ # Initialisation du vecteur sum_prod sum_prod = np.zeros(h, dtype=np.int32) k = win // 2 # Parcourir les colonnes principales for j in range(k, wid - k): # Parcourir les lignes adjacentes à la colonne en cours for j1 in range(j - k, j + k): distx = abs(j - j1) # Parcourir les lignes de pixels for i1 in range(hig): dif_f = sqrt(pow(i1 * A, 2) + pow(distx * B, 2)) - (i1 * A) dif_i = int(dif_f / A) if 0 <= i1 - dif_i < hig: sum_prod[i1] = (image[j1, i1 - dif_i] - 128 * (image[j, i1] - 128) + sum_prod[i1]) # Normalisation des résultats et mise à jour de l'image for ix in range(hig): sum_prod[ix] = int(sum_prod[ix] / win) image[j, ix] = np.clip(sum_prod[ix] + 128, 0, 255).astype(np.uint8) return image