TP MCID

3. Étude du prédicteur

3.1 Voisin de gauche – P(X)=A

3.1.1. Méthodologie

Nous appliquons un scan raster : balayage ligne par ligne, de gauche à droite. La condition initiale en bord gauche est ĤatX(i,1) = X(i,1) pour chaque ligne i, garantissant une référence sans erreur. Pour chaque pixel j ≥ 2 :

3.1.2. Définitions clés

Entropie : mesure en bits de l’incertitude moyenne d’un signal. Pour une variable discrète X prenant les valeurs xk avec probabilité pk, \[ H(X) = - \sum_k p_k \log_2 p_k. \]

MSE (Mean Squared Error) : \(\frac{1}{N}\sum_{i,j} \bigl(X(i,j)-ĤatX(i,j)\bigr)^2\). PSNR (Peak Signal-to-Noise Ratio) : \(10\log_{10}\bigl(\tfrac{L^2}{\mathrm{MSE}}\bigr)\) où L=255.

3.1.3. Extrait MATLAB

      
      
  % 3.1 Voisin gauche
  I   = double(imread('Boats_lumi.bmp'));
  [m,n] = size(I);
  Ir  = zeros(m,n); Ep = zeros(m,n);
  Ir(:,1) = I(:,1);
  
  for i=1:m
    for j=2:n
      Xp      = Ir(i,j-1);
      Ep(i,j) = I(i,j) - Xp;
      Ir(i,j) = Xp + Ep(i,j);
    end
  end
  
  assert(isequal(I,Ir), 'Reconstruction échoue');
  bins = -255:255;
  h    = histcounts(Ep(:), [bins-.5 bins(end)+.5]);
  p    = h/sum(h); p(p==0)=[]; H = -sum(p.*log2(p));
  fprintf('Entropie erreur P(X)=A: %.3f bits\n', H);
      
    

3.1.4. Résultats

Originale, Reconstruction, Erreur
Fig. 3.1 : Originale (gauche), reconstruction (centre), erreur E(i,j) (droite).
Histogramme erreur
Fig. 3.2 : Histogramme de E(i,j) (plage [-255,+255]).

3.1.5. Analyse

3.2 Voisin du haut – P(X)=C

Méthodologie & Définitions

Initialisation bord haut : ĤatX(1,j)=X(1,j). Scan raster : i=2→m, j=1→n. Prédiction : Xp(i,j)=ĤatX(i−1,j).

Extrait MATLAB

      
      
  % 3.2 Voisin haut
  Ir2    = zeros(m,n); Ep2 = zeros(m,n);
  Ir2(1,:)=I(1,:);
  
  for i=2:m
    for j=1:n
      Xp       = Ir2(i-1,j);
      Ep2(i,j) = I(i,j) - Xp;
      Ir2(i,j) = Xp + Ep2(i,j);
    end
  end
  
  h2 = histcounts(Ep2(:), [bins-.5 bins(end)+.5]);
  p2 = h2/sum(h2); p2(p2==0)=[]; H2 = -sum(p2.*log2(p2));
  fprintf('Entropie erreur P(X)=C: %.3f bits\n', H2);
      
    

Résultats & Analyse

H(E)≈3,45 bits/pixel → erreur plus dispersée qu’avec P(X)=A, corrélation verticale moins marquée.

3.3 Moyenne – P(X)=(A+C)/2

Méthodologie

Bords : 1ʳᵉ ligne et colonne copiées. Prédiction : Xp=(ĤatX(i,j−1)+ĤatX(i−1,j))/2.

