Sie sind auf Seite 1von 38

SIMES 961620 Dlivrable 7 1

SIMES 961620
Systme dInformation Multimdia
Pour lEnvironnement Subsaharien
DATA PRE-PROCESSING
Deliverable number : D7
Nature : P
Contractual Date of Delivery : 14 November 1998
Task WP1.3 : Data pre-processing
Nom du rdacteur : Paul S. SAWADOGO
Institut : ESI
Adresse : 01 BP1091 Bobo-Dioulasso 01
Burkina Faso
Spaul@esi.univ-ouga.bf
ABSTACT
This paper is the deliverable due at the end of the task WP1.3 of workpackage 1 of
SIMES WISE-DEV project. It describe some algorithms of image preprocessing which can be
used on remote sensing images on subsaharian environment. These algorithms are mainly
based on image restoration and contrast enhancement technics.
Key Words : Image restoration, contrast enhancement, filtering.
RESUME
Ce document constitue le dlivrable attendu la fin de la tche WP1.3 du
workpackage 1 figurant dans le projet SIMES WISE-DEV. Il dcrit quelques algorithmes de
programmes de pr-traitement dimages en mesure dtre employs sur des images
numriques de lenvironnement subsaharien prises partir de capteurs aroports ou
embarqus sur des satellites. Ces algorithmes sont essentiellement ceux destins
lamlioration et la restauration des images.
Mots cls : amlioration dimages, restauration dimages, filtrage.
SIMES 961620 Dlivrable 7 2
SOMMAIRE
INTRODUCTION................................................................................................................................................................... 4
PREMIERE PARTIE............................................................................................................................................................. 5
DESCRI PTI ON FONCTI ONNELLE DES ALGORI THMES DE PR-TRAI TEMENT DI MAGES
CENTRS SUR LAMLI ORATI ON ET LA RESTAURATI ON DI MAGES......................................................... 5
1 AMELIORATION DIMAGES................................................................................................................................ 5
1.1 MTHODES DU DOMAINE SPATIAL ...........................................................................................................................6
1.1.1 Mthode du contraste tir (contrast stretching) ..................................................................................... 6
1.1.2 Mthode de la compression de la chane dynamique............................................................................... 6
1.1.3 Mthode des niveaux de gris par tranche.................................................................................................. 7
1.1.4 Mthode de lgalisation ou de la linarisation dhistogramme............................................................ 7
1.1.5 Mthode du rehaussement local .................................................................................................................. 8
1.2 MTHODES DU DOMAINE DES FRQUENCES............................................................................................................8
1.2.1 Filtrage passe-bas.......................................................................................................................................... 8
1.2.2 Filtrage passe-haut ........................................................................................................................................ 9
1.2.3 Filtrage homomorphique .............................................................................................................................. 9
2 RESTAURATION DIMAGES ..............................................................................................................................10
2.1 SUPPRESSION DU BRUIT ...........................................................................................................................................10
2.1.1 Filtrage linaire............................................................................................................................................10
2.1.2 Filtrage non linaire....................................................................................................................................11
2.2 MODLE DE LA DGRADATION...............................................................................................................................11
2.3 APPROCHE ALGBRIQUE DE RSOLUTION.............................................................................................................12
2.3.1 Restauration sans contrainte......................................................................................................................13
2.3.2 Restauration avec contrainte .....................................................................................................................13
2.3.3 Restauration sous contrainte de rgularit .............................................................................................13
2.4 FILTRAGE INVERSE ...................................................................................................................................................13
2.5 FILTRAGE DE WIENER..............................................................................................................................................14
2.6 TRANSFORMATIONS GOMTRIQUES.....................................................................................................................14
2.7 TECHNIQUES UTILISANT LES QUATIONS AUX DRIVES PARTIELLES (EDP).................................................14
DEUXIEME PARTIE..........................................................................................................................................................16
PSEUDO CODE, PROCESSUS DI MPLMENTATI ON ET CODE SOURCE DE QUELQUES
ALGORI THMES DE PR-TRAI TEMENT DI MAGES.............................................................................................16
3 PSEUDO CODES DES QUELQUES ALGORITHMES ................................................................................16
3.1 FILTRE MDIAN........................................................................................................................................................16
3.2 FILTRE MOYENNE ..............................................................................................................................................18
3.3 FILTRE PASSE_BAS ............................................................................................................................................19
4 CODES SOURCES ET TESTS DIMPLEMENTATION..............................................................................19
4.1 LE FILTRE MDIAN..................................................................................................................................................19
4.2 LE FILTRE MOYENNE ........................................................................................................................................22
4.3 LE FILTRE PASSE_BAS .......................................................................................................................................24
4.4 LE ZOOM DUNE IMAGE.........................................................................................................................................27
4.5 GNRATION DES DONNES...................................................................................................................................28
4.6 AFFICHAGE DES DONNES.....................................................................................................................................28
4.7 PASSAGE EN MODE GRAPHIQUE ...........................................................................................................................28
4.8 FONCTION PRINCIPALE............................................................................................................................................29
5 GUIDE DUTILISATION.......................................................................................................................................30
SIMES 961620 Dlivrable 7 3
TROISIEME PARTIE.........................................................................................................................................................31
RSULTATS DES TESTS SUR DES TABLEAUX DE PI XELS...............................................................................31
TEST1 : ....................................................................................................................................................................................31
TEST2 : ....................................................................................................................................................................................34
TEST3 : ....................................................................................................................................................................................35
CONCLUSION......................................................................................................................................................................35
BIBLIOGRAPHIE................................................................................................................................................................36
SIMES 961620 Dlivrable 7 4
INTRODUCTION
Les images acquises sont le plus souvent entaches de parasites ou bruits. Le
traitement leur appliquer dpend de linformation que lon veut en extraire. En effet, le
dispositif et les conditions dacquisition ntant pas toujours parfaits, limage peut prsenter
des distorsions ou un flou ; pour sen dbarrasser, les techniques de restauration dimages
peuvent tre employes.
Il peut arriver que malgr la suppression du bruit, limage soit encore de mauvaise
qualit, rendant de ce fait linterprtation difficile ; les techniques damlioration dimages
vont nous permettre alors de donner une meilleure qualit limage en lui rendant un aspect
visuel plus agrable.
Ce document est un inventaire non exhaustif des mthodes existant en amlioration et
restauration dimages. Dans une premire partie nous en prsentons une description
fonctionnelle, cest--dire leurs fondements thoriques. Dans la deuxime partie, nous
donnons les algorithmes ralisant quelques-unes dentre elles avec les codes sources associs.
Dans la troisime partie figurent les rsultats des diffrents tests des programmes
correspondants.
SIMES 961620 Dlivrable 7 5
PREMIERE PARTIE
Description fonctionnelle des algorithmes de pr-traitement dimages centrs
sur lamlioration et la restauration dimages
Une image numrique peut tre considre comme une matrice de points appels
pixels reprs par leurs coordonnes (x, y). A chacun dentre eux est associe une valeur
correspondant la mesure dun phnomne en ce lieu que lon reprsente gnralement par
une fonction de deux variables f : RR R.
Pour amliorer le contraste dune image, il est ncessaire davoir une ide de la
dispersion des valeurs des pixels qui la composent. Pour cela, on peut la visualiser, cest--
dire lafficher lcran ou limprimer de sorte en avoir une apprciation visuelle subjective,
ou bien dresser son histogramme qui en offrira une perception quantitative et objective. Si
lhistogramme ne nous donne pas dinformation spcifique sur ce que contient limage, en
revanche sa forme nous permet de savoir si limage est faiblement ou fortement contraste, ce
qui peut aider au choix de la mthode approprie pour son amlioration.
Lhistogramme dune image dont les valeurs des pixels sont dans lintervalle [0, L-1],
est une fonction discrte p dfinie par :
p : [0, L-1][0, 1]


