Je programme un algorithme jpeg artisanal. Cependant, l'étape de quantification semble être problématique: Voici l'image que je suis en train de coder: Lena.pngArtefact de compression Jpeg (pixel vert)
Et voici le résultat juste après l'étape de quantification (+ décodage mais sans la substance d'encodage Huffman): post quantization result
maintenant mon code pour cette étape:
def quantification(transformee) :
matrice=np.array([(16 , 11 , 10 , 16 , 24 , 40 , 51 , 61),(12 , 12 , 14 , 19 , 26 , 58 , 60 , 55),(14 , 13 , 16 , 24 , 40 , 57 , 69 , 56),(14 , 17 , 22 , 29 , 51 , 87 , 80 , 62),(18 , 22 , 37 , 56 , 68 , 109 , 103 , 77),(24 , 35 , 55 , 64 , 81 , 104 , 113 , 92),(49 , 64 , 78 , 87 , 103 , 121 , 120 , 101),(72 , 92 , 95 , 98 , 112 , 100 , 103 , 99)],dtype=float)
quanti=[]
for i in transformee :
k=i/matrice
quanti+=[np.around(k)]
return quanti
def dequantification(quanti) :
matrice=np.array([(16 , 11 , 10 , 16 , 24 , 40 , 51 , 61),(12 , 12 , 14 , 19 , 26 , 58 , 60 , 55),(14 , 13 , 16 , 24 , 40 , 57 , 69 , 56),(14 , 17 , 22 , 29 , 51 , 87 , 80 , 62),(18 , 22 , 37 , 56 , 68 , 109 , 103 , 77),(24 , 35 , 55 , 64 , 81 , 104 , 113 , 92),(49 , 64 , 78 , 87 , 103 , 121 , 120 , 101),(72 , 92 , 95 , 98 , 112 , 100 , 103 , 99)],dtype=float)
retour_transformee=[]
for k in quanti :
temp=np.zeros((8,8),dtype=float)
for i in range(8) :
for j in range(8) :
temp[i,j]=matrice[i,j]*k[i,j]
retour_transformee.append(temp)
return retour_transformee
TRANSFORMEE est une liste de 8 * 8 matrice (TCD est déjà utilisé). La matrice de quantification est celle donnée dans wikipedia (JPEG)
Désolé pour la partie française dans l'algorithme
Merci pour le conseil, j'ai corrigé mon algorithme. Cependant, j'ai fait un test sur le résultat IDCT: tous les coefficients sont compris entre 0 et 255 ([[-128: +127]] pour centrer les valeurs sur 0). Pareil sur la photo finale. – Merlu