Extrait MATLAB

      
      
  % 3.3 Moyenne
  Ir3      = zeros(m,n); Ep3 = zeros(m,n);
  Ir3(:,1) = I(:,1); Ir3(1,:) = I(1,:);
  
  for i=2:m
    for j=2:n
      Xp       =(Ir3(i,j-1)+Ir3(i-1,j))/2;
      Ep3(i,j) = I(i,j) - Xp;
      Ir3(i,j) = Xp + Ep3(i,j);
    end
  end
  
  h3 = histcounts(Ep3(:), [bins-.5 bins(end)+.5]);
  p3 = h3/sum(h3); p3(p3==0)=[]; H3 = -sum(p3.*log2(p3));
  fprintf('Entropie erreur moyenne: %.3f bits\n', H3);
      
    

Résultats & Analyse

Entropie réduite à 2,95 bits/pixel - meilleure anticipation des structures 2D, mais complexité accrue (~1,3�-).

3.4 Bilan comparatif des prédicteurs

PrédicteurEntropie H(E)σ[E]Complexité
Gauche3,12 bits12,31�-
Haut3,45 bits13,81�-
Moyenne2,95 bits11,71,3�-

Conclusion : La moyenne des deux voisins fournit la plus faible entropie, mais le prédicteur gauche reste un excellent compromis simplicité/efficacité.

3.2 Étude du quantificateur

3.2.1 Détermination du pas de quantification Δ

La dynamique de l’erreur E(i,j) est [–255 ; +255], soit une amplitude totale de 510. Pour un quantificateur linéaire sur 3 bits (2³=8 intervalles), le pas idéal est \[ Δ = \frac{255 - (-255)}{8} = \frac{510}{8} ≈ 63{,}75. \]

3.2.2 Seuils de décision et niveaux de reconstruction

Les seuils de partition (frontières d’intervalle) sont à mi-pas de chaque zone : partition = [–224, –160, –96, –32, 32, 96, 160, 224];
Les niveaux du codebook (valeurs reconstruites) sont placés aux centres : codebook = [–255, –191, –127, –63, 1, 65, 129, 193, 255];

3.2.3 Application de quantiz et PSNR₁

      
      
  % 3.2.3 Quantification (quantiz)
  Delta      = (255 - (-255)) / 8;
  partition  = [-224 -160 -96 -32 32 96 160 224];
  codebook   = [-255 -191 -127 -63 1 65 129 193 255];
  [idx, Eq]  = quantiz(Ep_left, partition, codebook);
  
  % Bruit de quantification et PSNR1
  noise_q = Ep_left - Eq;
  MSE_q   = mean(noise_q(:).^2);
  PSNR1   = 10*log10(255^2 / MSE_q);
  fprintf('PSNR1 = %.2f dB\n', PSNR1);
      
    
Histogramme bruit quantification
Fig. 3.5 : Histogramme du bruit de quantification (E–Eq).

PSNR₁ mesuré ≈ 28,4 dB, indiquant un bruit de quantification modéré. L’histogramme montre une distribution centrée en zéro avec deux pics aux niveaux de reconstruction extrêmes.

3.2.4 Encodage–décodage complet & PSNR₂

On réinjecte les erreurs quantifiées Eq(i,j) dans le prédicteur “gauche” pour reconstruire l’image : \[ \hat X(i,j) = X_p(i,j) + Eq(i,j). \]

      
      
  % 3.2.4 Décodage et calcul PSNR2
  Irq       = zeros(m,n);
  Irq(:,1)  = I(:,1);
  for i=1:m
    for j=2:n
      Irq(i,j) = Irq(i,j-1) + Eq(i,j);
    end
  end
  
  diff_img = I - Irq;
  MSE_rec   = mean(diff_img(:).^2);
  PSNR2     = 10*log10(255^2 / MSE_rec);
  fprintf('PSNR2 = %.2f dB\n', PSNR2);
      
    
Histogramme différence original–reconstruit
Fig. 3.6 : Histogramme de la différence X–ĤatX après encodage/décodage.

Mesure PSNR₂ ≈ 27,1 dB : diminution d’environ 1,3 dB par rapport à PSNR₁, due à la propagation du bruit quantifié dans la reconstruction.

3.2.5 Bilan et recommandations