Create algo.py
This commit is contained in:
40
SAFT/algo.py
Normal file
40
SAFT/algo.py
Normal file
@ -0,0 +1,40 @@
|
||||
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
|
Reference in New Issue
Block a user