IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Traitement d'images Discussion :

Matrice de filtrage ?


Sujet :

Traitement d'images

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2002
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Matrice de filtrage ?
    Salut a tous,

    J'ai découvert dans Estampe un logiciel de dessin en delphi l'existence des matrices 3*3 pour appliquer les filtres de type flou gaussien ,sculture et compagnie.Mais je n'ai pas compris en examinant le code source comment traiter le pixel central avec les coeffs de la matrice.
    J'ai donc essayé de comprendre tout seul.
    Chaque composante rgb d'un pixel recoit la somme des (valeur rgb du pixel de la matrice*coeff de la matrice).
    Ainsi avec les scanlines ca donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    r:=row1[i-1].rgbtRed*mat[1,1]+row1[i].rgbtRed*mat[2,1] 
    + row1[i+1].rgbtRed*mat[3,1] 
    + row2[i-1].rgbtRed*mat[1,2]+ row2[i].rgbtRed*mat[2,2] 
    + row2[i+1].rgbtRed*mat[3,2] 
    + row3[i-1].rgbtRed*mat[1,3] +row3[i].rgbtRed*mat[2,3] 
    + row3[i+1].rgbtRed*mat[3,3]; 
    g:=row1[i-1].rgbtgreen*mat[1,1]+row1[i].rgbtgreen*mat[2,1] 
    + row1[i+1].rgbtgreen*mat[3,1] 
    + row2[i-1].rgbtgreen*mat[1,2]+ row2[i].rgbtgreen*mat[2,2] 
    + row2[i+1].rgbtgreen*mat[3,2] 
    + row3[i-1].rgbtgreen*mat[1,3] +row3[i].rgbtgreen*mat[2,3] 
    + row3[i+1].rgbtgreen*mat[3,3]; 
    b:=row1[i-1].rgbtblue*mat[1,1]+row1[i].rgbtblue*mat[2,1] 
    + row1[i+1].rgbtblue*mat[3,1] 
    + row2[i-1].rgbtblue*mat[1,2]+ row2[i].rgbtblue*mat[2,2] 
    + row2[i+1].rgbtblue*mat[3,2] 
    + row3[i-1].rgbtblue*mat[1,3] +row3[i].rgbtblue*mat[2,3] 
    + row3[i+1].rgbtblue*mat[3,3]; 
    r:=r div diviseur; 
    g:=g div diviseur; 
    b:=b div diviseur; 
    row2[i].rgbtred:=r; 
    row2[i].rgbtgreen:=g; 
    row2[i].rgbtblue:=b;


    avec row1,2,3 les 3 lignes de la matrice.
    diviseur est la somme des coeffs de la matrice.


    Avec ca j'ai réussi a avoir le filtre flou gaussien,les coeffs de matrices negatifs ne donnent rien...
    Ma solution est elle bonne sinon quelqu'un pourrait il m'expliquer les opérations a effectuer avec la matrice car j'ai écumé les forums et sites meme anglais sans avoir de réponse nette.

    Merci

  2. #2
    Membre régulier
    Inscrit en
    Mars 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 84
    Points : 89
    Points
    89
    Par défaut
    En fait, pour les matrices de filtrage, il faut l'applique a tous les pixels de l'image.
    Exemple, la matrice :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    pour chaque pixel{
     pour chaque couleur (R puis V puis B)
       tu fait: 1 fois le pixel du haut gauche
       plus 2 fois le pixel du haut
       plus 1 fois le pixel du haut droit
       plus 2 fois le pixel de gauche
       plus 2 fois le ... droite
       ...... 1 ..... bas gauche
       ... 2 ... bas
       ... 1 ... bas droit
     
    et le tout divise par 1+2+1+2+2+1+2+1
     et tu met la valeur obtenu dans le pixel.
     
    }
    en esperant t'avoir aidé

  3. #3
    Ol'
    Ol' est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 56
    Points : 69
    Points
    69
    Par défaut
    Salut,

    En réalité pour appliquer ton filtre, il réalise une convolution de l'image par le noyeau (même notion qu'en traitement du signal).

    Toutefois, il faut savoir que dans la plupart des cas, le calcul ne se fait pas de cette manière. En effet, pour un noyeau nxn, il faut réaliser n² opérations par point de l'image.

    Dans la plupart des cas, le noyeau de convolution peut être séparé en produit de convolution de deux vecteur (1xn) et (nx1), ce qui réduit la compléxité à 2n. C'est le cas de tous les noyaux dits classiques (entre autres ceux que ti cites).

    Dans ce cas, on réalise la convoltion de l'image par l'un de ces vecteurs puis par l'autre (commutativité du produit de convolution).

    Par exemple, dans le cas cité par exxos

    1 2 1
    2 0 2
    1 2 1
    Si j'ai bien interprété son noyau (ce n'est pas trè clair)
    tu peux faire
    Image*(1 2 1)*(1 2 1)' - 4*Image

    Soit 7 opérations par point alors que sinon tu en faisais 9. Le gain est appréciable surtout dans le cas de noyeau plus grands.

    Notes aussi que dans la plupart des cas, le noyaux s'écrivent directement comme produit de deux vecteur, dans ce cas, il n'est plus utile de ruser avec -4*Image.

    Voila, j'espère que j'ai pu t'éclairer

    Ol

Discussions similaires

  1. Rotation d'image (matrice)
    Par AsmBoy dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 16/01/2006, 07h49
  2. [ETUDES] Traitement images ou intelligence artificielle ?
    Par green_castor dans le forum Etudes
    Réponses: 9
    Dernier message: 29/11/2005, 13h01
  3. traitement image
    Par Feanorin dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 20/06/2005, 17h01
  4. Réponses: 5
    Dernier message: 25/12/2004, 23h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo