Sie sind auf Seite 1von 4

Universite Paul Sabatier - Master Informatique

Devoir maison no1 : Filtrage dimages


Outils Informatiques pour le Multimedia
2015
NOTES IMPORTANTES :
Modalit
es de remise du projet : Vous devez deposer sous moodle une archive au format tar.gz (et
uniquement `
a ce format l`
a) nommee : prenom.nom-OIM1.tar.gz (remplacez prenom et nom par VOTRE
prenom et VOTRE nom). Merci de ne pas mettre despaces ou daccents dans le nom de votre archive. Cette
archive devra contenir UNIQUEMENT :
les fichiers sources, respectant la norme C99, de votre projet,
un fichier Makefile permettant de compiler le programme realise,
un document au format pdf contenant les explications demandees dans le sujet et les informations que
vous souhaitez communiquer sur votre travail (Specifications, description des algorithmes, references
bibliographiques, ...)
Prenez garde au temps de calcul : le temps de calcul pour le filtrage dimage peut etre tr`es long pour
des tailles de filtre importantes. Faite des test reguli`erement et estimez le temps qui sera necessaire sur votre
processeur pour effectuer les tests demandes dans leur integralite. Par exemple, pour la version non optimisee,
il vous faut prevoir environ 5h de calcul sur un intel core-i7 `a 3 Ghz pour effectuer la totalite des tests par
la commande test script.sh all. Toutefois, si vous executez votre programme reguli`erement, les fichiers qui
ont ete generes lors des tests precedents ne sont pas recalcules. Pour forcer le recalcul de ces fichiers (images
filtrees), effacez manuellement les fichiers des repertoires test files/localmean et test files/nonlocalmean.
Seuls les fichiers effaces seront recalcules.
Modalit
es de correction : Attention, un outil de detection de la copie sera utilise sur les archives
deposees. Toute copie averee entrainera la note de 0 au devoir et une convocation par le responsable de
lunite denseignement. Si un projet remis ne peut etre compile sur le syst`eme dexploitation utilise en
TP (Linux), la note de 0 sera attribuee au projet et le code ne sera pas lu. La qualite du code (lisibilite,
reutilisabilite, modularite, robustesse ...) ainsi que ses performances (complexite en espace et en temps)
constitueront une part importante de la note finale.
Lobjectif de ce devoir est de programmer et de comparer, en terme de qualite dimages et de temps de calcul,
deux methodes de filtrage dimages utilisees pour le debruitage dimages. Afin de pouvoir developper et evaluer
votre programme, vous devez implanter les operateurs demandes dans larchive logicielle fournie en respectant les
interfaces et les specifications. Toute interface non respectee ou specification non respectee entrainera une penalite
sur la note finale.

Description de larchive logicielle fournie


Larchive qui vous est fournie pour servir de base `a votre travail est constituee des fichiers suivants :
1. Fichers sources
image.h et image.c : Definition du type image et des fonctions de chargement et de sauvegarde dans le
format dimage .pgm utilise pour le devoir. Voir le fichier image.h pour la documentation sur ce type
abstrait de donnees.
timer.h et timer.c : Definition du type Timer permettant de mesurer le temps passe `a lexecution dune
fonction. Voir le fichier timer.h pour la documentation sur ce type abstrait de donnees.
main.c : Programme principal, se limitant initialement `a lanalyse de la ligne de commande selon les
specifications suivantes :
usage : ./imagefilter mode img1 img2 filtersize
mode : 0 : mean filter, 1 : non local mean filter, 2 : comparison between images
img1 : input filename, extension pgm if mode is 0 or 1, reference image if mode is 2
out : output filename, extension pgm if mode is 0 or 1, test image if mode is 2
Makefile : fichier de compilation et de declenchement des tests.
obj : repertoire dans lequel seront places les fichiers resultant de la compilation.

OIM - 2015

1/4

Universite Paul Sabatier - Master Informatique

2. Fichiers de test
references : images de reference pour les tests.
noisy : images bruitees devant etre filtrees.
file list.txt : liste des images qui seront utilisees pour les tests automatiques
3. Script de test
test script.sh : script shell de test de votre programme. Lorsque vous le lancez, ce script applique les
differents filtres sur les images indiquees dans le fichier file list.txt et gen`ere un rapport de test dans le
fichier comparison.txt.
Pour chaque etape du sujet, vous devrez ecrire dans votre programme principal la portion correspondant `
a la
ligne de commande associee `
a loperation `
a realiser.

D
ebruitage dimages

