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

2D Java Discussion :

Valeur négative lors du calcul de la variance d'une image -java-


Sujet :

2D Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 74
    Points : 67
    Points
    67
    Par défaut Valeur négative lors du calcul de la variance d'une image -java-
    Ici, j'essaie de calculer la variance d'une image

    Donc, j'ai essayé d'appliquer les deux méthodes (de calcule de variance var (x) = E (x²) -E (x) ² and ∑1/n [(x[i]-x̅) ²] pour vérifier si cela fonctionne Pour
    l'image 1 les deux valeurs de la varinace étaient identiques
    Mais avec l'image 2, j'ai obtenu une valeur négative pour la méthode 2


    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
    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
    103
    104
    105
    106
    107
    108
    109
    110
    111
     
    private void openActionPerformed(java.awt.event.ActionEvent evt) {
        LoadImage loadImage = new LoadImage(null);
        int w = 0, h = 0;
        BufferedImage image;
        float somR = 0;
        int somG = 0;
        int somB = 0;
        int valR[][];
        int[][] valG;
        int valB[][];
        float meanR = 0;
        float meanG = 0;
        float meanB = 0;
        int nbpixl = 0;
     
        float square_Red = 0, square_Blue = 0, square_Green = 0;
        //The sum of pixels for each color
        int sum_Square_Red = 0, sum_Square_Blue = 0, sum_Square_Green = 0;
        // The square sum of the pixels for each color
        float varR = 0, varG = 0, varB = 0;//The variance of each color
        try {
            if (loadImage.loadImage(jScrollPane1)) {
                int pixel = 0;
     
                image = loadImage.getImage();
                w = image.getWidth();
                h = image.getHeight();
                System.out.println("width, height: " + w + ", " + h);
                nbpixl = w * h;
     
                valR = new int[h][w];
                valB = new int[h][w];
                valG = new int[h][w];
                for (int i = 0; i < h; i++) {
                    for (int j = 0; j < w; j++) {
                        pixel = image.getRGB(j, i);
                        int red = (pixel >> 16) & 0xff;
                        int green = (pixel >> 8) & 0xff;
                        int blue = (pixel) & 0xff;
     
                        valR[i][j] = red;
                        somR += red;
     
                        square_Red = red * red;
                        sum_Square_Red += square_Red;
     
                        valG[i][j] = green;
                        somG += green;
     
                        square_Green = green * green;
                        sum_Square_Green += square_Green;
     
                        valB[i][j] = blue;
                        somB += blue;
     
                        square_Blue = blue * blue;
                        sum_Square_Blue += square_Blue;
     
                    }
     
                }
     
                //la moyenne de pixels dechaque couleurs
                meanR = somR / nbpixl;
                meanG = somG / nbpixl;
                meanB = somB / nbpixl;
                //meanB = somB / nbpixl * 255.0f;
     
                //1  method of calculating the variance
                System.out.println("1 method of calculating the variance\n");
                float var[] = new float[3];
                for (int i = 0; i < h; i++) {
                    for (int j = 0; j < w; j++) {
     
                        varR += (meanR - valR[i][j]) * (meanR - valR[i][j]);
                        varG += (meanG - valG[i][j]) * (meanG - valG[i][j]);
                        varB += (meanR - valB[i][j]) * (meanB - valB[i][j]);
     
                    }
     
                }
     
                var[0] = (varR / nbpixl);
     
                var[1] = (varG / nbpixl);
     
                var[2] = (varB / nbpixl);
     
                float var_img = ((var[0] + var[1] + var[2]) / nbpixl);
     
                 System.out.println("var=\t"+var[0] + "\t"+ var[1] + "\t"+                                                                  var[2]);
                System.out.println("var of image=\t" + var_img);
     
                //2 method of calculating the variance
                System.out.println("2 method of calculating the variance\n");
     
                float varR1 = sum_Square_Red / nbpixl - (meanR * meanR);
                float varG1 = sum_Square_Green / nbpixl - (meanG * meanG);
                float varB1 = sum_Square_Blue / nbpixl - (meanB * meanB);
                float mean_img1 = ((varR1 + varG1 + varB1) / nbpixl);
     
           System.out.println("var=\t" + varR1 + "\t" + varG1 + "\t" + varB1);
                System.out.println("var of image=\t" + mean_img1);
     
            }
     
        } catch (IOException ex) {
            Logger.getLogger(var_img1.class.getName()).log(Level.SEVERE, null, ex);
        }
    }


    et pour le resultat


    Width, height: 259, 194

    1 method of calculating the variance

    varR= 7598.217 varG= 5033.452 varB= 4910.8223

    Var of picture = 0.34913212

    2 method of calculating the variance


    varR= 7597.9395 varG= 5183.0 varB= 4994.0

    Var of image = 0.3537583

    ******************************************************************

    And for image 2

    width, height: 620, 349 1 method of calculating the variance

    varR= 991.2626 varG= 1525.1627 varB= 1280.9857

    var of image= 0.017549733

    2 method of calculating the variance

    varR= -52462.875 varG= -50101.0 varB= -50592.0

    var of image= -0.70780975
    Images attachées Images attachées   

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 74
    Points : 67
    Points
    67
    Par défaut resolu
    ah c'est bon en changeant le type int en float de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     int sum_Square_Red = 0, sum_Square_Blue = 0, sum_Square_Green = 0;
    peut etre le pb été un overflow .....


    quelque conseil sur la segmentatio de l'image

    je veut decouper l'image a chaque fois en quatre selon un seuil que je choisit (exp 0.3) si la variance de quadre depasse se seuil alors l'image n'set pas homogène ==> un decoupage en quatre...

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul de la moyenne de variance d'une image
    Par otmane88 dans le forum Scilab
    Réponses: 1
    Dernier message: 24/03/2013, 21h45
  2. calcul de la variance d'une image
    Par fattouna dans le forum Images
    Réponses: 1
    Dernier message: 22/07/2009, 03h26
  3. Calcul de la variance d'une image
    Par bipame dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 22/01/2009, 04h08
  4. calcul de l'entropie d'une image
    Par fog4000 dans le forum C++
    Réponses: 8
    Dernier message: 24/06/2007, 22h39
  5. Réponses: 4
    Dernier message: 30/05/2007, 17h44

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