12
votes

Algorithme pour modifier la luminosité de l'image RVB?

Je sais qu'il y a de la formule pour aller à la RVB -> Luminance, mais j'ai besoin d'un paramètre de luminosité pour modifier les valeurs RVB d'une image. Comment puis-je faire ça?

merci


0 commentaires

7 Réponses :


19
votes

Carte de RGB en HSL (Hue / Saturation / Luminance), maintenez la teinte et la saturation de la même manière et modifiez simplement la luminance, puis faites la cartographie en arrière de HSL à RVB.

Vous pouvez en savoir plus sur les transformations RVB sur HSL et HSL aux transformations RVB ici.


1 commentaires

HSL n'a aucun lien avec la physique ou la psychophysique, il s'agit simplement d'une réécriture polaire des coordonnées euclidiennes RVB. De plus, "L" dans HSL signifie la légèreté, pas la luminance. La luminance est une métrique physique dans CD / m². HSL est très mauvais et ne doit pas être utilisé sur les opérations de pixels. Au plus, il est utile pour les paramètres GUI, avant la translation vers RVB.



22
votes

Le moyen le plus simple consiste à multiplier chacun des valeurs R, G, B par une constante - si la constante est> 1, elle le rendra plus lumineux et si <1, il sera plus sombre. Si vous le rendez plus lumineux, vous devez tester chaque valeur pour vous assurer qu'il ne passe pas sur le maximum (généralement 255).

Non seulement cela est plus simple que la traduction de RVB à HSL et à nouveau, mais elle se rapproche de plus près ce qui se passe lorsque vous brillez une quantité de lumière différente à un objet physique.


6 commentaires

Ouais, passe à la même chose exacte sous le modèle l = (r + g + b) / 3 mais certains modèles de luminance n'utilisent pas cette hypothèse (voir la page Wikipedia liée.) Depuis que l'OP était vague, j'ai décidé d'être "général".


@Chrisa. Est-ce que ça marche vraiment à la même chose? Je pensais qu'il y avait une interaction entre l et s par exemple qui fait de très mauvaises choses si vous faites des changements radicaux.


Bon point! Précisément pourquoi j'ai essayé d'assumer le moins possible dans ma réponse et de le laisser généraliser. Je me souviens d'apprendre que cela marque, mais j'essaie de le remettre maintenant, juste pour l'amour de la curiosité.


Vous avez raison, la saturation a des effets intéressants sur RVB. Mon commentaire sur l = (r + g + b) / 3 a été purement motivé mathématiquement, mais ce n'est pas comment il est généralement défini apparemment. Mais votre bon point est également une réfutation de votre propre réponse. Pour la naissance, essayez de jouer avec une roue de couleur qui a HSL et RVB comme dans MSPAINT. Multiplier RVB par un scalaire n'est pas toujours un à un avec des changements est l par aucun moyen.


La modification de la luminance par conversion en HSL et à l'arrière et à la modification de la luminosité de la technique ci-dessus? Je veux dire que la luminance et la luminosité équivalent à cette conversion?


@Flipper Luminance et luminosité seraient probablement identiques, mais la teinte et la saturation peuvent différer.



4
votes

Ajout à la réponse de Mark Ransom: Il serait préférable d'utiliser ledit facteur avec une constante 255 et de l'ajouter à la valeur de couleur actuelle: xxx

Si vous venez de faire avec un facteur entre 0,0 et 1,0 xxx

une valeur de 0 reste zéro.


0 commentaires

-3
votes

Réglage de la luminosité d'une image est l'une des opérations de traitement d'images les plus faciles pouvant être effectuées. Tout ce qui est impliqué consiste à ajouter le changement de luminosité souhaité à chacun des composants de couleur rouge, vert et bleu.

Cela irait quelque chose comme ceci: xxx

code pour assurer que les nouvelles valeurs de rouge, de vert et de bleu sont dans la plage valide. xxx


1 commentaires

Non, c'est "mélangeur pondéré avec blanc" qui est différent de la luminosité.



4
votes

Ma recommandation serait la même que Chrisa. La réponse, avec une différence:

Utilisez le < un href = "http://alienryderflex.com/hsp.html" rel = "nofollow noreferrer"> HS p espace de couleur à la place, car il s'agit d'une approximation de l'algorithme de Photoshop et a Meilleurs résultats.


Par souci de ne pas simplement se connecter au site de HSP (qui devrait franchement être plus que suffisant; c'est juste que je n'aime pas répondre sans exemples), voici mon < Code> C # implémentation, qui suit le site: xxx


0 commentaires

0
votes
import java.io. * ;
import java.awt.Color;
import javax.imageio.ImageIO;
import java.io. * ;
import java.awt.image.BufferedImage;

class Psp {

    public static void main(String a[]) {
        try {

            File input = new File("abc.jpg");
            File output = new File("output1.jpg");
            BufferedImage picture1 = ImageIO.read(input); // original
            BufferedImage picture2 = new BufferedImage(picture1.getWidth(), picture1.getHeight(), BufferedImage.TYPE_INT_RGB);
            int width = picture1.getWidth();
            int height = picture1.getHeight();

            int factor = 50;
            for (int y = 0; y < height; y++) { //loops for images
                for (int x = 0; x < width; x++) {

                    Color c = new Color(picture1.getRGB(x, y));
                    int r = c.getRed() + factor;
                    int b = c.getBlue() + factor;
                    int g = c.getGreen() + factor;

                    if (r >= 256) {
                        r = 255;
                    } else if (r < 0) {
                        r = 0;
                    }

                    if (g >= 256) {
                        g = 255;
                    } else if (g < 0) {
                        g = 0;
                    }

                    if (b >= 256) {
                        b = 255;
                    } else if (b < 0) {
                        b = 0;
                    }
                    picture2.setRGB(x, y, new Color(r, g, b).getRGB());

                }
            }

            ImageIO.write(picture2, "jpg", output);
        } catch(Exception e) {
            System.out.println(e);
        }

    }

}

0 commentaires

0
votes

Vous pouvez essayer lookupticulable et regarder de la recherche; afin que vous puissiez ajuster la luminosité de la photo en modifiant le lookissable. Pour rendre une image lumineuse, il suffit d'ajouter une certaine valeur au RVB.

BufferedImage dstImage = new BufferedImage(input.getWidth(), input.getHeight(),BufferedImage.TYPE_3BYTE_BGR);
        LookupTable lookupTable = new ShortLookupTable(0, data);
        LookupOp op = new LookupOp(lookupTable, null);
        op.filter(toBeTone, dstImage);


0 commentaires