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 :

Filtre moyenneur


Sujet :

Traitement d'images

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Filtre moyenneur
    bonjour à tous!
    je suis entrain de developper l'algorithme du filtre moyenneur . Le prob c'est que mon code ne marche pas encore .
    J'ai developpé deux bouts de codes mais j'ai pas eu encore des resultats. je sais pas c'est quoi le problème.
    Est ce que quelqu'un peu m'aider à regler ce code?
    Merci d'avance,


    Code java : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    // 1Ëre solution tel que :  n est la taille du filtre ( ex: 3*3 ------> n=3 )      
     
     
    public  static BufferedImage average(BufferedImage srcImg, int n){
           int w = srcImg.getWidth();
            int h = srcImg.getHeight();
            BufferedImage dstImg = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
            for(int y=0;y<h;++y){
                for(int x=0;x<w;++x){
                    int som = 0;
                    if(x==0 || y==0||x==w ||y==h){
                        System.out.print("couleur: ");
                        System.out.println(Math.abs(srcImg.getRGB(x,y)));
                        dstImg.setRGB(x, y, Math.abs(srcImg.getRGB(x, y)));
     
                    }else
                    {
                        for(int j=y;j<n;j++){
                            for(int i=x;i<n;i++){
                                som+= srcImg.getRGB(i, j);
                            }
                        }
                        for(int j=y+1;j<n-1;j++){
                           for(int i=x+1;i<n-1;i++){
                                dstImg.setRGB(i, j ,(int) som/(n*n));
                            }
                        }
                    }
                }
            }
            return dstImg;
     
        }
    // 2Ëme sol:
    // le filtre ‡ utiliser est:
     public static final int [][] moy ={{1,1,1} , {1,1,1} , {1,1,1}};  
    public static BufferedImage f_moy(BufferedImage img, int[][] filtre){
            int x = img.getWidth();
            int y = img.getHeight();
            BufferedImage dstImg = new BufferedImage(x,y,BufferedImage.TYPE_INT_RGB);
            for( int i=1;i<x-1;i++)
            { int p = img.getRGB(i,0);
              dstImg.setRGB(i,0,p);
            }
            for( int i=1;i<x-1;i++)
            { int p = img.getRGB(i,y);
              dstImg.setRGB(i,y,p);
            }
            for( int i=0;i<y;i++)
            { int p = img.getRGB(0,i);
              dstImg.setRGB(0,i,p);
            }
            for( int i=0;i<y;i++)
            { int p = img.getRGB(x,i);
              dstImg.setRGB(x,i,p);
            }
            for(int j=2;j<y-1;++j){
                for(int i=2;i<x-1;++i){
                    int s=0;
                    // le produit convolutionnaire avec le filtre
                    for(int m=0,dj=j-1;m<filtre.length;m++,dj++){
                        for(int n=0,di=i-1;n<filtre[0].length;n++,di++){
                            int pxl =img.getRGB(di, dj);
                            s += pxl * filtre[m][n];
                        }
                    }
                    dstImg.setRGB(i, j,s);
                }
            }
            return dstImg;
        }
    // deuxiËme solution : n est la taille du filtre ( ex: 3*3 ------> n=3 )      
    public  static BufferedImage average(BufferedImage srcImg, int n){
           int w = srcImg.getWidth();
            int h = srcImg.getHeight();
            BufferedImage dstImg = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
            for(int y=0;y<h;++y){
                for(int x=0;x<w;++x){
                    int som = 0;
                    if(x==0 || y==0||x==w ||y==h){
                        System.out.print("couleur: ");
                        System.out.println(Math.abs(srcImg.getRGB(x,y)));
                        dstImg.setRGB(x, y, Math.abs(srcImg.getRGB(x, y)));
     
                    }else
                    {
                        for(int j=y;j<n;j++){
                            for(int i=x;i<n;i++){
                                som+= srcImg.getRGB(i, j);
                            }
                        }
                        for(int j=y+1;j<n-1;j++){
                           for(int i=x+1;i<n-1;i++){
                                dstImg.setRGB(i, j ,(int) som/(n*n));
                            }
                        }
                    }
                }
            }
            return dstImg;
     
        }

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    ce sujet a déjà été traité de TRES nombreuses fois, avec de TRES nombreux exemples

    Lorsque tu appliques un filtre, il faut centrer le masque sur le pixel traité, ce n'est pas ce que tu fais.
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(int j=y;j<n;j++){
                            for(int i=x;i<n;i++){
                                som+= srcImg.getRGB(i, j);
                            }


    Ensuite, il suffit de diviser la sommes par la taille du masque et d'affecter la valeur au pixel résultat. Ce n'est pas non plus ce que tu fais. En plus il y risque d'y avoir des soucis d'arrondi (division par un entier).
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(int j=y+1;j<n-1;j++){
                           for(int i=x+1;i<n-1;i++){
                                dstImg.setRGB(i, j ,(int) som/(n*n));
                            }
                        }

    Question : tu utilises une méthode setRGB à laquelle tu passes une valeur en niveau de gris. Est ce normal ?

Discussions similaires

  1. traitement d'image: filtre moyenneur
    Par minouuu3 dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 28/01/2011, 19h48
  2. probleme avec filtre moyenneur
    Par wahidred dans le forum Images
    Réponses: 1
    Dernier message: 18/12/2010, 16h57
  3. [Débutant] traitement filtre moyenneur
    Par raja34 dans le forum Images
    Réponses: 3
    Dernier message: 12/08/2010, 12h28
  4. Problème avec filtre moyenneur "flou uniforme" d’une image
    Par SmileSoft dans le forum C++Builder
    Réponses: 15
    Dernier message: 23/04/2008, 17h29
  5. Filtre moyenneur et détection de bords
    Par mchk0123 dans le forum Traitement du signal
    Réponses: 19
    Dernier message: 29/04/2007, 15h04

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