Nous considerons une image en niveaux de gris ref de taille M N , dont les pixels sont de type pixel t et
contiennent des valeurs entre 0 et 255. Cette image a ete degradee par lajout dun bruit Gaussien resultant en
une image noisy, de meme type et de meme taille que limage originale ref . Un exemple dimages ref et noisy est
donne sur la figure 1.

Figure 1 Exemple dimage et de sa degradation. A gauche, image dorigine, `a droite, image bruitee.
Lobjectif de ce devoir est de developper et comparer deux algorithmes de traitement dimages dont lobjectif
est de debruiter limage noisy, cest `
a dire, de reconstruire une image f iltered la plus proche possible de ref `
a
partir de noisy. Le resultat attendu de ces deux algorithmes est montre sur la figure 2.

Figure 2 Resultat des algorithmes de debruitage avec la meme valeur de f iltersize. A gauche, filtrage moyen,
a droite filtrage moyen non local.
`

2/4

OIM - 2015

Universite Paul Sabatier - Master Informatique

Filtrage moyen (3 points)


1. Implementer la fonction void meanfilter(image img, image out, int filtersize) dans le fichier meanfilter.c de facon `
a ce quelle applique sur limage img un filtre moyen de taille filtersize, toujours impaire,
pour produire limage out. Afin de sassurer que les deux images aient la meme taille, une restriction du
filtre `
a limage sera mise en place. Cette restriction revient `a ne prendre en compte un element du filtre
que sil recouvre le domaine de definition de limage. Ainsi, quand la fenetre de filtrage est partiellement `
a
lexterieur de limage, la moyenne ne sera calculee que sur le nombre de pixels de limage recouverts par la
fenetre de filtrage.
2. Modifier le programme principal de facon `a ce quil applique le filtre moyen lorsquil est appele avec la
commande ./imagefilter 0 infile outfile filtersize. Le programme devra uniquement afficher sur la sortie
standard le nom de limage et le temps de calcul necessaire pour lapplication du filtre selon le format
local mean : image.pgm filtersize time in second. Le temps de calcul sera obtenu par lutilisation du type
abstrait Timer fourni dans larchive logicielle initiale. Generer differents resultats de lapplication de ce filtre
en appelant le script de test de la facon suivante : test script.sh localmean

Filtrage par patchs ou filtrage moyen non local (7 points)

Nous nous interessons ici `


a une methode de debruitage differente de la precedente qui, au lieu deffectuer un
calcul de moyenne uniforme sur le voisinage local dun pixel, de taille filtersize, realise un calcul de moyenne non
uniforme sur une region dinteret (ROI ) de limage de taille plus importante. La taille de cette region dinteret est
notee f iltersize. Dans ce calcul de moyenne non uniforme, le poids associe `a chaque pixel de la region dinteret
sera fonction de sa similarite avec le pixel central.
Le schema de la figure 3 montre le positionnement dune region dinteret de taille P Q autour dun pixel central
(i, j). Le poids associe `
a chaque pixel (k, l) de la ROI sera fonction de la similarite entre les blocs de pixels de
taille p q centres autour du pixel central (i, j) et du pixel (k, l). Sans perte de generalite, nous considererons dans
notre application que P = Q et que p = q. Nous nommerons texturesize la taille du voisinage du pixel permettant
de calculer la similarite. Nous avons donc P = Q = f iltersize et p = q = texturesize
Dans notre application, les relations entre le param`etre f iltersize de la methode de filtrage par moyenne locale
et les param`etres f iltersize et texturesize de lapproche non locale sont donnees par le code suivant (voir fichier
main.c et la fonction danalyse de la ligne de commande) :
texturesize = f i l t e r s i z e ;
f i l t e r s i z e = 2 f i l t e r s i z e 1;

Figure 3 Bloc et region dinteret pour le filtrage moyen non local


1. Specifier et implementer, dans le fichier nonlocalmeanfilter.c, une fonction C qui, pour une image de taille
M N dont les pixels sont de type pixel t, calcule la distance euclidienne entre deux blocs de pixels de taille
texturesize texturesize centres respectivement autour des pixels (i, j) et (k, l). Sans perte de generalite,
nous considererons que texturesize est un entier impair. Definir clairement les entrees et les sorties de cette
fonction. On rappelle que la distance euclidienne entre deux blocs b1 et b2 de taille p q est definie par :
2
p X
q 
X
b1 (u, v) b2 (u, v)
d(b1 , b2 ) =

255
255
u=0 v=0
OIM - 2015

3/4

Universite Paul Sabatier - Master Informatique

