1.3 ALGORITHME DE LLOYD-MAX
Voici l'algorithme de Lloyd-Max, un algorithme qui permet de construire le quantifieur scalaire optimal.
Le quantifieur optimal est celui qui minimise la distorsion.
Le quantifieur scalaire uniforme est optimal si l'amplitude de la source suit une distribution uniforme. Les signaux audio ou image ne peuvent cependant être considérés comme des sources uniformes, ce qui a conduit à la recherche d'algorithmes permettant de générer un quantifieur optimal, pour tous types de sources.
Ce quantifieur est donné par l'algorithme de Lloyd-Max, basé sur les conditions d'optimalités définies par Lloyd en 1957.
Algorithme de Lloy-Max:
function d = LM(img, N)
q = max(img)/N;
d = [0:q:N*q];
r = zeros(d);
maxiter = 100;
eps = 1E-6;
img_prec = quantification(img, N);
img_cur = zeros(img);
for iter = 1 : maxiter
//calcul de r
for i = 1:N
indices = find( img >= d(i) & img <= d(i+1) );
r(i) = mean( img(indices) );
end;
//calcul de d
d(2:N) = (r(1:N-1) + r(2:N))/2;
img_cur = apply(img, d);
if eqm(img_prec, img_cur) < eps then
//printf("arret a l'iteration %d\n", iter);
break;
end;
img_prec = img_cur;
end;
endfunction;
function imgQ = apply(img, d)
imgQ = zeros(img);
for i = 1:(length(d)-1)
indices = find( img >= d(i) & img <= d(i+1) );
imgQ(indices) = (d(i)+d(i+1))/2;
end;
endfunction;