Reconstruction d'image par Regression à base de noyaux

Contents

Objectif

Le but de ce TP est d'utiliser les SVM en regression (aussi appelés SVR pour Support Vector Regression) pour reconstituer les pixels manquants dans une image (ce qui revient à faire une forme d'interpolation sur des données en 2 dimensions).

Outils

Etapes

  1. Préparer la base d'apprentissage et de test.
  2. Mettre en oeuvre le SVR.
  3. Tester différents réglages du SVR (noyau, relâchement des contraintes $C$ , largeur du tube $\epsilon$ ) afin d'obtenir la meilleure reconstruction.
  4. Faire varier le taux de pixels manquants.

Préparation des données

load(['image4.mat']);
figure, imagesc(B);
colormap('gray');
title(['Image d''origine'],'fontsize',20);
[x1,x2] = meshgrid(1:size(B,1),1:size(B,2));
trainvecT = [reshape(x1,size(B,1)*size(B,2),1),reshape(x2,size(B,1)*size(B,2),1)];
trainlabT = double(reshape(B,size(B,1)*size(B,2),1));
P = 0.5;
rn = randperm(length(trainvecT));
PS = rn(1:round(P*length(trainvecT)));
trainvec = trainvecT;
trainlab = trainlabT;
trainvec(PS,:) = [];
trainlab(PS) = [];
testvec = trainvecT(PS,:);
testlab = trainlabT(PS);
C = reshape(B,size(B,1)*size(B,2),1);
C(PS) = 1;
C = reshape(C,size(B,1),size(B,2));
figure, imagesc(C);
colormap('gray');
title(['Image tronquée à ',num2str(100*P), '%'],'fontsize',20);

Travail à réaliser

SVR et réglage

  1. Lire la documentation (en ligne ou en tapant svmtrain dans Matlab) de libSVM pour connaître les options disponibles et les sorties du SVM/SVR
  2. Lancer l'apprentissage en regression pour une image avec 50% de pixels manquants, un noyau de type rbf (gaussien) avec largeur de bande $\gamma = 0.1$ , et des paramètres du SVR $C=1$ , $\epsilon=0.1$
  3. Tester le model appris sur vos données de test et afficher l'image complétée.
  4. Mettre en oeuvre une procédure qui évalue la qualité du résultat en fonction des différents paramètres ( $\gamma$ et $C$ , on gardera $\epsilon=0.1$ ) et retient l'ensemble de paramètres le plus performant (méthode de la validation croisée)

Variation des pixels manquants

Exemple de code (à titre indicatif)

Ajout de la toolbox dans le chemin

addpath('./Toolbox/libsvm-mat-2.88-1/');

Lancement du SVR

param = ['-s 3 -c 1 -g 0.1 -e 0.1'];
model = svmtrain(trainlab, trainvec, param);
[predict_label, accuracy, dec_values] = svmpredict(testlab, testvec, model);

Affichage de l'image reconstruite

figure;
D = reshape(B,size(B,1)*size(B,2),1);
D(PS) = predict_label;
D = reshape(D,size(B,1),size(B,2));
imagesc(D);
colormap('gray');
title('Image reconstruite','fontsize',20);