Try   HackMD

TIFO - Filtrage - partie 1

Filtrage

  • Domaines spatial et frequentiel
  • Lissage, elimination du bruit
  • Detection de bords/coins

Quelques filtres classiques

  • On s'appuie souvent sur le produit de convolution
    • Matrice avec des coefficients
  • On va recalculer la valeur d'un pixel en fonction de son voisinage
    • Combinaison lineaire de tous les pixels voisins

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Lissage, debruitage

Comment eliminer le bruit dans une image ?

  • Filtre moyenneur
    • Objectif: lisser l'image
      • Donne une impression de flou
    • Fonctionnement: on remplace la valeur d'un pixel par la moyenne des valeurs des pixels du voisinage
    • Noyau de convolution:

19[111111111]

Comment choisir la taille/forme du voisinage ?
On reste generalement sur des voisinages carres par soucis de performance

Resultats:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Un leger flou apparait.

Si on continue et qu'on augmente la taille du masque:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Le lissage est un peu trop fort et on perd des details.

Implementation

  • Comment implementer un tel filtre ?
    • Double boucle
  • Que faire sur la bordure
    • On ne traite pas les bords
    • Recalculer sur la bordure avec des coeffs differents
    • Dupliquer les dernieres et premieres lignes/colonne
    • Image periodique: chercher les valeurs sur une autre periode
    • il n'y a pas de bonnes reponses

Amelioration?

  • Au lieu de faire contribuer tous les pixels egalement, on peut privilegier les pixels proches du centre
    • Filtre Gaussien

Filtre Gaussien

  • Objectif: lisser l'image
  • Fonctionnement: on remplace la valeur d'un pixel par la moyenne ponderee des valeurs des pixels du voisinage
  • Noyau de convolution: gaussienne
  • Parametre/Taille du noyau ?

Resultat

Comparaison ave le filtre moyenneur

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

  • Avantages/inconvenients ?
    • moins l'impression de flou
    • bonne amelioration

Filtre Median

  • Objectif: debruitage
  • Fonctionnement: trier l'ensemble des valeurs des intensites des pixels sur un voisinage puis remplacer la valeur du pixel considere par la valeur mediane sur le voisinage

Resultat

  • Supprime facilement le bruit impulsionnel
  • Preserve l'information de contour
  • Est un peu lourd (tri)

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Je suis pas du tout narcissique

On a completement enleve le bruit "poivre et sel" de la 2

