Vous êtes sur la page 1sur 12

RESTAURATION

Bruit
Caractristiques
Bruit dpendant des donnes image. Ex : bruit de quantification Bruit indpendant des donnes image. Ex : poussires sur lobjectif, rayures

Modlisation
Bruit additif : J(x,y) = I(x,y) + N(x,y) Bruit multiplicatif : J(x,y) = I(x,y) . N(x,y) (ex speckle dune image radar) Les pixels d'une zone homogne seront d'autant plus bruits que leur niveau de gris est lev

FILTRAGE du BRUIT a- filtres linaires

Bruit multiplicatif gaussien

Bruit additif gaussien

Bruit
Bruit impulsionnel
Dfini par une densit de probabilit

Bruit
Bruit gaussien
"K x
#

f ( x) = C e

"=10

"=20

!=1 : bruit exponentiel

!=2 : bruit gaussien

Bruit
Bruit Poivre et Sel
"=20

Bruit

bruit poivre et sel

TRAITEMENT LOCAL
I y x } T J y x j j = T(Vxy )

FILTRES LINAIRES
Les ltres linaires sexpriment sous forme de convolution]
# #

( f * h)(x, y) = ( f * h)(x, y) =

$$
"# "# # # "# "#

f (a,b).h(x " a, y " b)dadb

En faisant intervenir les pixels voisins de (x,y), permet de : - restaurer une image dgrade - corriger du bruit ou des parasites - renforcer ou supprimer des petits dtails - dtecter des structures locales (contours,)

$ $ h(a,b). f (x " a, y " b)dadb

Si le support de h est petit devant f, on peut crire la convolution discrte :

+w

+w

Principe :

La nouvelle valeur du pixel courant Pc est calcule partir des valeurs des pixels voisins.

J ( x, y ) =

# # h(k,l) I( x " k, y " l)


k="w l="w

o h est un ltre de taille [2w+1 x 2w+1] (ex [3x3] si w=1) Paramtres : - forme et taille du voisinage - poids des pixels voisins Implantation - sparable ou non - problme des bords de l'image On reprsente donc le ltre par un tableau h de coefcients. ! La nouvelle valeur de Pc est la somme des valeurs des pixels voisins, pondrs par les coefcients de h.

FILTRAGE par la MOYENNE


+w +w

FILTRAGE par la MOYENNE

J ( x, y ) =

# # h(k,l) I( x " k, y " l)


k="w l="w

Pour un ltre !moyenne! de taille [3x3] : - les coefcients valent 1 et on normalise par 1/9 dans le cas de la 8-connexit -! coefcients valent 1 et on normalise par 1/5 dans le cas de la 4-connexit les
0 1 0 1 1 1 0 1 0

% 1 : & 2n + 1 '0

x #[ $ n,n ] sinon

1 (2n+1)2

4-connexit

1 1 .. 1 1 .. : : : 1 1 ..

1 1 : 1

nouvelle valeur =

=10,44 arrondi 10

FILTRAGE par la MOYENNE

Filtrage par la moyenne

Profil de la ligne

Critique :
Le ltre !moyenne! (et les ltres linaires) lisse les contours, ce qui donne une impression de ou et donc dimage de moins bonne qualit. => mthode peu adapte pour un traitement visuel de limage. Original bruit

Filtrage :

moyenne 3x3

moyenne 5x5

Filtrage par la moyenne

FILTRE !Moyenne! : dgradation des contours

!! !! !!

x Dans les zones de contours, la moyenne combine des pixels appartenant des objets diffrents.

niveau de gris

x x

FILTRE GAUSSIEN
#x 2 1 e2! 2 2 " .! #(x 2 + y 2 ) 1 e 2 !2 2 " .! 2

FILTRE GAUSSIEN: Ralisation directe


#x 2 1 e 2! 2 2 " .! #(x 2 + y 2 ) 1 e 2 !2 2 " .! 2

g( x, ! ) =

g( x, y, ! ) =

g( x, ! ) =

g( x, y, ! ) =

Caractristiques 1" #0

