import math import numpy as np import matplotlib.image as mpimg import matplotlib.pyplot as plt import random import copy #Exercice 1 : Pour une image X de taille n × n implémentons l’algorithme direct pour les 2 transformées # multi-´echelles en utilisant le produit tensoriel. #moyennes def downsizing(x): res = [] for i in range(0,len(x),2): res.append((x[i]+x[i+1])/2) return res #demi-différences def upsizing(x): res = [] for i in range(0,len(x),2): res.append((x[i]-x[i+1])/2) return res #haar Directe (vecteur 2D) def haarDir2D(x): res = copy.deepcopy(x) n = len(x) while(n>1): #application pour les lignes for i in range(n): b = [res[i][j] for j in range (n)] ligne = downsizing(b)+upsizing(b) for j in range(n): res[i][j] = ligne[j] #application pour les colonnes for i in range (n): coli = [res[j][i] for j in range(n)] resColi =downsizing(coli) + upsizing(coli) #on insert le résultat dans le res for j in range(n): res[j][i] = resColi[j] n = int(n/2) # on divise par la longueur return res #--------------------------------------------------------------------------------------------------------- # Exercice 2 : Pour une image X de taille n × n implémentons l’algorithme inverse pour les 2 transformées # multi-´echelles en utilisant le produit tensoriel. #x = (X/2 : moyennes + X/2 : demi-mesures); res = calculs de l'inverse def auxInv(x): res = [] n = len(x) m = int(n/2) for i in range(m): res.append(x[i]+x[i+m]) res.append(x[i]-x[i+m]) return res #haar Inverse (vecteur 2D) def haarInv2D(x): res = copy.deepcopy(x) n = 2 while (n<=len(x)): #colonnes b=[] for i in range(n):#parcours des colonnes b = [res[j][i] for j in range(n)] resB = auxInv(b) #maj colonnes for j in range(n): res[j][i] = resB[j] #lignes for i in range (n):#parcours des lignes b = [res[i][j] for j in range(n)] resB=auxInv(b) #maj lignes for j in range(n): res[i][j] = resB[j] n = int(n*2)#multiplication par 2 return res #---------------------------------------------------------------------------------------------------------