\(^{\text{nde}\) image

Lissage

  • Lissage (gaussien, moyenne)
    • Degrade les frontieres
    • Solutions ?
      • Faire contribuer principalement les pixels qui ont une couleur proche de la couleur du pixel considere ou ponderer leur apport en fonction de leur couleur
      • Filtre de Nagao

Filtre gaussien, resultats:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Gaussien selectif: seuil pour faire contribuer les pixel (si c'est inferieur, on les fait contribuer, sinon on les oublie).

  • Permet de preserver les contours

Seuil a fixer

  • S'il est trop tolerant: tend vers le gaussien normal
  • Pas assez tolerant: reste sur l'image originale

Nagao

  • Filtre de Nagao
    • Tenir compte des regions?
    • Faire un median mais dans la region de variance faible

Au lieu de prendre un masque centre sur le pixel, on va regarder sur differents voisinages

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

On calcule la variance a chaque zones rouges

  • On calcule la moyenne sur le voisinage avec la variance la plus faible
    • On ne veut pas faire une moyenne a cheval sur un contour

Resultats

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Nagao: on a fortement lisse l'image mais on a garde les contours

Detection de bords

  • Comment se caracterise un contour ?
  • Comment trouver les contours ?
  • Pourquoi trouver les contours ?

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Definir la notion de bord/contour

  • Transition brutale (echelon)
    • En "escalier"
    • Dans la vraie vie, jamais aussi brutale

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

  • Quelle operation realiser pour detecter ce type de motif?

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Calcul de la derivee ?

limx0xf(x0)f(x)x0x

Si l'accroissement est plus fort en

y que en
x
, on calcul le coefficient directeur. Quand la porte est tres fort, on a un contour.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

δf(x,y)δx=

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

δf(x,y)δy=

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Vecteur directeur en tout point de la courbe

Calcul de la derivee

En continu on a

limh0f(x+h)f(x)h et on veut calculer ca correctement en dirscret.

Profil:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Derivee:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

  • recherche de maxima locaux ?

Calcul de la derivee en 1 point x

  • En continu:
    limh0f(x+h)f(x)h
    • En discret on a du mal a aller vers 0
    • En discret on a
      f(x+1)f(x)1
  • Dans notre cas (discret)
    • f(x)=(f(x+1)f(x))
      ou
      12×(f(x+1)f(x1))
    • Masques:
      [1;1]
      ,
      12[1;0;1]
    • Attention signal 2D

Roberts

  • Filtre de Roberts

r(x,y)=(i(x,y)i(x1,y1))2+(i(x,y1)i(x1,y))2r(x,y)=|i(x,y)i(x1,y1)|+|i(x,y1)i(x1,y)|

Contours pas forcement nets

Sobel, Prewitt

Filtres beaucoup plus communs.
Sobel:

Prewitt:

Pourquoi ces coefficients ?

On inclut le lissage

La difference:

  • lisser par un filtre moyenneur / Sobel
  • lisser par un filtre Gaussien / Prewitt

Resultats

Sobel

Prewitt

δf(x,y)δxδf(x,y)δy

On peut combiner les derivees:

  1. calculer amplitude du gradient
  2. calculer l'angle

sx2+sy2tan1(sysx)

Informations sur l'orientation du gradient

Comment recuperer les contours a partir de l'image du gradient ?

On peut combiner les 2 images

  • Le vecteur gradient est orthogonal aux lignes de niveaux
  • plus sa norme est grande plus la transition est forte
  • On cherche une transition maximale

Differentes strategies pour recuperrer les contours:

  • Seuillage

  • Seuillage par hysteresis

    • On cherche un seuil pour un profil
    • On garde tout au dessus du seuil et on jette tout en dessous
    • On inclut le motif a droite qu'on ne veut pas garder
    • Pour regler ce probleme on utilise 2 seuils
      • un seuil haut
      • un seuil bas
    • On a une 1
      ere
      binarisation avec le seuil haut
      • On perd de l'info
      • On enleve le motif qu'on veut pas
    • Le seuil tolerant garde beaucoup plus d'infos
    • Hysteresis: on garde tous les resultats des seuils tolerant qui ont un contact avec le seuil haut
  • Recherche de lignes de crete

Probleme:

  • Contour ferme/contour ouvert ?

Kirsch, Robinson

Kirsch and Robinson Compass Masks (Filtres de compas):

On fait "tourner" le filtre.

"Sobel que l'on fait tourner"

L'amplitude est donnee par la plus forte reponse.

L'orientation est deduite du masque qui a donne la plus forte reponse.

Frei-Chen

Permet de trouver les gradients et d'autres motifs (lignes croises, point, etc.)

Edge Line
1.
122[121000121]
5.
12[010101010]
9.
13[111111111]
2.
122[101202101]
6.
12[101000101]
3.
122[012101210]
7.
12[121242121]
4.
122[210101012]
8.
12[212141212]

9 masquent qui forment une base

  • Chaque sous-famille est capable de detecter un motif localement

La detectection se fait seulement avec:

122[121000121] +rotations a 90oθ=arccos(k=14(Wk×I)2k=19(Wk×I)2)

Plus

θ est grand, moins la bordure est marquee (
θ
est entre 0 et
π
).

Avantages:

  • Plus robuste a differents niveaux d'illumination
  • Plus robuste car elimine les motifs lignes, points, etc. de la detection
  • Peut etre utilise pour detecter les lignes en utilisant les masques 5 a 8 a la place des masques 1 a 4

Le laplacien

Utilisation de la derivee seconde

  • Un point de contour est un passage a zero de la derivee seconde

Derivee seconde:

f:

f:

f:

Un point de contour n'est rien d'autre qu'un passage de la derivee seconde par 0.

Calcul du laplacien

  • f(x)=f(x+1)f(x)
    • f(x+1)f(x)1
  • f(x)=(x+1)f(x)
  • f(x=f(x+2)f(x+1)f(x+1)+f(x)

On obtient un masque simple:

f(X)=f(X+1)2×f(X)+f(X1)

Si on veut detecter les contours, il faut chercher les passage par 0 du resultat:

On a somme le masque horizontal et vertical

Les contours sont reperes par un changement de signe

On va plutot chercher un changement de signe (de forte amplitude)


Si

E>0 il faut un des
A,B,C
ou
D<0
et inversement si
E<0

  • La calcul des derivees est approche au moyen de filtres
    • Simple et rapide
    • Inconvenients: approximation, sensibilite au bruit, en particulier le Laplacien
      necessite de lisser le signal avant ou lors de la derivation
  • Impact du lissage
    • Robustess au bruit
    • Delocalisation des points de contour
  • Le Laplacien est sensible au bruit
    sur-segmentation

Evaluation de la qualite de detection de contours:

  • Bonne detection
  • Bonne localisation
  • Reponse unique

Cf filtre de Canny/Deriche

Detection de points d'interest

  • Detection de coins
    • Comment se caracterise un coin ?
    • Comment trouver les coins ?
    • Pourquoi trouver les coins ?

Coin = gradient fort dans 2 directions

Moravec

Pour chaque point:

  1. On fait la somme
    S
    des differences des intensites entre un voisinage centre sur le point et le voisinage decale
  2. On reitere le calcul avec des decalages dans toutes les directions
  3. Pour chaque point, on garde, parmi tous les decalages
    i
    le resultat de
    Si
    qui a donne la plus faible valeur

Moravec:

  • Calcul d'un critere sur toute l'image

cdx,dy(x,y)=i=s...+sj=s...+s(I(x+i,y+j)I(x+i+dx,y+j+dy))2

  • On calcul un critere pour chaque point

c(x,y)=mindx,dy(cdx,dy(x,y))

Un coin est un maximum local de

c(x,y)

Desavantages:

  • Sensible au bruit (des petites imperfections peuvent etre prises pour des coins)
  • Contours de certaines directions peuvent etre pris pour des coins (anisotrope car on considere que quelques directions)

Harris

Revision du critere pour etre plus robuste

cdx,dy=i=s...+sj=s...+sw(i,j)(I(x+i,y+j)I(x+i+dx,y+j+d))2I(x+dx,y+dy)I(x,y)+dx(δI(x,y)δx)+dy(δI(x,y)δy)+...cdx,dy=i=s...+sj=s...+sw(i,j)(dx(δI(x+i,y+j)δx+dyδI(x+i,y+j)δy))2

Critere:

cdx,dy=i=s...+sj=s...+sw(i,j)(dxδI(x+i,y+j)δx+dyδI(x+i,y+j)δy)2(dxδI(x+i,y+j)δx+dyδI(x+i,y+j)δy)2

(dxδI(x+i,y+j)δx+dyδI(x+i,y+j)δy)2=(dx,dy)((δIδx)2(δIδxδy)(δIδxδy)(δIδy)2)(dxdy)

Ce qui donne:

Ad+x2+2Cdxdy+Bdy2M=(ACCB)=((δIδx)2(δIδxδy)(δIδxδy)(δIδy)2)

  • Avec
    w
    une gaussienne

Nouveau critere H

  • H=det(M)α
    trace
    (M)2
  • λ1
    λ2
    les deux valeurs propres
    • det(M)=λ1λ2
      et
      trace(M)=λ1+λ2
  • H=λ1λ2α(λ1+λ2)2
    • H<0
      contour
    • H0
      ras
    • H>>0
      coin
  • α
    grand
    H
    diminue et le detecteur est moins sensible
  • α
    petit
    H
    diminue et le detecteur est plus sensible

Achard, Bigorgne, Devars

  • Detection basee sur le produit vectoriel
    • Pres d'un coin, la norme du produit vectoriel entre 2 vecteur gradient est grande
    • Dans une zone homogene elle est faible
      • La norme des vecteurs gradients est petite
    • Sur un contour elle est faibke aussi
      • L'angle frome entre 2 vecteurs gradients proches est petit

Pour chaque point

i, avec un voisinage
Vi
, on determine un critere
k
:

k=jVigrad(Pi)2grad(Pj)2sin2(grad(Pi),grad(Pj)^)
Ix=(δIδx)grad(P)2=Ix2+Iy2sin(ox,grad(P)^)=IyIx2+Iy2cos(ox,grad(P)^)=IyIx2+Iy2k=Ix2<Iy2>+Iy2<Ix2>2IxIy<IxIy><I>I×(111101111)

Resultats

Archard

Amelioration de la nettete

Laplacien

  • Retour sur la derivee seconde (Laplacien)

f:

f:

f:

f(X)=f(X+1)2×f(X)+f(X1)

Renforcement de la nettete

f:
Ce qu'on ainerai c'est combine
f
et
f
pour ecarter les amplitudes des extremums avant et apres

On prend

f et lui on lui retranche
k
fois la derivee seconde pour accroitre le contraste locale

f:

kf:

fkf:

Masque pour le Laplacien

Rajouter

+1 au centre c'est comme rajouter l'image complete

Resultats

  • Augmente la nettete
  • Renforce le bruit

C'est l'inverse de ce qu'on a fait au debut

Conclusion

Tout ce qu'on a fait jusqu'a present est faux car on a pas pris en compte la correction gamma.