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

Interfaces Graphiques en Java Discussion :

Réglage des niveaux de gris d'une image


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Billets dans le blog
    1
    Par défaut Réglage des niveaux de gris d'une image
    Slt tous le monde.
    Je veut pouvoir modifier la luminance, le contraste d'une image mais pas d'une manière automatique (grâce a un JSlider par exemple).
    Pour info, j'ai réussi a extraire le rbg, ainsi que les a, r, b, g (par décalage des bits) a partir d'un BufferedImage, et a crée les deux histogramme, ainsi que reconstruire les niveaux de gris rgb a parti des a, r, b, g, j'ai aussi l'algorithme pour le calcul de la transformée de Fourier (TFD, FFT...).
    Si quelqu'un connait une formule mathématique, ou un algorithme qui permet de jouer sur les a, r, b, g pour modifier l'éclairage par exemple, ou tous autre propriété dans le genre, ça me sera de la plus grande utilité.
    Avec mon profond respect.
    Cordialement Amine

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 098
    Par défaut
    L'éclairage ? La luminosité (brightness) tu veux dire ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Billets dans le blog
    1
    Par défaut
    Oui, c'est exactement ça ce que veut dire, je tiens a signaler que ce travail est sous forme d'un pré-cours, c'est nous les étudiants qui allons faire le cours sous forme d'une présentation d'un diaporama, et d'une application qu'on doit réaliser, ainsi qu'un rapport, c'est la raison pour laquelle, vous avaient dus vous en rondrent compte, poser des questions superflues.
    Bref, en cherchant sur internet, je pense que j'ai résolu le problème de la luminosité. J'ai pu extraire d'un ancien poste sur ce forum certaines informations utiles que j'ai recopié dans mon code :
    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
    int [] [] rgb1 = new int [this.img.getWidth ()] [this.img.getHeight ()];
            int alpha, rgb;
            float r, g, b;
            Color clr;
            float[] hsb;
            double sat = 1, intens;
            for (int i = 0; i < this.img.getWidth (); i++) {//for
                for (int j = 0; j < this.img.getHeight (); j++) {//for
                    r = this.img.getColorModel ().getRed (this.img.getRGB (i, j));
                    g = this.img.getColorModel ().getGreen (this.img.getRGB (i, j));
                    b = this.img.getColorModel ().getBlue (this.img.getRGB (i, j));
                    intens = Math.sqrt ((0.241 * r) * (0.241 * r) + (0.691 * g) * (0.691 * g) + (0.068 * b) * (0.068 * b));
                    if (intens < 100 && intens > 0) {//if
                        intens /= 100;
                        /*r = Math.round (r * ( 1 + intens / 100));
                        g = Math.round (g * ( 1 + intens / 100));
                        b = Math.round (b * ( 1 + intens / 100));
                        rgb1 [i] [j] = (r << 16) + (g << 8) + b/* + this.img ().getColorModel ().getAlpha (this.img.getRgb () [i] [j])*/;
                        clr = new Color (this.img.getImg ().getRGB (i, j), true);
                        alpha = clr.getAlpha ();
                        hsb = Color.RGBtoHSB (clr.getRed(), clr.getGreen(), clr.getBlue(), null);
                        hsb[1] = (float) (hsb[1] * sat);
                        hsb[2] = (float) (hsb[2] * intens);
                        rgb = Color.HSBtoRGB (hsb[0], hsb[1], hsb[2]);
                        clr = new Color (rgb);
                        clr = new Color (clr.getRed(), clr.getGreen(), clr.getBlue(), alpha);
                        rgb1 [i] [j] = clr.getRGB ();
                    }//if
                    else
                        rgb1 [i] [j] = this.pn.getImg ().getRGB (i, j);
                }//for
            }//for
    Et ça donne un assez bon résultat.
    Pour le réglage manuel, il suffi de jouer sur la variable intens.
    Par compte je ne sait pas comment m'y prendre avec le contraste, j'ai essaye un truc dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    r = round(r + intens / 100 * (r-127));
        g = round(g + intens / 100 * (g-127));
        b = round(b + intens / 100 * (b-127));
    , mais ça me donne des pixels trop éclairés.
    Pour l’égalisation, j'ai trouvé une méthode assez simple :
    1- Calculer l'histogramme (h (k)).
    2- L'histogramme cumulé (hc (k)).
    3- rgb = 256 * hc (k) / (H * W).

    Pour des images noir et blanc.
    Et aussi :
    1- intens = (r + g + b) / 3.
    2- Calculer l'histogramme (h (intens)).
    3- L'histogramme cumulé (hc (intens)).
    4- rgb = hc (intens).

    Pour des image en couleurs
    C'est lourd en calcul, et ça donne un résultat assez médiocre.
    J'ai essaye aussi :
    1- Calculer l'histogramme (h (k)).
    2- L'histogramme cumulé (hc (k)).
    3- rgb = 2 ^ 32 * hc (k) / (H * W).

    Ça m'affiche une image noire.
    Donc, ce que je veut savoir :
    1- Es-qu'il y a un moyen pour faire l’égalisation de l'histogramme sans passez forcement par l'histogramme?donc gagner en calculs, et si possible, obtenir un meilleur résultat?
    2- Comment on procède habituellement pour le réglage des contrastes?
    Un grand merci d’avance pour vos suggestions

  4. #4
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Billets dans le blog
    1
    Par défaut
    Ça y, normalement, c'est régler, je tiens juste a préciser que pour calculer la saturation d'une image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    moy = (r + g + b) / 3;
    sat = Math.sqrt (((r - moy) * (r - moy) + (g - moy) * (g - moy) + (b - moy) * (b - moy)) / 3);
    Et pour l’égalisation de l'histogramme, je pense qu'il faut faire ainsi :
    1- Calculer l'histogramme (h (k)).
    2- L'histogramme cumulé (hc (k)).
    3- rgb = 256 * hc (k) / (H * W)

    J'avais juste un p'tit problème, je fesais une division entière.
    Un grand merci a wax78

  5. #5
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 098
    Par défaut
    Ha mais je n'ai pas fait grand choses mais merci quand même.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. alléger les niveaux de gris d'une image
    Par sifouasma dans le forum Images
    Réponses: 4
    Dernier message: 11/05/2014, 23h01
  2. la moyenne des niveaux de gris d'une image
    Par NGeVtC87 dans le forum Images
    Réponses: 7
    Dernier message: 15/03/2012, 23h46
  3. java extraire les niveaux de gris d'une image
    Par wildthing dans le forum Général Java
    Réponses: 11
    Dernier message: 20/05/2009, 13h41
  4. Acceder aux niveaux de gris d'une image par ScaneLine
    Par SmileSoft dans le forum C++Builder
    Réponses: 8
    Dernier message: 09/06/2008, 16h34
  5. Réponses: 4
    Dernier message: 05/01/2006, 20h29

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