n
n
r p
k
k
) ( (1)
o
k
r est la
ime
k

valeur de pixel,

k
n

le nombre total de pixels qui ont cette valeur,
k = 0, 1, , L-1 ,
n le nombre total de pixels.
NB : Cette dfinition est une forme normalise de lhistogramme. On pourrait ne pas diviser
les
k
n par n , et alors p prendrait ses valeurs dans lintervalle [0, n ].
1 AMELIORATION DIMAGES
Elle sappuie sur le contraste correspondant la diffrence existant entre les pixels de
plus fortes intensits habituellement qualifis de clairs , et ceux de plus faibles intensits
communment appels pixels sombres . Une image faiblement contraste prsente un
aspect terne et sans relief o toute la gamme des tonalits se situe autour des valeurs
mdianes. Une image fortement contraste crase les valeurs tonales intermdiaires en
augmentant exagrment celles des plages extrmes [8][15].
Le but de lamlioration du contraste est dobtenir une image plus lisible que celle de
dpart pour une utilisation spcifique, par exemple la mise en vidence ou le renforcement de
certains aspects quelle renferme.
Les principales mthodes employes pour lamlioration des images se fondent sur
lune des approches suivantes :
SIMES 961620 Dlivrable 7 6
lapproche spatiale dont les mthodes oprent directement sur lensemble des pixels
composant limage ;
lapproche frquentielle ou spectrale, base sur la modification de la transforme de
Fourier de l'image, qui sappuie sur le thorme de convolution ou thorme de
Plancherel.
Soient ) , ( y x f une fonction de deux variables continue et intgrable sur un domaine D
et ) , ( v u sa transforme de Fourier. Alors le domaine D est appel domaine spatial et
lensemble des ) , ( v u est appel domaine des frquences ou domaine spectral.
1.1 Mthodes du domaine spatial
Soit f : RR R une image. Il sagit de trouver une transformation T : RR qui
sappliquera f pour donner une image contraste g telle que :
g : RR R
)] , ( [ ) , ( y x f T y x g . (2)
La fonction T sappliquant sur les valeurs des pixels, nous dsignerons par r une
valeur de pixel de limage initiale (lentre) et par s celle de limage traite (la sortie).
1.1.1 Mthode du contraste tir (contrast stretching)
Elle sutilise dans le cas dune image faiblement contraste rsultant soit dun
clairement insuffisant, soit dun mauvais rglage de la lentille du capteur. Elle a pour effet
daugmenter le contraste de limage.
Ici la fonction T doit tre croissante, affine sur les trois intervalles ([0, k], [k, j], [j,
L -1] avec L j k 0 o L est le nombre de valeurs distinctes que peuvent prendre les
pixels de limage) et continue sur [0, L -1]. Dans le cas particulier o lon a L j k < < 0 , et
T : [0, L -1] {0,1}, avec
T (r) =

'

<
m
m
r si 1
r si 0
o m= L /2 (appel point seuil), (3)
on obtient une image binaire (noir/ blanc) en rsultat.
1.1.2 Mthode de la compression de la chane dynamique
On appelle chane dynamique le nombre dintensits diffrentes que peut prendre
chaque pixel de limage. Lorsque la chane dynamique de limage traite dpasse la capacit
daffichage du moniteur, seules les plus fortes valeurs de limage traite seront gnralement
visibles (dpassement de capacit). Pour pallier ce problme on peut utiliser la transformation
T dfinie par :
) 1 ( ) ( r Log C r T + (4)
o C est une constante strictement positive et qui permet de rduire la taille de la chane
dynamique.
SIMES 961620 Dlivrable 7 7
1.1.3 Mthode des niveaux de gris par tranche
Cette mthode est plus indique lorsque lon veut mettre en vidence une partie de
limage. Il existe deux approches :
iCelle o les valeurs des pixels du centre dintrt sont remplaces par des intensits
leves, et toutes les autres par de plus basses de sorte obtenir en rsultat une image binaire.
T est alors dfinie de [0, L -1] vers {0, max} par :
T (r) =

'

A r i 0
A r i max
s
s
(5)
o max dsigne la valeur de pixel la plus leve, et A (A [0, L -1]) lensemble des
intensits des pixels du centre dintrt.
iCelle o les valeurs des pixels du centre dintrt sont remplaces par des intensits
extrmement leves, les autres gardant leurs valeurs de dpart ; ce qui rduit la chane
dynamique de limage en illuminant les pixels du centre dintrt.
T est alors dfinie de [0, L -1] vers {0, max} par :
T(r) =

'

A r r
A r max
si
si
(6)
o max dsigne la valeur de pixel la plus leve, et A (A [0, L -1]) lensemble des
intensits des pixels du centre dintrt.
1.1.4 Mthode de lgalisation ou de la linarisation dhistogramme
On calcule dabord lhistogramme de limage initiale puis on spcifie celui que lon
dsire avoir aprs traitement, en gnral un lhistogramme plat. Ensuite lon cherche la
transformation qui permet de passer de lun lautre. Enfin cette transformation est applique
limage initiale pour obtenir limage amliore dont lhistogramme est aplati et tal.
Comme lon veut contrler la densit de probabilit des valeurs de pixels de limage
via une transformation T , celle-ci doit tre croissante sur [0, 1] et ses valeurs comprises entre
0 et 1. Pour y parvenir, lon ramne lintervalle des valeurs des pixels de limage de dpart
lintervalle [0, 1] par une division par L -1.
Si
r
p

est la densit de probabilit de limage originale et
s
p

celle de limage
transforme, alors T est lie
r
p

par :
T (r) =

r
0
r
) ( p dx x (7)
ou T (
k
r ) =

k
0 j
j
n
n
= ) r ( p
0 j
j r

k
(8)
0 1
j
r et k = 0, 1,, L -1.
Les galits (7) et (8) correspondent aux expressions de ) (r T dans les cas continu et
discret. On montre que
s
p

(s) = 1 ;
s
p

correspond donc une densit de probabilit uniforme.
Lhistogramme de limage transforme stale alors sur lintervalle [0, L -1], ce qui traduit un
relvement de contraste.
SIMES 961620 Dlivrable 7 8
1.1.5 Mthode du rehaussement local
On dfinit un voisinage carr n n avec n impair, sur lequel on applique la mthode
de lgalisation dhistogramme. En dplaant le centre du voisinage de pixel en pixel de sorte
couvrir toute limage, on ralise la mthode du rehaussement local qui a pour consquence
la mise en vidence des dtails de limage.
On peut galement appliquer la formule suivante sur chaque pixel (x, y) :
) , ( )] , ( ) , ( ).[ , ( ) , ( y x m y x m y x f y x A y x g + (9)
o
) , (
) , (
y x
M
k y x A

, (0<k<1)
) , ( y x m la moyenne des pixels du voisinage, ) , ( y x leur cart type et M la moyenne
des valeurs des pixels de limage entire de dpart.
1.2 Mthodes du domaine des frquences
Dans le cas de ces mthodes on ne sintresse plus aux valeurs des pixels, mais leur
transforme de Fourier. Leur procdure dimplmentation sarticule autour des trois
points suivants :
le calcul de la transforme de Fourier ) , ( v u de limage ) , ( y x f ,
la multiplication par un filtre de transfert ) , ( v u H ,
La transformation inverse de Fourier du rsultat.
Signalons que ces mthodes sont plus difficiles implmenter par rapport aux
prcdentes.
1.2.1 Filtrage passe-bas
Il permet dattnuer les hautes frquences de ) , ( v u .
Le filtre idal :
) , ( v u H =

'

>

0
0
) , ( si 0
) , ( si 1
D v u D
D v u D
(10)
o D
0
est strictement positif et ) , ( v u D = (u
2
+v
2
)
1/2
.
Toutes les frquences situes lextrieur du cercle de centre O et de rayon D
0
disparaissent et celles situes lintrieur de ce cercle sont conserves.
Dans la pratique, on utilise un filtre dnomm butterworth
) , ( v u H
n
D(u,v)/D
2
0
] [ 1
1
+
(11)
avec les mmes notations que prcdemment.
SIMES 961620 Dlivrable 7 9
1.2.2 Filtrage passe-haut
Il attnue les composantes basses frquences sans perturber les informations hautes
frquences de la transforme de Fourier de limage.
Le filtre idal :
) , ( v u H

'

>

0
0
D v) D(u, si 1
D v) D(u, si 0
(12)
o D
0
est strictement positif et ) , ( v u D = (u
2
+v
2
)
1/2
.
Toutes les frquences situes lintrieur du cercle de centre O et de rayon D
0
disparaissent tandis que toutes les autres sont conserves.
Dans la pratique, on utilise un filtre baptis butterworth
) , ( v u H
n 2
0
v)] D(u, / D [ 1
1
+
(13)
avec les mmes notations que prcdemment.
1.2.3 Filtrage homomorphique
Ici lon choisit dcrire la fonction image comme produit de deux fonctions, cest--
dire ) , ( ) , ( ) , ( y x r y x i y x f o ) , ( y x i est la composante dclairement et ) , ( y x r la
composante de rflectance. Le filtrage homomorphique consiste :
Prendre le logarithme de f
)] , ( ln[ )] , ( ln[ )] , ( ln[ ) , ( y x r y x i y x f y x z +
Appliquer la transformation de Fourier au rsultat
{ } { } { } ) , ( ln ) , ( ln ) , ( y x r y x i y x z + que lon crit ) , ( ) , ( ) , ( v u R v u I v u Z + avec
{ }, ) , ( ) , ( y x z v u Z { }, ) , ( ln ) , ( y x i v u I { } ) , ( ln ) , ( y x r v u R
Multiplier le rsultat par un filtre de transfert ) , ( v u H
) , ( ) , ( ) , ( ) , ( ) , ( v u R v u H v u I v u H v u S +
Appliquer la transformation inverse de Fourier au rsultat obtenu
{ }
{ } { } ) , ( ) , ( ) , ( ) , (
) , ( ) , (
1 1
1
v u R v u H v u I v u H
v u S y x s

+

que lon crit ) , ( ' ) , ( ' ) , ( y x r y x i y x s + avec { }, ) , ( ) , ( ) , ( '
1
v u I v u H y x i


{ } ) , ( ) , ( ) , ( '
1
v u R v u H y x r


Prendre lexponentielle
) , ( ) , (
)] , ( ' exp[ )]. , ( ' exp[
)] , ( exp[ ) , (
0 0
y x r y x i
y x r y x i
y x s y x g

o )] , ( ' exp[ ) , ( et )] , ( ' exp[ , (


0 0
y x r y x r y x i y x i .
SIMES 961620 Dlivrable 7 10
2 RESTAURATION DIMAGES
La restauration est ncessaire lorsque limage est dgrade. Elle a pour but de corriger
les distorsions introduites lors des tapes dacquisition ou de transmission des images. En
supposant que limage ait t dgrade, on va tenter de lui redonner sa qualit originelle en
utilisant ce que lon sait sur la dgradation quelle a subie. Cette approche implique donc la
dfinition dun critre de qualit que lon cherchera optimiser.
Le processus de restauration dbute avec la modlisation de la dgradation subie par
limage. On procde ensuite lapplication du modle inverse de la dgradation sur limage
restaurer, ce qui permet dobtenir limage originelle.
2.1 Suppression du bruit
Le bruit est lensemble des parasites prsents dans limage. Il peut tre d au systme
dacquisition de limage, aux erreurs de connexion, ou un mauvais calibrage de la sensibilit
des capteurs. Le bruit peut tre gaussien (lectronique), ou impulsionnel [13].
La suppression du bruit est lune des premires tapes du traitement dimages. Le
traitement dune image sans bruit est plus simple que celui dune image bruite. Pour liminer
le bruit, on procde un filtrage de limage.
2.1.1 Filtrage linaire
Le filtrage linaire est trs utile dans le cas o lon ne dispose priori daucune
connaissance sur limage traiter. Il utilise des algorithmes de faible complexit dont les
rsultats sont satisfaisants sur la plupart des types dimages. Il consiste remplacer chaque
valeur de pixel par une combinaison linaire des intensits de ses voisins. Les coefficients de
cette combinaison linaire, fournis par la rponse impulsionnelle du filtre, sont reprsents par
une matrice appele masque de convolution qui donne son nom au filtre.
Le filtre moyenne
On remplace chaque valeur de pixel par la moyenne arithmtique de celles de ses
voisins. Son masque 33 de convolution peut tre :
8
1

,
_

1 1 1
1 0 1
1 1 1
Le filtre passe-bas (ou pondration bidimensionnelle de Gauss)
Il permet damortir les parasites et dinterpoler les donnes manquantes ou
endommages. Lun des masques 33 utilis se prsente comme suit :
16
1

,
_

1 2 1
2 4 2
1 2 1
SIMES 961620 Dlivrable 7 11
On peut galement utiliser le masque 33 :
9
1

,
_

1 1 1
1 1 1
1 1 1
,
ou le masque 55 (compos uniquement de 1) multipli par
25
1
, le masque 77 (compos
uniquement de 1) multipli par
49
1
.
Le filtre passe-haut
Il limine les termes de frquence nulle. Pour limplmenter, on utilise le masque 33
donn ci-aprs :

9
1

,
_

1 - 1 - 1 -
1 - 8 1 -
1 - 1 - 1 -
2.1.2 Filtrage non linaire
Le filtrage mdian
Il limine les pics isols cest--dire correspondant au bruit de type salt . Son
principe est simple :
Sur une fentre de nn pixels (voisinage dun pixel) avec n impair, classer les pixels
par ordre croissant dintensit,
Affecter la valeur de la mdiane au pixel central,
Appliquer cette mthode toute limage.
La moyenne dimages
Etant donne une image bruite ) , ( ) , ( ) , ( y x y x f y x g + o ) , ( y x f est limage
originelle et ) , ( y x le bruit (suppos de moyenne nulle), il sagit de rduire les effets du
bruit en ajoutant ) , ( y x g un ensemble dimages bruites { } ) , ( y x g
i
.
On peut montrer que ) , (
1
) , (
M
1 i
i
y x g
M
y x g

(15)
et que
M
y x
y x g
) , (
) , (
2
2

, (16)
cest--dire que la variabilit des valeurs des pixels diminue quand M , nombre dimages
moyennes, augmente.
2.2 Modle de la dgradation
On assimile le processus de dgradation un oprateur H , et lon crit limage
dgrade sous la forme :
) , ( )] , ( [ ) , ( y x y x f H y x g + (17)
o reprsente le bruit.
SIMES 961620 Dlivrable 7 12
Les mthodes de restauration dimages [5] sont alors bases sur la recherche de la
fonction f , loprateur H et le bruit tant connus.
Dans le domaine continu
Si le bruit est nul ( ) , ( y x = 0) et loprateur H linaire, alors lgalit (17) scrit :
) , ( y x g =

2
) , , , ( ) , (
R
d d y x h f (18)
avec h(x,,y,) = H[(x-,y-)] ,
qui est une quation intgrale de Fredholm de premire espce en f [16].
Si le bruit est nul et H un invariant spatial cest--dire H [(x-,y-)] = h(x-,y-),
alors lgalit (17) scrit :
) , ( y x g =

2
, - ( ) , (
R
d )d y- x h f , (19)
qui est une quation de convolution en f [9].
Dans le domaine discret
En supposant le bruit nul, lgalit (17) scrit :
) , ( y x g
e
=


1 - M
0 m
1 - N
0 n
(x-m,y-n) (m,n)h f
e e
(20)
x =0,1,,M-1 ; y =0,1,,N-1
o
e e
h f et

sont les fonctions tendues de f et h supposes priodiques.
La formule (18) peut scrire sous forme matricielle de la faon suivante :
g = H f (21)
o H est une matrice MNMN circulaire par blocs,
e
h

invariant spatial.
Par exemple pour une image 256256, la matrice H aura une taille de 262144
262144 et la recherche de f ncessitera la rsolution dun systme de 262144 quations
262144 inconnues.
Remarque :
Dans lquation (17) si loprateur H est lidentit alors on a le modle dune image
simplement bruite et la restauration se rsume la suppression du bruit. Ainsi la suppression
du bruit peut tre considre comme une technique de restauration.
2.3 Approche algbrique de rsolution
On considre une image dgrade bruite avec un oprateur de dgradation isotrope :
SIMES 961620 Dlivrable 7 13
) , ( y x g
e
=


1 - M
0
1 - N
0 n m
e e
(x-m,y-n) (m,n)h f + ) , ( y x
e
, (22)
x = 0, 1 ,, M-1 ; y = 0, 1,, N-1
qui scrit sous forme matricielle : g = H f + n (23)
o f, g et n sont des matrices colonnes MN1 et H une matrice MNMN circulaire par blocs.
Lapproche algbrique consiste chercher une approximation

f de f qui minimise un
critre de performance prdfini [1] [3] [4].
2.3.1 Restauration sans contrainte
On rcrit (23) sous la forme n = g H f (23 bis)
et lon pose : J(f) = || g H f ||
2
(24)
La fonction

f qui minimisera J est la solution de lquation


f
J(f)

= 0 ; elle sexprime sous la


forme

f = H
-1
g (25).
2.3.2 Restauration avec contrainte
Dans ce cas J(f) = ||Qf||
2
+ (|| g H f ||
2
-|| n ||
2
) (26)
o Q est un oprateur linaire sur f et un multiplicateur de Lagrange. Dans [15] on montre
que la solution recherche vaut :

f = (H
T
H + Q
T
Q)
-1
H
T
g (27)
avec =
-1
.
2.3.3 Restauration sous contrainte de rgularit
On pose J(f) = || g- H f||
2
+(f) (28)
o (f) est un terme de rgularisation qui dpend gnralement du gradient de f ou de la
matrice des drives dordre suprieur de f [14]. Le problme de retrouver f partir de g est
alors formul comme celui de retrouver f qui minimise lnergie J(f).
Si (f) = |f|
2
est quadratique, on a la rgularisation de Tikhonov qui,
malheureusement, pnalise les discontinuits.
2.4 Filtrage inverse
On suppose que limage est carre et H diagonalisable ; alors lgalit (25) devient
W
-1

f =D
-1
W
-1
g (29)
o D est une matrice diagonale et W une matrice de passage .
On montre que lgalit (29) vaut :
SIMES 961620 Dlivrable 7 14

F(u, v) =
v) H(u,
v) G(u,
; u, v = 0, 1, 2,, N-1 (30)
G(u, v) est donc multiplie par linverse du filtre H(u, v), do le nom de la mthode. En
prenant la transformation inverse de Fourier de

F(u, v ), on retrouve

f .
2.5 Filtrage de Wiener
On considre le filtre :
[ ] v) u, ( v)/S (u, S v) H(u,
v) H(u,

v) H(u,
1
f n
2
2
+
o ) , (
f
v u S et

) , ( v u S
n
sont les densits spectrales
respectives de f
e
(x, y)

et
e
(x, y)
.
Si = 1 alors le filtre ci-dessus est connu sous le nom de filtre de Wiener .
Si ) , ( v u S
n
= 0 ( absence de bruit) alors on retrouve le filtre inverse.
2.6 Transformations gomtriques
A la diffrence des techniques voques jusquici, les transformations gomtriques
modifient en gnral les relations spatiales entre les pixels dune image. Elles sont le plus
souvent appeles transformations en feuille de caoutchouc, car comparables ce que lon
obtiendrait dune image imprime sur une feuille de caoutchouc quon tirerait suivant
certaines rgles bien dfinies.
En termes de traitement dimages numriques, une transformation gomtrique
consiste raliser deux oprations de base :
Une transformation spatiale qui dfinit le rarrangement des pixels sur limage plane ;
Une interpolation des valeurs des pixels qui r-attribue diffrentes valeurs chacun des
pixels de limage transforme spatialement.
2.7 Techniques utilisant les quations aux drives partielles (EDP)
Les mthodes prcdentes fournissent des rsultats qui prsentent des oscillations prs
des discontinuits. Pour contourner cette difficult, les nouvelles approches posent le
problme de la restauration dimages comme un problme de rgularisation avec
lintroduction des EDP [14]. Lapproche classique utilise une EDP linaire o limage
restaure u peut scrire comme produit de convolution de limage bruite v avec un oprateur
de lissage G :
u = G v (31)
Si lon suppose G gaussien, lquation (31) peut alors se mettre sous la forme dune
quation aux drives partielles de type parabolique linaire :

'

) , ( ) 0 , , (
) , , ( ) , , ( ) , , (
0
yy xx
y x u y x u
t y x u t y x u t y x
t
u
(32)
SIMES 961620 Dlivrable 7 15
Cette EDP permet une diffusion isotrope, ce qui prsente des inconvnients
notamment au niveau de la qualit visuelle de limage. Pour contourner cette difficult, on
utilise le modle de Prona et Malik [11][12] donn par :

'

) , ( ) 0 , , (
)) , , ( ) ) , , ( ( ( ) , , (
0
y x u y x u
t y x u t y x u c div t y x
t
u
(33)
o div et reprsentent respectivement les oprateurs de divergence et de gradient par
rapport aux variables spatiales et o la fonction c(.) est dcroissante.
Lquation (33) est une EDP non linaire. Mais ce modle savre inefficace dans les
zones o le bruit prsente de grosses discontinuits. Pour surmonter ces difficults dautres
modles sont prsents dans [10].
SIMES 961620 Dlivrable 7 16
DEUXIEME PARTIE
Pseudo code, processus dimplmentation et code source de quelques
algorithmes de pr-traitement dimages
3 Pseudo codes des quelques algorithmes
3.1 Filtre mdian
Procdure f_median ;
/* Applique le filtre mdian sur des donnes images prises en entre */
Donnes en entre :
source : pointeur ; /* pointe sur le tableau correspondant limage source */
ligne : entier positif ; /* nombre de lignes de limage en entre */
colonne : entier positif ; /* nombre colonnes de limage en entre */
Rsultats :
destination : pointeur ; /* pointeur sur le tableau correspondant limage traite */
Variables de travail :
pt : pointeur ; /* pointeur sur un tableau de valeurs correspondant celles dun
voisinage dun pixel en entre*/
Enchanement des oprations :
Dbut
Allouer(pt) ;
Traiter_les_elts_non_en_bordure (source, destination, ligne, colonne) ;
Traiter_les_elts_en_bordure (source, destination, ligne, colonne) ;
Librer(pt) ;
Retourner(destination) ;
Fin.
Raffinement de Traiter_les_elts_non_en_bordure ;
/* Applique le filtre mdian sur les lments les plus internes de limage en entre */
Donnes en entre :
Source : pointeur ; /* pointeur sur limage en entre */
ligne : entier positif ; /* nombre de lignes de limage en entre */
colonne : entier positif ; /* nombre colonnes de limage en entre */
Donnes en sortie :
Destination : pointeur ; /* pointe sur limage en sortie */
Variables de travail :
i, j : entier positif ;
Enchanement des oprations :
Dbut
i2 ; /* permet de parcourir les lignes de limage */
j2 ; /* permet de parcourir les colonnes de limage */
Tant que i < derniere_ligne faire
Tant que j < dernire_colonne faire
Ranger dans le tableau point par pt les lments
SIMES 961620 Dlivrable 7 17
du voisinage 33 du pixel (i,j) de limage pointe par source ;
Rechercher et ranger la valeur mdiane en position (i,j)
dans le tableau point par destination ;
jj+1 ;
Fin tant que
ii+1
Fin tant que
Fin
Raffinement de Traiter_les_elts_en_bordure ;
/* Applique le filtre mdian sur les lments en bordure de limage prise en entre */
Donnes en entre :
Source : pointeur ; /* pointeur sur limage en entre */
ligne : entier positif ; /* nombre de lignes de limage en entre */
colonne : entier positif ; /* nombre colonnes de limage en entre */
Donnes en sortie :
Destination : pointeur ; /* pointe sur limage en sortie */
Variables de travail :
i, j : entier positif ;
Enchanement des oprations :
dbut
/* Pour les lments extrmes : premire et dernire lignes */
Ranger dans le tableau point par pt les lments
du voisinage 23 du pixel (i,j) de limage pointe par source ;
Rechercher et ranger la valeur mdiane en position (i,j)
dans le tableau point par destination ;
/* Pour les lments extrmes : premire et dernire colonne */
Ranger dans le tableau point par pt les lments
du voisinage 32 du pixel (i,j) de limage pointe par source ;
Rechercher et ranger la valeur mdiane en position (i,j)
dans le tableau point par destination ;
/* Pour les quatre coins */
Ranger dans le tableau point par pt les lments
du voisinage 22 du pixel (i,j) de limage pointe par source ;
Rechercher et ranger la valeur mdiane en position (i,j)
dans le tableau point par destination ;
Fin
Fonction mdiane ;
/* Recherche la valeur mdiane dun tableau dentiers */
Donnes en entre :
source : pointeur ; /* pointe sur le tableau dentiers */
SIMES 961620 Dlivrable 7 18
taille : entier positif ; /* taille du tableau*/
Rsultats :
v_median : entier ; /* valeur mdiane du tableau*/
Enchanement des oprations :
Dbut
Ranger les lments du tableau dans lordre croissant ;
Si taille est impaire alors
v_median=lment du milieu du tableau
sinon
v_median=moyenne des deux lments centraux
Finsi ;
Retourner (v_median)
Fin
3.2 Filtre moyenne
Procdure f_moyen ;
/* Applique le filtre moyenne sur limage en entre */
Donnes en entre :
source : pointeur ; /* pointe sur le tableau correspondant limage source */
ligne : entier positif ; /* nombre de lignes de limage en entre */
colonne : entier positif ; /* nombre colonnes de limage en entre */
Rsultats :
destination : pointeur ; /* pointeur sur le tableau correspondant limage traite */
Enchanement des oprations :
Dbut
Allouer(pt) ;
Traiter_les_elts_non_en_bordure (source, destination, ligne, colonne) ;
Traiter_les_elts_en_bordure (source, destination, ligne, colonne) ;
Librer(pt) ;
Retourner(destination) ;
Fin.
Remarque :
Les procdures Traiter_les _elts_non_en_bordure et
Traiter_les_elts_en_bordure
ont la mme structure que prcdemment. Il suffit de remplacer mdiane par
moyenne.
Fonction demi_moyenne ;
/* Recherche la moyenne des lments dun tableau dentiers en utilisant comme diviseur
taille-1 */
Donnes en entre :
source : pointeur ; /* pointe sur le tableau dentiers */
taille : entier positif ; /* taille du tableau*/
Rsultats :
v_moyen : entier ; /* valeur moyenne entire du tableau*/
Enchanement des oprations :
Dbut
SIMES 961620 Dlivrable 7 19
v_moyen= (somme des lments du tableau point par source)/(taille-1) ;
Retourner(v_moyen) ;
Fin
3.3 Filtre passe_bas
Procdure f_p_bas ;
/* Applique le filtre passe_bas sur limage en entre
Elle est semblable la procdure filtre moyen ; la seule diffrence est quon utilise une
fonction moyenne qui calcule la moyenne arithmtique */
Fonction moyenne ;
/* Recherche la moyenne arithmtique des lments dun tableau dentiers */
Donnes en entre :
source : pointeur ; /* pointe sur le tableau dentiers */
taille : entier positif ; /* taille du tableau*/
Rsultats :
v_moyen : entier ; /* valeur moyenne entire du tableau*/
Enchanement des oprations :
Dbut
v_moyen= (somme des lments du tableau point par source)/taille ;
Retourner(v_moyen) ;
Fin
4 CODES SOURCES ET TESTS DIMPLEMENTATION
4.1 Le filtre mdian
/*===================================================================*
* CE MODULE CONTIENT LES FONCTIONS mediane ET f_median *
*===================================================================*/
/*************************************************************************
* *
* EN ENTREE: Pointeur sur un tableau d'entiers positifs, *
* taille du tableau. *
* EN SORTIE: entier positif correspondant la valeur mdiane des *
* lments du tableau *
* *
************************************************************************/
unsigned int mediane(unsigned int *p,unsigned int taille)
{
unsigned int i,k; /*Compteurs*/
unsigned int aux; /*Variable auxiliaire*/
unsigned int v_median; /*Variable mdiane*/
k=0; /*Mettre le compteur zro*/
/*Ordonner les lments du tableau*/
do { for(i=k+1;i<taille;i++)
if(p[k]>p[i]) /*Si le k ime lment est suprieur au ime*/
SIMES 961620 Dlivrable 7 20
{ aux=p[k]; /*alors permuter ces deux lments*/
p[k]=p[i];
p[i]=aux;
} /*Le k ime lment du tableau est sa place dfinitive*/
k++; /*On passe l'lment suivant*/
}
while(k<taille-1); /*On s'arrte l'avant dernier lment*/
if(taille%2) v_median = p[(taille-1)/2];
else v_median = (p[(taille-1)/2]+p[taille/2])/2;
return(v_median); /*Retourne la valeur mdiane*/
} /*Fin de la fonction mediane*/
/************************************************************************
* *
* EN ENTREE: Pointeur sur des donnes images, *
* nombre de lignes et de colonnes de l'image *
* EN SORTIE: Pointeur sur des donnes images traites. *
* *
************************************************************************/
unsigned int *f_median(unsigned int *p,unsigned int ligne,
unsigned int colonne)
{
unsigned int i,j; /*Comptent du le nombre de lignes et de colonnes
de l'image*/
unsigned int *pt; /*Pointeur sur un tableau 3*3 de valeurs des pixels
voisins du pixel (i,j)*/
unsigned int *aux; /*Pointeur retourn par la fonction*/
int m,n; /*Comptent le nombre de lignes et de colonnes du
voisinage de chaque pixel*/
/*Alloue de l'espace pour ranger les donnes filtres*/
if((aux=(unsigned int *)calloc(ligne*colonne,sizeof(unsigned
int)))==NULL)
{ printf("Mmoire insuffisante pour ranger les valeurs retournes par"
" f_median\n");
getch();
exit(1);
}
/*Alloue de l'espace pour ranger les lments du voisinage de chaque
pixel*/
pt=(unsigned int *)calloc(9,sizeof(unsigned int));
/*Elments les plus internes*/
for(i=1;i<ligne-1;i++)
for(j=1;j<colonne-1;j++)
{
for(m=-1;m<2;m++)
for(n=-1;n<2;n++)
{ pt[3*(m+1)+n+1]=p[(i+m)*colonne+j+n]; /*Fait pointer pt sur les
neuf lments du voisinage du pixel (i,j)*/
}
aux[i*colonne+j]=mediane(pt,9);
}
SIMES 961620 Dlivrable 7 21
/*Elments de la premire ligne sauf les deux extrmits*/
for(j=1;j<colonne-1;j++)
{
for(m=-1;m<1;m++)
for(n=-1;n<2;n++)
{ pt[3*(m+1)+n+1]=p[(1+m)*colonne+j+n]; /*Fait pointer pt sur les
six lments du voisinage du pixel (0,j)*/
}
aux[j]=mediane(pt,6);
}
/*Elments de la dernire ligne sauf les deux extrmits*/
for(j=1;j<colonne-1;j++)
{
for(m=-1;m<1;m++)
for(n=-1;n<2;n++)
{ pt[3*(m+1)+n+1]=p[(ligne-1+m)*colonne+j+n]; /*Fait pointer pt sur
les six lments du voisinage du pixel (ligne-1,j)*/
}
aux[(ligne-1)*colonne+j]=mediane(pt,6);
}
/*Elments de la premire colonne sauf les deux extrmits*/
for(i=1;i<ligne-1;i++)
{
for(m=-1;m<2;m++)
for(n=-1;n<1;n++)
{ pt[2*(m+1)+n+1]=p[(i+m)*colonne+1+n]; /*Fait pointer pt sur les
six lments du voisinage du pixel (i,0)*/
}
aux[i*colonne]=mediane(pt,6);
}
/*Elments de la dernire colonne sauf les extrmits*/
for(i=1;i<ligne-1;i++)
{
for(m=-1;m<2;m++)
for(n=-1;n<1;n++)
{ pt[2*(m+1)+n+1]=p[(i+1+m)*colonne-1+n]; /*Fait pointer pt sur les
six lments du voisinage du pixel (i,colonne-1)*/
}
aux[(i+1)*colonne-1]=mediane(pt,6);
}
/*Coin suprieur gauche*/
pt[0]=p[0];
pt[1]=p[1];
pt[2]=p[colonne];
pt[3]=p[colonne+1];
aux[0]=mediane(pt,4);
/*Coin suprieur droit*/
pt[0]=p[colonne-2];
pt[1]=p[colonne-1];
pt[2]=p[2*colonne-2];
pt[3]=p[2*colonne-1];
aux[colonne-1]=mediane(pt,4);
/*Coin infrieur gauche*/
pt[0]=p[(ligne-2)*colonne];
pt[1]=p[(ligne-2)*colonne+1];
SIMES 961620 Dlivrable 7 22
pt[2]=p[(ligne-1)*colonne];
pt[3]=p[(ligne-1)*colonne+1];
aux[(ligne-1)*colonne]=mediane(pt,4);
/*Coin infrieur droit*/
pt[0]=p[(ligne-1)*colonne-2];
pt[1]=p[(ligne-1)*colonne-1];
pt[2]=p[ligne*colonne-2];
pt[3]=p[ligne*colonne-1];
aux[ligne*colonne-1]=mediane(pt,4);
free(pt);
return(aux); /*retourner le pointeur sur les donnes filtres*/
} /*Fin de la fonction f_median*/
4.2 Le filtre moyenne
/*===================================================================*
* CE MODULE CONTIENT LES FONCTIONS demi_moyenne ET f_moyen *
*===================================================================*/
/*************************************************************************
* *
* EN ENTREE: Pointeur sur un tableau N lments,
* taille du tableau
* EN SORTIE: Moyenne des N-1 lments du tableau
*
************************************************************************/
unsigned int demi_moyenne(unsigned int *p,unsigned int taille)
{
unsigned int i; /*Compteurs*/
unsigned int v_moyen; /*Valeur moyenne*/
v_moyen=0;
for(i=0;i<taille;i++) /*Parcourir le tableau*/
{ v_moyen+=p[i]; /*Fait la somme des lments du tableau*/
}
v_moyen/=(taille-1);
return(v_moyen); /*Retourne la "demi_moyennne"*/
} /*Fin de la fonction demi_moyenne*/
/*************************************************************************
* *
* EN ENTREE: Pointeur sur les donnes images, *
* nombre de lignes et de colonnes de l'image *
* EN SORTIE: Pointeur sur des donnes images traites. *
* *
*************************************************************************/
unsigned int *f_moyen(unsigned int *p,unsigned int ligne,unsigned int
colonne)
SIMES 961620 Dlivrable 7 23
{
unsigned int i,j; /*Compteurs*/
unsigned int *pt; /*Pointe sur un tableau de valeurs des pixels voisins
du pixel (i,j)*/
unsigned int *aux; /*Pointeur retourn par la fonction*/
int m,n; /*Compteurs*/
/*Alloue de l'espace pour ranger les donnes filtres*/
if((aux=(unsigned int *)calloc(ligne*colonne,sizeof(unsigned
int)))==NULL)
{ printf("Mmoire insuffisante pour ranger les valeurs retournes par"
" f_median\n");
getch();
exit(1);
}
/*Alloue de l'espace pour ranger les valeurs des pixels voisins du
pixel (i,j)*/
pt=(unsigned int *)calloc(9,sizeof(unsigned int));
/*Elments les plus internes*/
for(i=1;i<ligne-1;i++)
for(j=1;j<colonne-1;j++)
{
for(m=-1;m<2;m++)
for(n=-1;n<2;n++)
{ pt[3*(m+1)+n+1]=p[(i+m)*colonne+j+n];
}
pt[4]=0; /*L'lment central est nul*/
aux[i*colonne+j]=demi_moyenne(pt,9);
}
/*Elments de la premire ligne sauf les deux extrmits*/
for(j=1;j<colonne-1;j++)
{
for(m=-1;m<1;m++)
for(n=-1;n<2;n++)
{ pt[3*(m+1)+n+1]=p[(1+m)*colonne+j+n];
}
pt[1]=0; /*Le deuxime lment du voisinage est nul*/
aux[j]=demi_moyenne(pt,6);
}
/*Elments de la dernire ligne sauf les extrmits*/
for(j=1;j<colonne-1;j++)
{
for(m=-1;m<1;m++)
for(n=-1;n<2;n++)
{ pt[3*(m+1)+n+1]=p[(ligne-1+m)*colonne+j+n];
}
pt[4]=0; /*Le cinquime lment est nul*/
aux[(ligne-1)*colonne+j]=demi_moyenne(pt,6);
}
/*Elments de la premire colonne sauf les extrmits*/
for(i=1;i<ligne-1;i++)
{
for(m=-1;m<2;m++)
for(n=-1;n<1;n++)
{ pt[2*(m+1)+n+1]=p[(i+m)*colonne+1+n];
}
SIMES 961620 Dlivrable 7 24
pt[2]=0; /*Le troisime lment est nul*/
aux[i*colonne]=demi_moyenne(pt,6);
}
/*Elments de la dernire colonne sauf les extrmits*/
for(i=1;i<ligne-1;i++)
{
for(m=-1;m<2;m++)
for(n=-1;n<1;n++)
{ pt[2*(m+1)+n+1]=p[(i+1+m)*colonne-1+n];
}
pt[3]=0; /*Le quatrime lment est nul*/
aux[(i+1)*colonne-1]=demi_moyenne(pt,6);
}
/*Coin suprieur gauche*/
pt[0]=0;
pt[1]=p[1];
pt[2]=p[colonne];
pt[3]=p[colonne+1];
aux[0]=demi_moyenne(pt,4);
/*Coin suprieur droit*/
pt[0]=p[colonne-2];
pt[1]=0;
pt[2]=p[2*colonne-2];
pt[3]=p[2*colonne-1];
aux[colonne-1]=demi_moyenne(pt,4);
/*Coin infrieur gauche*/
pt[0]=p[(ligne-2)*colonne];
pt[1]=p[(ligne-2)*colonne+1];
pt[2]=0;
pt[3]=p[(ligne-1)*colonne+1];
aux[(ligne-1)*colonne]=demi_moyenne(pt,4);
/*Coin infrieur droit*/
pt[0]=p[(ligne-1)*colonne-2];
pt[1]=p[(ligne-1)*colonne-1];
pt[2]=p[ligne*colonne-2];
pt[3]=0;
aux[ligne*colonne-1]=demi_moyenne(pt,4);
free(pt); /*Libration de l'espace allouer pour ranger les lments du
voisinage*/
return(aux);
} /*Fin de la fonction f_median*/
4.3 Le filtre passe_bas
/*===================================================================*
* CE MODULE CONTIENT LES FONCTIONS moyenne ET f_p_bas *
*===================================================================*/
/*************************************************************************
* *
* EN ENTREE: Pointeur sur un tableau de donnes, *
* taille du tableau *
SIMES 961620 Dlivrable 7 25
* EN SORTIE: Moyenne des lments de ce tableau. *
* *
*************************************************************************/
unsigned int moyenne(unsigned int *p,unsigned int taille)
{
unsigned int i; /*Compteurs*/
unsigned int v_moyen; /*Valeur moyenne*/
v_moyen=0;
for(i=0;i<taille;i++) /*Parcourir le tableau*/
{ v_moyen+=p[i]; /*Faire la somme de ses lments*/
}
v_moyen/=taille;
return(v_moyen); /*Retourne la valeur moyenne*/
} /*Fin de la fonction moyenne*/
/*************************************************************************
* *
* EN ENTREE: Pointeur sur les donnes images, *
* nombre de lignes et de colonnes de l'image *
* EN SORTIE: Pointeur sur des donnes images traites. *
* *
*************************************************************************/
unsigned int *f_p_bas(unsigned int *p,unsigned int ligne,unsigned int
colonne)
{
unsigned int i,j; /*compteurs*/
unsigned int *pt; /*pointe sur les valeurs de pixels d'un voisinage du
pixel (i,j)*/
unsigned int *aux; /*Valeur retourne par la fonction*/
int m,n; /*Compteur*/
/*Alloue de l'espace pour ranger les donnes filtres*/
if((aux=(unsigned int *)calloc(ligne*colonne,
sizeof(unsigned int)))==NULL)
{ printf("Mmoire insuffisante pour ranger les valeurs retournes par"
" f_median\n");
getch();
exit(1);
}
/*Allocation d'espace pour ranger les valeurs des pixels voisins
du pixel (i,j)*/
pt=(unsigned int *)calloc(9,sizeof(unsigned int));
/*Elments les plus internes*/
for(i=1;i<ligne-1;i++)
for(j=1;j<colonne-1;j++)
{
for(m=-1;m<2;m++)
for(n=-1;n<2;n++)
{ pt[3*(m+1)+n+1]=p[(i+m)*colonne+j+n];
}
aux[i*colonne+j]=moyenne(pt,9);
}
SIMES 961620 Dlivrable 7 26
/*Elments de la premire ligne sauf les extrmits*/
for(j=1;j<colonne-1;j++)
{
for(m=-1;m<1;m++)
for(n=-1;n<2;n++)
{ pt[3*(m+1)+n+1]=p[(1+m)*colonne+j+n];
}
aux[j]=moyenne(pt,6);
}
/*Elments de la dernire ligne sauf les extrmits*/
for(j=1;j<colonne-1;j++)
{
for(m=-1;m<1;m++)
for(n=-1;n<2;n++)
{ pt[3*(m+1)+n+1]=p[(ligne-1+m)*colonne+j+n];
}
aux[(ligne-1)*colonne+j]=moyenne(pt,6);
}
/*Elments de la premire colonne sauf les extrmits*/
for(i=1;i<ligne-1;i++)
{
for(m=-1;m<2;m++)
for(n=-1;n<1;n++)
{ pt[2*(m+1)+n+1]=p[(i+m)*colonne+1+n];
}
aux[i*colonne]=moyenne(pt,6);
}
/*Elments de la dernire colonne sauf les extrmits*/
for(i=1;i<ligne-1;i++)
{
for(m=-1;m<2;m++)
for(n=-1;n<1;n++)
{ pt[2*(m+1)+n+1]=p[(i+1+m)*colonne-1+n];
}
aux[(i+1)*colonne-1]=moyenne(pt,6);
}
/*Coin suprieur gauche*/
pt[0]=p[0];
pt[1]=p[1];
pt[2]=p[colonne];
pt[3]=p[colonne+1];
aux[0]=moyenne(pt,4);
/*Coin suprieur droit*/
pt[0]=p[colonne-2];
pt[1]=p[colonne-1];
pt[2]=p[2*colonne-2];
pt[3]=p[2*colonne-1];
aux[colonne-1]=moyenne(pt,4);
/*Coin infrieur gauche*/
pt[0]=p[(ligne-2)*colonne];
pt[1]=p[(ligne-2)*colonne+1];
pt[2]=p[(ligne-1)*colonne];
pt[3]=p[(ligne-1)*colonne+1];
SIMES 961620 Dlivrable 7 27
aux[(ligne-1)*colonne]=moyenne(pt,4);
/*Coin infrieur droit*/
pt[0]=p[(ligne-1)*colonne-2];
pt[1]=p[(ligne-1)*colonne-1];
pt[2]=p[ligne*colonne-2];
pt[3]=p[ligne*colonne-1];
aux[ligne*colonne-1]=moyenne(pt,4);
free(pt); /*Libration de l'espace allouer*/
return(aux);
} /*Fin de la fonction f_median*/
4.4 Le zoom dune image
/*======================================================================*
* PROGRAMME DE VISUALISATION DES IMAGES *
*======================================================================*/
#include <graphics.h>
/**************************************************************************
* *
* EN ENTREE: Pointeur sur des donnes images, *
* nombre de lignes et de colonnes de l'image
* EN SORTIE: Image de dimensions triples *
* *
**************************************************************************/
void zoom_3(unsigned int *p,unsigned int ligne,unsigned int colonne,int
x0,int y0)
{
unsigned int i,j; /*Compte les lignes et colonnes de l'image*/
unsigned int k; /*Compte les donnes images*/
int m,n; /*Permettent de quadrupler chaque pixel*/
j=0;i=0;k=0; /*Initialisation*/
do
{ for(n=0;n<3;n++) /*Affichage d'un*/
for(m=0;m<3;m++) /*carr 3*3 de pixels*/
{ putpixel(x0+i+m,y0+j+n,*(p+k));
if( (x0+i+m)>getmaxy() || (y0+j+n)>getmaxx())
{ printf("Dbordement d'cran graphique pour le triple "
"de l'image\n");
getch();
exit(1);
}
}
i+=3; /*Saute une colonne*/
k++; /*Passe la donne image suivante*/
if(!(k%colonne)) /*Si l'on a lu une ligne de donnes images alors*/
{ j+=3; /*saute deux lignes de l'image que l'on est en train*/
i=0; /*d'afficher et revient la premire colonne*/
}
} while(k<ligne*colonne); /*Sort si l'on a lu la dernire donne image*/
SIMES 961620 Dlivrable 7 28
} /*Fin de la fonction zoom_3*/
4.5 Gnration des donnes
/*************************************************************************
* *
* Cre un tableau de donnes de type caractre non sign de dimensions *
* "ligne" lignes sur "colonne" colonnes *
* *
*************************************************************************/
unsigned int *creation(unsigned int *p,unsigned int ligne,unsigned int
colonne)
{
unsigned int i;
randomize();
for (i=0;i<ligne*colonne;i++)
{ *(p+i)=random(16);
if (*(p+i)<15) *(p+i)=3;
}
return(p);
}
4.6 Affichage des donnes
/*********************************************************************
* Affiche les donnes gnres sur l'cran en mode texte *
* *
*********************************************************************/
void afficher(unsigned int *p,unsigned int ligne,unsigned int colonne)
{
unsigned int i;
i=0;
printf("\n");
do { printf("%3d",*(p+i));
i++;
if(!(i%colonne)) printf("\n");
}
while(i<ligne*colonne);
printf("\n");
}
4.7 Passage en mode graphique
/*======Fonction de passage en mode graphique: VGA 16 couleurs===*/
void initialiser(void)
{
int graphdriver,graphmode,erreur;
graphdriver=DETECT;
initgraph(&graphdriver,&graphmode,"c:\\tc\\bgi");
erreur=graphresult();
if(erreur<0)
{ printf("Erreur dans initgraph :%s.\n",grapherrormsg(erreur));
exit(1);
}
}
SIMES 961620 Dlivrable 7 29
4.8 Fonction principale
/*TEST DES MODULES */
/*********************************************Fichiers inclure*/
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <graphics.h>
#include <stdlib.h>
#include <time.h>
/**********************************************Modules inclure*/
#include "c:\imsimes\calcul.c"
#include "c:\imsimes\graphe.c"
/*********************************************Variables globales*/
unsigned int *p1,*p2,*p3,*p4; /*Pointeurs sur des donnes images*/
unsigned int nb_lig,nb_col; /*Dimensions de l'image*/
unsigned int i; /*Compteur*/
main()
{
clrscr();
printf("\"N'affiche pas des images de plus de 80*80\"\n");
printf("Donnez les dimensions (en pixels) de l'image:\n");
do { printf("Hauteur de l'image en pixels: ");
scanf("%d",&nb_lig);
} while(nb_lig<2 || nb_lig >75);
do { printf("Largeur de l'image en pixels: ");
scanf("%d",&nb_col);
} while(nb_col<2 || nb_col >75);
/*********************************************Allocation de mmoire*/
if((p1=(unsigned int *)calloc(nb_lig*nb_col,sizeof(unsigned int)))==NULL)
{ printf("Pas de mmoire pour crer les donnes\n");
getch();
exit(1);
}
p1=creation(p1,nb_lig,nb_col); /*Donnes initiales*/
p2=f_median(p1,nb_lig,nb_col); /*Donnes retournes par le filtre mdian*/
p3=f_moyen(p1,nb_lig,nb_col); /*Donnes retournes par le filtre
"moyenne"*/
p4=f_p_bas(p1,nb_lig,nb_col); /*Donnes retournes par le filtre
"passe_bas"*/
clrscr();
/***********************************Affichage des donnes l'cran*/
printf("\n Donnes initiales \n");
afficher(p1,nb_lig,nb_col);
getch();
printf("Rsultats du filtre median\n");
afficher(p2,nb_lig,nb_col);
SIMES 961620 Dlivrable 7 30
getch();
printf("Rsultats du filtre moyen\n");
afficher(p3,nb_lig,nb_col);
getch();
printf("Rsultats du filtre passe_bas\n");
afficher(p4,nb_lig,nb_col);
getch();
initialiser(); /*Passage en mode graphique*/
cleardevice();
/************************************Affichage des histogrammes*/
affhist(p1,nb_lig*nb_col,"( Donnes initiales )");
getch();
cleardevice();
affhist(p2,nb_lig*nb_col,"( Filtre mdian )");
getch();
cleardevice();
affhist(p3,nb_lig*nb_col,"( Filtre moyenne )");
getch();
cleardevice();
affhist(p4,nb_lig*nb_col,"( Filtre passe_bas )");
getch();
cleardevice();
zoom_3(p1,nb_lig,nb_col,0,0);
zoom_3(p2,nb_lig,nb_col,3*nb_col+5,0);
zoom_3(p3,nb_lig,nb_col,0,3*nb_lig+5);
zoom_3(p4,nb_lig,nb_col,3*nb_col+5,3*nb_lig+5);
getch();
closegraph();
free(p1);
free(p2);
free(p3);
free(p4);
}
5 GUIDE DUTILISATION
Le code source ci-dessus est compos de deux modules. Pour compiler le programme
principal, nomm TEST_Z.c, il faut compiler et relier ces modules. Vous devez donc :
1. Crer un fichier calcul.c qui contiendra les fonctions et procdures creation, afficher,
mediane, f_median, moyenne, f_p_bas, demi_moyenne et f_moyen. ;
2. Crer un fichier graphe pour la fonction initialiser, zoom_3 ;
3. Compiler TEST_Z.c ;
4. Faire ldition de liens et excuter.
On peut modifier la boucle for de la fonction creation dans le but davoir des donnes
diffrentes.
SIMES 961620 Dlivrable 7 31
TROISIEME PARTIE
Rsultats des tests sur des tableaux de pixels
Test1 :
nb_lig=20, nb_col=20
Dans creation, remplacer la boucle for par :
for (i=0;i<ligne*colonne;i++)
{ *(p+i)=random(16) ;
if(*(p+i)<15) *(p+i)=3;
}
On gnre alors un tableau 20 20 des valeurs compos de 3 et 15.
Voici les rsultats :
Les 15 sont peu nombreux et disperss ; ils peuvent tre assimils du bruit. On
suppose alors quon a une image de couleur unique sur laquelle figurent des tches.
Lide est alors deffacer ces tches.
SIMES 961620 Dlivrable 7 32
Aprs passage du filtre mdian, seul le coin suprieur gauche est entach.
Sur ce type de donnes le filtre moyenne ne donne pas satisfaction, il dnature
davantage limage.
SIMES 961620 Dlivrable 7 33
Ici le filtre passe_bas a presque le mme effet que le filtre moyenne .
Affichage des quatre images :
Le filtre mdian a rendu limage nette ; les autres par contre lont dgrade.
SIMES 961620 Dlivrable 7 34
Test2 :
nb_lig=70, nb_col=70
Dans creation, remplacer la boucle for par :
for (i=0;i<ligne*colonne;i++)
{ if(!(i%23)) *(p+i)=4;
else *(p+i)=15;
}
SIMES 961620 Dlivrable 7 35
Test3 :
nb_lig=50, nb_col=50.
Dans creation, remplacer la boucle for par :
for (i=0;i<ligne*colonne;i++)
{ if(!(i%23)) *(p+i)=4;
else if(!(i%17)) *(p+i)=3;
else *(p+i)=15;
}
CONCLUSION
Aprs un survol des techniques de traitement dimages, nous avons implment et
test trois dentre elles sur des tableaux de pixels. Des tests sur des images de la rgion des
deux sites pilotes restent faire, de mme que limplmentation dautres algorithmes de
restauration et damlioration dimages.
SIMES 961620 Dlivrable 7 36
BIBLIOGRAPHIE
[1] Andrews, H.C. et Hunt B.R.
Digital Image Restoration
Prentice-Hall, Englewood Cliffs, N.J. . 1977
[2] Bellman R.
Introduction to Matrix Analysis
2
nd
ed., McGraw-Hill, New York. 1970.
[3] B. R. hunt.
The application of constrained least squares estimation to image restoration by digital
computer. IEEE Trans. Computer, C-22(9) : 805-812, 1973.
[4] Helstrom C.W.
Image Restoration by the Method of Least Squares.
J. Opt. Soc. Am. vol. 57, no. 3, pp. 297-303. 1967.
[5] Jain A.K. and Angel E.
Image Restoration, Modeling, and Reduction of Dimensionality.
IEEE Trans. Computers., vol. C-23, pp. 470-476. . 1974
[6] Noble B.
Applied Linear Algebra,
Prentice-Hall, Englewood Cliffs, N.J. 1969.
[7] Radu Horaud, Olivier Monga
Vision assiste par ordinateur.Les outils foncdamentaux .Editions Herms
[8] Philippe Cottet.
1 week end pour comprendre et utiliser limage et le graphisme.
Osman Eyrolles Multimdia. 1999.
[9] Phillips D.L.
A Technique for the Numerical Solution of Certain Integral Equations of the First Kind.
J. Assoc. Comp. Mach., vol. 9, pp. 84-97. 1962
[10] P. Charbonnier.
Reconstruction dimage : Rgularisation avec prise en compte des discontinuits.
Thse, Universit de Nice Sophia-Antipolis, Septembre 1994.
[11] P. Perona and J. Malik.
Scale-space and edge detection using anisotropic difusion.
IEEE Trans. Patern. Analysis and Machine Intelligence, 12(7) : 629-639, 1990.
[12] P. Perona, T. Shiota, and J. Malik.
Anisotropic diffusion
In Bart M. ter Haar Romeny, editor, geometry-driven Diffusion in computer vision,
page 7-79.
SIMES 961620 Dlivrable 7 37
[13] P. Provent.
Cours de traitement des images.
2
me
anne .SPE-Cours de traitement dimages.Avril 1995.
[14] Rachid deriche et Olivier faugeras.
Les EDP en Traitement des Images et Vision par Ordinateur.
Traitement du Signal, 13(6), 1996.
[15] Rafael C. Gonzalez, Richard E. Woods.
Digital image processing.
Addison-Wesley, Septembre 1993.
[16] Twomey, S.
On the Numerical Solution of Fredholm Integral Equations of the First Kind by
the Inversion of the Linear System Produced by Quadrature
J. Assoc. Comp. Mach., vol. 10, pp. 97-101. 1963
SIMES 961620 Dlivrable 7 38

Das könnte Ihnen auch gefallen