lim g( x," ) = $ ( x )
n

On peut ajuster le degr de filtrage


n

2-

# g ( x," ) = g( x," )
i i S i=1

avec " S =

$"
i=1

2 i

si ! i = ! "i = 1..n , ! S = ! n

3- Implmentation : le filtre gaussien est sparable

.719e-7, .289e-4, .213e-3, .289e-4, .719e-7,

.289e-4, .116e-1, .859e-1, .116e-1, .289e-4,

.213e-3, .859e-1, .636, .859e-1, .213e-3,

.289e-4, .116e-1, .859e-1, .116e-1, .289e-4,

.719e-7 .289e-4 .213e-3 .289e-4 .719e-7

FILTRE GAUSSIEN: Exemples


taille3
0 0.458 1 1.000 2 0.458

FILTRES SPARABLES
Le ltre f est sparable si f(x,y) = fa(x).fb(y) Or : I * f (x,y) = I * ( fa(x).fb(y) ) = I * fa(x) * fb(y)

Si fa = fb = fu I * f(x,y) = I * ( fu(x).fu(y) ) = I * fu(x) * fu(y) =( I * fu(x)) * fu(y)


taille 5
0 1 2 3 4 0.249 0.707 1.000 0.707 0.249

Pour appliquer f (2D) I, il suft dappliquer fu (1D) sur les lignes, puis fu sur les colonnes du rsultat.

FILTRE GAUSSIEN: Ralisation par ltre 1D


g( x, ! ) =
#x 2 1 e2! 2 2 " .!

FILTRE GAUSSIEN: Ralisation par CASCADE de gaussiennes On peut raliser n'importe quelle gaussienne par une cascade de petits ltres gaussiens g" identiques
=> - un seul filtre raliser - complexit d'une cascade de g! = complexit de la ralisation directe de g !S - mais taille du masque quivalent multiplie par "n

g( x, y, ! ) =

#(x 2 + y 2 ) 1 e 2 !2 2 " .! 2

g(x, ") g(y, ")

Il est sparable =>


1 2 n

g(x, !)

g(x,y, ")
g(y, !)
.267e-3, .108, .797, .108, .267e-3

g(x,y, !)

g(x,y, !)
g(x,y,"" n)

g(x,y, !)

FILTRE BLOC
Soit la fonction B-Spline d'ordre k
k +1 ("1) j j .Ck+1 .( x

FILTRE de CANNY- DERICHE


! k ( x) =

j=0

k +1 + " j) k + 2 k!

Filtre de Deriche - lissage

n! p xk k , k $ 0 , x+ = { 0 avec : Cn = p!( n " p)!


! 0 ( x)
1

si x$0 sin on

!1 ( x)

! 2 ( x)

f ( x) = k(1+ ! x )e "! x
-0,5 0,5 -1 1 -1,5 1,5

Soit la squence Sk 1 x y % S ( x, y,a) = 2 ( 0 ( ) ( 0 ( ) & 0 a a a ' Sk ( x, y,a) = Sk$1 ( x, y, a) * S0 ( x, y,a)


(cascade de ltres blocs lmentaires de taille a x a)

k=

S0 ( x, y, a) a a

(1 ! e ) 1 + 2 " e !" ! e !2"

!" 2

Une cascade de k ltres blocs S 0(x,y,a) est quivalente une gaussienne :


k

! S0 ( x, y,a) " g( x, y, # ) , avec # = a 12 i=1

FILTRE de CANNY-DERICHE Implmentation


implmentation rcursive => pas de coupure ex. y(m) convolution de x(m) par f :
y (m) = ax(m !1) ! b1 y (m ! 1) ! b2 y ( m ! 2) m = 1 a N y (m) = ax(m + 1) ! b1 y (m + 1) ! b2 y ( m + 2) m = N a 1 y(m) = y ! (m) + y + ( m) m = 1 a N
! ! ! + + +

FILTRE ISEF

(Innite Symmetrical Exponential Filter)


(Shen)
! ln (b) 2

f ( x) = a.b x

avec 0 < b < 1

a=

a=!/2

b = e "!

a<1

f ( x) = ( ! / 2)e "! x

! >0

a x

cas discret :

a=

b2 b1

1! b 1+ b

0 < a <1

y+


m m-1 m-2

! petit => fort ltrage

FILTRE ISEF

(Innite Symmetrical Exponential Filter)

FILTRE ISEF

Cascade de ltres ISEF


f ( x) = f1 ( x) * f2 ( x)** fn ( x) , avec & 1 # g( x, $ n ) avec $ n = (2 % 2 + !i * '
1 )2

fi ( x ) =

! i "!i x e 2

on crit : avec :

f ( x) = fG ( x ) * f D ( x )
x

(1)
x>0 x&0

"0 "2.a.b x!0 fD ( x ) = # %x fG ( x ) = # $ 2.a.b x<0 $0 1 => on a : f ( x) = ( fG ( x) + f D ( x) % 2 a.' ( x )) (2) 2

Cascade de 2 ltres ISEF


#1 % fS ! + x e '" x $" &

(1) => I( x )* f (x ) ) I( x )* fG ( x)* f D (x )

FILTRE ISEF Mthode 1

: RALISATION RCURSIVE

FILTRE ISEF Mthode 2

: RALISATION RCURSIVE

On utilise les ltres rcursifs :

(x : entre, y: sortie)

fG (i) : y(i) = a0 .x(i) + a1.y(i ! 1) i = 1..N f D (i) : y(i) = a0 .x(i) + a1 .y(i + 1) i = N..1

Soit

En prenant 0 < a0 < 1 et a0 + a1 = 1 pour normaliser, on obtient :


Y1 (i) = a 0 .( X(i) ! Y1 (i ! 1)) + Y1 (i ! 1) i = 1.. N Y(i) = a0 .(Y1 (i) ! Y(i + 1)) + Y(i + 1) i = N.. 1

1! b . X(i) + b.YG (i ! 1) i = 1..N 1+ b 1! b YD (i) = b. . X (i) + b.YD (i +1) i = N..1 1+ b YG (i) =


Y (i ) = YG (i) + YD (i + 1)

Alors

ralise le ltre avec


i=+" i=!"

f (i ) =

1! b i b 1+ b

# f (i) = 1

a0 x a1 yG


i-1 i

FILTRE ISEF 2D 1D
f ( x) = a.e !" x

FILTRE ISEF 2D
x2 + y2)

" >0
fe := ( x , y ) ! ( "a 1 ae 2

Gnralisation 2D
Choix d'une distance D
f ( D( x, y)) = a.e !" D(x,y)

" >0
a := .5

Distance euclidienne
De ( x, y) = ( x + y )
2 2

=>

fe ( x, y ) = a.e

! " . (x 2 + y 2 )

ltre symtrique circulaire mais : pas d'implmentation rapide donc approximation par un masque de taille nie => effet de coupure ou grande complexit de calcul

Distance valeur absolue


Dm ( x, y) = x + y => f ( x, y) = a.e !" .( x + y )

Ce ltre est sparable : f(i,j) = f(i) . f(j)

FILTRE ISEF 2D
fs := ( x , y ) ! ( "a ( x + y ) ) 1 ae 2

CONVOLUTION
" "

Forme continue

( f * h)( x, y) =

!" !"

# # f (a, b).h( x ! a, y ! b)dadb


+w

Forme discrte
a := .5

+w

J(x,y) =

k= "w l=-w

! ! h(k, l). I(x " k, y " l)


1 2 1

25 19
! .0017 # # .0028 # # .0045 # # .0075 # # .013 # # .021 # # .013 # # .0075 # # .0045 # # .0028 # " .0017 .0028 .0045 .0075 .013 .021 .035 .021 .013 .0075 .0045 .0028 .0045 .0075 .013 .021 .013 .0075 .0075 .013 .021 .035 .021 .013 .013 .021 .035 .055 .035 .021 .021 .035 .055 .095 .055 .035 .035 .055 .095 .16 .095 .055 .055 .095 .16 .25 .16 .095 .035 .055 .095 .16 .095 .055 .021 .035 .055 .095 .055 .035 .013 .021 .035 .055 .035 .021 .0075 .013 .021 .035 .021 .013 .0045 .0075 .013 .021 .013 .0075 .0045 .0075 .013 .021 .035 .055 .035 .021 .013 .0075 .0045 .0028 .0045 .0075 .013 .021 .035 .021 .013 .0075 .0045 .0028 .0017$ & .0028& & .0045& & .0075& & .013 & & .021 & & .013 & & .0075& & .0045& & .0028& & .0017%

13 20 12 13 16 11 20 5 8 16

25 8 10 22 20

16 14 26 25 12

1 2 2 4 1 2

4 10 4

nouvelle valeur = (1*22+2*8+1*16 +2*10+4*5+2*13 +1*8+2*20+1*12) = 180 ou = 180/16 = 11, si normalis

CONVOLUTION
f 1 1/2 1 a

+"

( f * h)(x, y) =
h(a)

!"

# f (a).h(x ! a)da
f 1

CONVOLUTION

+"

( f * h)(x, y) =
h(a) 1/2

!"

# f (a).h(x ! a)da

a h(-a)

a h(x-a)

-1

CONVOLUTION
f 1 1/2 1 h(-a) a

+"

( f * h)(x, y) =
h(a)

!"

# f (a).h(x ! a)da
f 1

CONVOLUTION

+"

( f * h)(x, y) =
h(a) 1/2

!"

# f (a).h(x ! a)da

1 h(x-a)

a h(-a)

a h(x-a)

-1 f(a).h(x-a)

(f*h)(x)

-1 f(a).h(x-a)

(f*h)(x)

1/2 1 x 1 2 x-1 x x<0 1

1/2 1 2

CONVOLUTION
f 1 1/2 1 h(-a) a

+"

( f * h)(x, y) =
h(a)

!"

# f (a).h(x ! a)da
f 1

CONVOLUTION

+"

( f * h)(x, y) =
h(a) 1/2

!"

# f (a).h(x ! a)da

1 h(x-a)

a h(-a)

a h(x-a)

-1 f(a).h(x-a)

(f*h)(x)

-1 f(a).h(x-a)

(f*h)(x)

1/2 x-1 x 0<x<1 1 x 1 2 x-1 x=1 1 x

1/2 1 2

CONVOLUTION
f 1 1/2 1 h(-a) a

+"

( f * h)(x, y) =
h(a)

!"

# f (a).h(x ! a)da
f 1

CONVOLUTION

+"

( f * h)(x, y) =
h(a) 1/2

!"

# f (a).h(x ! a)da

1 h(x-a)

a h(-a)

a h(x-a)

-1 f(a).h(x-a)

(f*h)(x)

-1 f(a).h(x-a)

(f*h)(x)

1/2 x-1 1<x<2 1 x 1 x 2 x-1 x!2 x

1/2 1 2 x

TRAITEMENT LOCAL : NORMALISATION


+w +w

TRAITEMENT LOCAL : NORMALISATION


+w +w

J(x,y) =

k= "w l=-w

! ! h(k, l). I(x " k, y " l)

J(x,y) =

k= "w l=-w

! ! h(k, l). I(x " k, y " l)

POS = somme des coefcients positifs de h NEG = somme des coefcients ngatifs.
J1 N

Min= plus petite valeur effectivement prsente dans l!image Max = plus grande valeur effectivement prsente dans l!image.
J1 N j1

j0 J
N*NEG Min 0 Max N*POS N*NEG Min 0 Max N*POS

J1(y,x) = a * J(y,x) + b

/ { a = 1 N(POS - NEG) - NEG) b = - * NEG / (POS J1(y,x) = a * J(y,x) + b

{ b = - N * Min / (Max - Min)

a = N / (Max - Min)

TRAITEMENT LOCAL : NORMALISATION


+w +w

TRAITEMENT LOCAL : TRAITEMENT DES BORDS Border l'image d'entre I, par une bande de largeur w
valeur des pixels de bordage : - une constante (ex: valeur du "fond", si on analyse des objets qui ne touchent pas le bord) - la valeur des pixels de I obtenue par une opration "miroir"

J(x,y) =

k= "w l=-w

! ! h(k, l). I(x " k, y " l)

POS = somme des coefcients positifs de h NEG = somme des coefcients ngatifs.
J1 N j1

Ne traiter que l'intrieur de I


j0 J
N*NEG Min 0 Max N*POS

J1(y,x) = a * J(y,x) + b

/ { a = 1 N(POS - NEG) - NEG) b = - * NEG / (POS

- J est de taille infrieure I => taille de J = [NL-(2w+1)] x [NC-(2w+1)] - complter la bande intrieure de J : - par une valeur de fond - en dupliquant les valeurs intrieures de J - en recopiant les valeurs correspondantes de I

Faire un traitement adapt pour les bords de l'image

a = N / (Max - Min) b = - N * Min / (Max - Min)

TRAITEMENT LOCAL : TRAITEMENT DES BORDS Border l'image d'entre I, par une bande de largeur w
valeur des pixels de bordage : - une constante (ex: valeur du "fond", si on analyse des objets qui ne touchent pas le bord) - la valeur des pixels de I obtenue par une opration "miroir"

TRAITEMENT LOCAL : TRAITEMENT DES BORDS Ne traiter que l'intrieur de I


- J est de taille infrieure I => taille de J = [NL-(2w+1)] x [NC-(2w+1)] - complter la bande intrieure de J : - par une valeur de fond - en dupliquant les valeurs intrieures de J - en recopiant les valeurs correspondantes de I I traiter J! complter J

I border

I! traiter

TRAITEMENT LOCAL : TRAITEMENT DES BORDS Faire un traitement adapt pour les bords de l'image

traiter