Si un pixel de coordonnee (u, v) dans les bloc b1 ou b2 est hors de limage, il nintervient pas dans le calcul
de la distance.
2. Soit un pixel (i, j) dans limage noisy. Soit la region dinteret Rij de limage noisy de taille f iltersize
f iltersize centree sur le pixel (i, j). Soit le bloc bij de pixels de taille texturesize texturesize centre sur le
pixel (i, j). Soit un pixel (k, l) de Rij pour lequel le bloc, note bkl , de taille texturesize texturesize centre
sur ce pixel est enti`erement inclus dans Rij . On definit la similarite entre les blocs bij et bkl de la mani`ere
suivante :
s(i, j, k, l) = exp(d(bij , bkl ))
Specifier et implementer, dans le fichier nonlocalmeanfilter.c, une fonction qui calcule la moyenne des
pixels de Rij ponderes par leur similarite avec le pixel (i, j). Une region ou un boc peuvent netre que
partiellement inclus dans limage. Aussi, la gestion des bords de limage sera faite au niveau du pixel,
par restriction de loperateur de calcul de distance entre blocs au domaine de definition de limage. Une
attention particuli`ere sera apportee sur les types utilises pour les calculs intermediaires de sorte `a ne pas
perdre dinformation et deviter les depassements de capacite.
3. Implementer la fonction void nonlocalmeanfilter(image img, image out, int filtersize, int texturesize )
dans le fichier nonlocalmeanfilter.c de facon `a ce quelle applique sur limage img un filtre moyen non
local tel que decrit ci-dessus Afin de sassurer que les deux images ont la meme taille, une restriction du
filtre `
a limage sera mise en place. Ainsi, quand la region dinteret est partiellement `a lexterieur de limage,
la moyenne ne sera calculee quavec les pixels de la region appartenant `a limage.
4. Modifier le programme principal de facon `a ce quil applique le filtre moyen lorsquil est appele avec la
commande ./imagefilter 1 infile outfile filtersize. Le programme devra uniquement afficher sur la sortie
standard le nom de limage et le temps de calcul necessaire pour lapplication du filtre selon le format non
local mean : image.pgm filtersize time in second. Generer differents resultats de lapplication de ce filtre en
appelant le script de test de la facon suivante : test script.sh nonlocalmean. ATTENTION, le temps
de calcul de cette methode peut etre tr`es important.

Comparaison des m
ethodes (5 points)
1. Afin devaluer la difference entre une image resultant dun filtrage et limage de reference, nous definissons
une metrique de comparaison calculant la distance euclidienne moyenne entre un voisinage de taille f iltersize
centre sur un pixel (i, j) de limage de reference et le meme pixel dans limage filtree. La distance euclidienne
entre 2 blocs est definie comme `
a la question 1. Implementer, dans le fichier imagemetric.c, la fonction
float compare images(image ref, image comp, int filtersize) calculant la distance euclidienne moyenne
entre deux images.
2. Modifier le programme principal de facon `a ce quil calcule la distance entre limage de reference et limage
filtree lorsquil est appele avec la commande ./imagefilter 2 reference filteredimage filtersize. Le
programme devra uniquement afficher sur la sortie standard le nom de limage de reference, le nom de limage
filtree, la valeur de f iltersize et la distance entre les images selon le format reference.pgm filteredimage.pgm
filtersize distance. Generer differents resultats de lapplication de ce traitement en appelant le script de test
de la facon suivante : test script.sh distance.
3. A partir du fichier test files/comparison.txt genere par lappel au script de test et dun outil de trace de
courbe de votre choix (openoffice, gnuplot, excel, ...), tracer, pour chaque image testee, les courbes derreur
en fonction de la valeur de f iltersize et expliquer la forme de ces courbes.

Acc
el
eration des m
ethodes de filtrage (5 points)

Afin de rendre exploitable `


a grande echelle lapplication des filtres sur les images, proposer et implanter une
(ou plusieurs) methodes de reduction du temps. A partir des notions que vous avez vues en cours (et dans dautre
cours du master), il est laisse libre cours `
a votre curiosite, inventivite, sagacite et investissement pour identifier une
ou plusieurs methodes dacceleration possibles en fonction de la nature du filtre que vous souhaitez optimiser. Ces
methodes peuvent reposer sur de la parallelisation, de la vectorisation, de la reformulation en frequence, ... Vous
prendrez soin de decrire la demarche suivie dans votre rapport de devoir en precisant, le cas echeant, toutes les
informations sur deventuelles biblioth`eques externes ou version de compilateur que vous utiliserez (nom, version,
...)
Pour evaluer vos approches, donner le temps de calcul necessaire pour la realisation du test genere par lappel
de test script.sh all sans votre optimisation (ATTENTION, prevoyez un LONG temps de calcul) et avec vos
optimisations.
4/4

OIM - 2015

Das könnte Ihnen auch gefallen