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 :

Uniformisation des couleurs d'une image


Sujet :

Traitement d'images

  1. #21
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 057
    Points : 9 397
    Points
    9 397
    Par défaut
    Raisonner en 47 intervalles ne fonctionne pas du tout.

    La valeur 0x3344FF est immédiatement voisine de 0x334500, et pourtant, si on regarde ces 2 couleurs, elles ne se ressemblent pas du tout.
    Et à l'opposé, les valeurs 0x3344FF et 0x3944FF sont très loin l'une de l'autre, et pourtant ces 2 couleurs se ressemblent vraiment beaucoup.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  2. #22
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Guesset : Oui bien sûr il ne s'agit pas de permutations de 5 valeurs comme il n'y en que 3
    On a donc bien 125 couleurs possibles.
    Nom : Palette.jpg
Affichages : 317
Taille : 28,4 Ko
    Notre oeil nous dit qu'on pourrait en supprimer comme certaines sont proches mais je me demandais s'il ne valait pas mieux toutes les conserver que de comparer chaque pixel à une palette qui prendrait plus de temps de traitement.
    Wheel : On dirait que les rangées se répètent et qu'il manque des couleurs, non?
    Anapurna : Certaines couleurs sont proches et il manque le "vrai" jaune il me semble.
    tbc92 : Tu dis que 0x3344FF est immédiatement voisine de 0x334500 pourtant 00 est à l'opposé de FF et pour 0x3344FF et 0x3944FF, le 33 est proche de 39.
    J'ai essayé avec les modèles TSV, HSV, XYZ mais rien à faire je ne parviens toujours pas à faire passer par exemple le bleu ciel (230,255,251) vu par notre oeil à la valeur la plus proche (192,255,255) comme 230 est plus près de 255 que de 192 à moins que ça n'ait été expliqué avant et que je n'aurais pas compris.

  3. #23
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 057
    Points : 9 397
    Points
    9 397
    Par défaut
    Sur l'histoire de 0x3344FF proche de 0x334500, on est totalement d'accord. Ce que je disais, c'est que 0x3344FF +1=0x334500 ; ces 2 entiers sont consécutifs quand on compte de 1 à 256*256*256 ; et pourtant, les couleurs sont totalement différentes.
    C'était en réponse à la proposition d'Anapurna. Cette proposition ne marche pas du tout.

    Tu peux te référer à cette discussion. Je me souviens qu'il y avait des trucs assez pointus sur la perception des couleurs. En particulier le fait que tu soulignes : 230 est plus proche de 192 que de 255 ... enfin pas sûr du tout que c'était avec ces valeurs, mais je me souviens qu'il y avait des méthodes non linéaires, et pas bricolées, mais issues de travaux solides.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  4. #24
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Sur l'histoire de 0x3344FF proche de 0x334500, on est totalement d'accord. Ce que je disais, c'est que 0x3344FF +1=0x334500 ; ces 2 entiers sont consécutifs quand on compte de 1 à 256*256*256 ; et pourtant, les couleurs sont totalement différentes.
    C'était en réponse à la proposition d'Anapurna. Cette proposition ne marche pas du tout ...
    Vos ennuis viennent de ce que vous avez cherché à passer
    d'un domaine tridimensionnel (r, v, b) ∈ [0 ; 255]3
    à un domaine unidimensionnel y ∈ [0 ; 2563 - 1]
    par une bijection où une grandeur unique y = F(r, v, b) est calculée à partir du triplet des composantes couleur;
    peu importe la fonction en cause, qu'il s'agisse
    - d'une combinaison linéaire y = r*2562 + v*256+ b , ou
    - du décalage de bits proposé par Guesset,
    ou que l'on procède éventuellement à une réduction du nombre de combinaisons, par exemple par une bijection entre [0 ; N-1]3 et [0 ; N3 - 1]

    Vous ne changerez rien au fait qu'au niveau de la perception visuelle, la proximité de deux couleurs est liée à celle de leurs composantes, et que l'un est conduit à des évaluations de la distance du type
    d = Kr*|r' - r| + Kv*|v' - v| + Kb*|b' - b] .

    Cette proximité ne peut être conservée par les fonctions précédentes; la distance entre couleurs est irréductible à l'écart
    D = K*[y' - y] .
    Exemple (par analogie) du système décimal: pour les entiers consécutifs à 3 chiffres:
    a = 898 ; b = 899 ; c = 900
    les distances valent respectivement:
    Dab = 0 + 0 + 1 = 1 ; Dbc = 1 + 9 + 9 = 19 .


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  5. #25
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 335
    Points : 4 158
    Points
    4 158
    Par défaut
    Bonjour Wiwaxia,

    Citation Envoyé par wiwaxia Voir le message
    Vos ennuis viennent de ce que vous avez cherché à passer d'un domaine tridimensionnel (r, v, b) ∈ [0 ; 255]3 à un domaine unidimensionnel y ∈ [0 ; 2563 - 1]
    par une bijection où une grandeur unique y = F(r, v, b) est calculée à partir du triplet des composantes couleur;
    peu importe la fonction en cause, qu'il s'agisse
    - de la combinaison linéaire y = r*2562 + v*256+ b , ou
    - du décalage de bits proposé par Guesset...
    L'entrelacement de bits (bizarrement précédé de V -> 4V, R -> 2R, B inchangé) n'a pas pour but de rendre unidimensionnel un espace 3D mais de proposer un ordonnancement qui rapproche (attention ce n'est pas un rapprochement absolu au sens des distances) les couleurs similaires permettant une recherche dichotomique puis une recherche exhaustive dans un petit volume 3 D autour de la couleur trouvée. Prenons l'exemple des couleurs classées par luminance. Si j'ai une couleur claire, il est inutile de balayer les couleurs de luminance inférieure à celle-ci à un delta près (par exemple, dr=2, dv=1, db =4). Ca marche aussi dans l'autre sens. On voit qu'on peut réduire sensiblement l'amplitude de la recherche exhaustive. C'est le but des ordonnancements : ils ne sont pas suffisants mais ils permettent des recherches beaucoup plus rapides.

    Citation Envoyé par wiwaxia Voir le message
    Vous ne changerez rien au fait qu'au niveau de la perception visuelle, la proximité de deux couleurs est liée à celle de leurs composantes, et que l'un est conduit à des évaluations de la distance du type d = Kr|r' - r| + Kv|v' - v| + Kb|b' - b|
    C'est une distance parmi d'autres et ce n'est pas la plus perceptuelle : une distance euclidienne avec renormalisation des axes (en français avec coefficients ) sera meilleure sans être idéale. Il y a des espaces perceptuels comme L*A*B* mais y calculer une distance serait du sport.

    Il y a une hypothèse implicite qui est fausse : l'espace R V B représenterait les couleurs perçues. Il faut savoir que la traduction de la perception conduit normalement à pouvoir avoir des composantes négatives (les cônes déconnent , enfin ce ne sont pas des filtres suffisamment sélectifs pour créer des axes totalement indépendants et les batônnets n'arrangent rien). Tout ça pour dire que la démarche mathématique est utile mais reste une approximation de notre perception.

    Salut.
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  6. #26
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Uniformisation des couleurs d'une image
    Citation Envoyé par Guesset Voir le message
    ... C'est une distance parmi d'autres et ce n'est pas la plus perceptuelle : une distance euclidienne avec renormalisation des axes (en français avec coefficients ) sera meilleure sans être idéale. Il y a des espaces perceptuels comme L*A*B* mais y calculer une distance serait du sport ...
    J'avais pris un exemple volontairement simple - peut-être trop; cependant la simplicité des calculs me paraissait prioritaire, dans le cas envisagé. Et remplacer |i' - i| par (i' - i)2 ne change pas le sens de la remarque.

    PS: Effectivement, je n'aurais pas dû inclure le brassage de bits
    Citation Envoyé par Guesset Voir le message
    ... L'entrelacement de bits (bizarrement précédé de V -> 4V, R -> 2R, B inchangé) n'a pas pour but de rendre unidimensionnel un espace 3D mais de proposer un ordonnancement qui rapproche (attention ce n'est pas un rapprochement absolu au sens des distances) les couleurs similaires permettant une recherche dichotomique puis une recherche exhaustive dans un petit volume 3 D autour de la couleur trouvée ...
    dont le résultat donne lieu à un traitement particulier.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  7. #27
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Quel que soit le mode utilisé, RGB, TSV, HSV, LAB ou XYZ, les distances minimales entre les 2 couleurs citées auparavant (le bleu ciel (proche du blanc) et le blanc) donnent une couleur blanche pour ce bleu ciel (oxE6FFFB = 230,255,251).
    tbc92 : Houlà c'est de la haute voltige là, j'espère que celui qui a engagé le sujet a eu sa réponse après 17 pages mais à part des arcs-en-ciel je n'ai pas trouvé la réponse à ma question de départ.

  8. #28
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 057
    Points : 9 397
    Points
    9 397
    Par défaut
    Tu considères que (230,255,255) est plus proche de (192,255,255) que de (255,255,255). Ok, c'est ton choix, je pense que c'est subjectif.
    Et tu mets la frontière où ?
    Admettons que tu la mettes entre (237,255,255) et (238,255,255)
    (237,255,255) doit être converti en (192,255,255) et (238,255,255) doit être converti en (255,255,255)

    Dans ce cas, tu peux procéder en 2 temps.

    Tu as ta liste de 48 couleurs finales. Dont en particulier (192,255,255) et (255,255,255)
    Chaque couleur finale a éventuellement plusieurs couleurs filles.
    Par exemple (192,255,255) aurait une fille (220,255,255)
    Ensuite, pour chaque pixel de ton image, tu compares sa couleur à toutes les couleurs filles, et tu retiens la plus proche.
    Comme ça (237,255,255) sera associé à (220,255,255) et non (255,255,255) (distance =17 contre 18)
    Et (238,255,255) sera bien associé à (255,255,255)
    Et étape suivante, puisque (237,255,255) a été attaché à (220,255,255), et que (220,255,255) est une fille de (192,255,255), on rattache (237,255,255) à (192,255,255)

    Je ne m'intéresse qu'aux 'business requirements' : obtenir un résultat conforme à la demande.
    Quand on saura faire ça, il y aura probablement une 2ème étape "optimisation, pour éviter que le traitement d'une image dure 20 minutes".

    Pour faire un parallèle :
    Sur une carte d'Europe, on a les capitales des différents pays et uniquement ça, on n'a pas les frontières.
    Pour chaque petite commune, on cherche la capitale la plus proche, et dans le doute la commune est rattachée à ce pays.
    En procédant ainsi, Biarritz est rattaché à Madrid, et donc à l'Espagne. Bof.
    On ajoute dans notre base de données quelques métropoles (Bordeaux, Lyon ...)
    Comme ça, la ville la plus proche de Biarritz est maintenant Bordeaux, et Biarritz est bien rattaché à la France. Jackpot.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  9. #29
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    C'était justement ma question de départ.
    Notre oeil voit du bleu ciel et une simplification donne du blanc.

  10. #30
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 421
    Points : 5 820
    Points
    5 820
    Par défaut
    salut

    il faut donc prendre le cube de colorimettrie
    ce qui nous fait 8 couleurs cardinal
    (1,1,1) // White
    (0,1,1) // Cyan
    (0,0,1) // Blue
    (1,0,1) // Magenta
    (1,0,0) // Red
    (1,1,0) // Yellow
    (0,1,0) // Green
    (0,0,0) // Black
    sachant que chaque couleur peut prendre une valeur entre 0 et 255
    il suffit de la divisé en 6 valeurs a l'arrondi pres
    ce qui nous donne
    Nom : Capture d’écran 2022-11-15 173708.png
Affichages : 292
Taille : 923 octets
    j'avoue que pour la derniere ligne j'ai inversé le process quand tout est noir je tire vers le blancs
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  11. #31
    Membre actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Points : 292
    Points
    292
    Par défaut
    On dirait que les rangées se répètent et qu'il manque des couleurs, non?
    c'est le contexte qui détermine la pertinence d'une palette dans certains cas même avec une plage de 65000 couleurs on remarquerait l'absence de certaines couleurs ... vous pouvez utilisé une technique de diffusion de l'erreur pour générer les couleurs qui n'existe pas dans la palette.


  12. #32
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Uniformisation des couleurs d'une image
    @ BBouille
    Bonjour,

    J'ai l'impression que l'on n'a pas répondu à l'une de tes questions, à savoir pourquoi la teinte claire envisagée (230, 255, 251) n'est pas remplacée par autre chose que du blanc (255, 255, 255).
    Citation Envoyé par BBouille Voir le message
    ... J'ai essayé avec les modèles TSV, HSV, XYZ mais rien à faire je ne parviens toujours pas à faire passer par exemple le bleu ciel (230,255,251) vu par notre oeil à la valeur la plus proche (192,255,255) comme 230 est plus près de 255 que de 192 à moins que ça n'ait été expliqué avant et que je n'aurais pas compris.
    Citation Envoyé par BBouille Voir le message
    Quel que soit le mode utilisé, RGB, TSV, HSV, LAB ou XYZ, les distances minimales entre les 2 couleurs citées auparavant (le bleu ciel (proche du blanc) et le blanc) donnent une couleur blanche pour ce bleu ciel (oxE6FFFB = 230,255,251) ...
    Citation Envoyé par BBouille Voir le message
    C'était justement ma question de départ.
    Notre œil voit du bleu ciel et une simplification donne du blanc.
    Cela provient du choix de la grille d'approximation, dont le pas (h = 255/N) n'est pas suffisamment petit pour que la plus faible composante (230) devienne numériquement distincte de la valeur maximale (255).
    Il faut en effet: Round(230/h) < N donc 230/h < N - 0.5 ,
    soit encore: 230 < N*h - 0.5*h = 255 - 0.5*h ,
    ce qui donne: 0.5*h < 255 - 230 = 25 , soit finalement:
    h < 50 et N > 255/50 = 5.1
    .
    Il faut donc envisager une division du domaine en plus de 5 intervalles.

    On obtient par exemple, pour y = 230/h = 230*N/255 et sa valeur entière approchée A = Round(y)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    N = 2        3        4        5        6        7  
    y = 1.804    2.706    3.608    4.510    5.412    6.314
    A = 2        3        4        5        5        6


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  13. #33
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 421
    Points : 5 820
    Points
    5 820
    Par défaut
    salut

    il n'y a pas que la valeur d'intervalle qui est importante
    exemple voici une palette avec un interval de 6
    Nom : Capture d’écran 2022-11-18 -2 .png
Affichages : 83
Taille : 1,1 Ko

    voici le detail RGB des valeur de la palette
    celles en orange correspondent au cyan de cette echantillon
    [QUOTE
    ]R:255 G:255 B:255 D:0
    R:127 G:127 B:127 D:0
    R:85 G:85 B:85 D:0
    R:63 G:63 B:63 D:0
    R:51 G:51 B:51 D:0
    R:42 G:42 B:42 D:0

    R:0 G:255 B:255 D:1
    R:0 G:127 B:127 D:1
    R:0 G:85 B:85 D:1
    R:0 G:63 B:63 D:1
    R:0 G:51 B:51 D:1
    R:0 G:42 B:42 D:1

    ....

    R:0 G:0 B:0 D:7
    R:128 G:128 B:128 D:7
    R:170 G:170 B:170 D:7
    R:192 G:192 B:192 D:7
    R:204 G:204 B:204 D:7
    R:213 G:213 B:213 D:7
    [/QUOTE]

    Nom : Capture d’écran 2022-11-18 .png
Affichages : 67
Taille : 1,0 Ko
    voici une nouvelle palette elle aussi avec un intervale de 6
    on vois pourtant bien que celle ci n'est pas identique a la premiere
    R:255 G:255 B:255 D:0
    R:213 G:213 B:213 D:0
    R:170 G:170 B:170 D:0
    R:127 G:127 B:127 D:0
    R:85 G:85 B:85 D:0
    R:43 G:43 B:43 D:0

    R:0 G:255 B:255 D:1
    R:43 G:255 B:255 D:1
    R:85 G:255 B:255 D:1
    R:127 G:255 B:255 D:1
    R:170 G:255 B:255 D:1
    R:213 G:255 B:255 D:1

    ...
    R:0 G:0 B:0 D:7
    R:43 G:43 B:43 D:7
    R:85 G:85 B:85 D:7
    R:127 G:127 B:127 D:7
    R:170 G:170 B:170 D:7
    R:213 G:213 B:213 D:7
    pour le coup l'observation de wixmania fonctionne sur cette version
    comme nous l'avons dis precedement les couleur peuvent etre repressenté par un cube en 3 dimension
    a chaque angle corespond une couleur precisse (voir sur mes post precedent)
    selon que tu varie le maximun ou le minimun tu peut te retrouver dans l'un ou l'autre des cas
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  14. #34
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Wiwaxia : J'avais entamé cette méthode mais ça augmente le nombre de couleurs dans la palette non?
    Voulant éviter le calcul des distances entre 2 couleurs qui mène à des boucles imbriquées gourmandes en temps de traitement, je suis sur une autre piste qui semble être assez simple.
    Pour chaque pixel de l'image on transforme sa couleur RGB en TSV (HSV, HSB).
    Le TSV nous donne les couleurs rouge, jaune, vert, turquoise, bleu, magenta et de nouveau rouge de 0 à 360°.
    Le T nous donne la couleur du pixel et dans le cas de notre pixel bleu ciel très clair (230,255,255) on obtient bien la teinte turquoise (cyan).
    Le V nous donne la luminosité et toujours dans notre cas elle est très élevée.
    On voit donc qu'on peut attribuer à ce pixel la couleur bleu ciel de la palette (192,255,255).
    Reste à voir maintenant pour les couleurs intermédiaires, brun, orange, ...
    Il faudra sûrement tenir compte de la saturation (S) donc je ne suis pas sorti du bois.
    Anapurna : J'avoue ne pas avoir compris.

  15. #35
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 057
    Points : 9 397
    Points
    9 397
    Par défaut
    Et quand on travaille avec des angles, il ne faut pas oublier que 358° est plus proche de 2° que de 340°.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  16. #36
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Et quand on travaille avec des angles, il ne faut pas oublier que 358° est plus proche de 2° que de 340°.
    ... et cela soulève aussi le problème de la densité des points, ou si l'on veut de la distance moyenne séparant des couleurs voisines ...


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  17. #37
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Uniformisation des couleurs d'une image
    J'ai regardé pour comparaison ce que pouvait donner une palette assez grossière comportant 43 = 64 couleurs, et résultant de la division de l'intervalle [0..255] en 3 sous-domaines de même largeur (h = 255/3 = 85).

    L'image testée paraît quelque peu bâclée et fait désordre, mais je n'avais faute de temps rien d'autre sous la main:

    Nom : F_1_B_Image initiale.png
Affichages : 255
Taille : 384,9 Ko

    On y trouve un rectangle de couleur uniforme (230_255_251).

    La transformation conduit à une seconde image, dont la teinte varie suivant l'endroit d'une manière discontinue, comme on pouvait s'y attendre:

    Nom : F_2_B_Image Linéaire.png
Affichages : 269
Taille : 45,5 Ko

    ... et le rectangle bleu ciel a viré au blanc (255_255_255), pour la raison expliquée en détail (#32).

    La palette complète présente par ailleurs des teintes sombres et peu discernables entre elles:
    Nom : F_2_A_Palette linéaire.png
Affichages : 270
Taille : 1,1 Ko
    Un procédé simple permet de pallier à ces deux inconvénients; il consiste à renoncer à une grille de pas uniforme, et à considérer des seuils de plus en plus rapprochés au fur et à mesure qu'ils augmentent, la quantification ne portant plus sur les indices de couleur mais sur leurs carrés, donc implicitement (et d'une manière approchée) sur les luminances.
    Soit dans le cas présent en remplaçant la relation linéaire i = Round(255*k/3)
    par la relation i = Round(Sqrt(2552*k/3)) ;
    le changement a pour effet d'éclaircir la palette:
    Nom : F_2_A_Palette Racine N.png
Affichages : 265
Taille : 1,1 Ko
    en restreignant l'étendue des zones sombres, et conduit à l'image suivante:

    Nom : F_2_B_Image Racine N.png
Affichages : 261
Taille : 51,7 Ko

    où la couleur bleu ciel est qualitativement préservée (208_255_255).

    Ainsi à nombre égal de valeurs, le procédé permet une meilleurs distinction des couleurs les plus claires.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  18. #38
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    C'est pas mal du tout ça. Tu ne conclus pas mais estimes-tu que c'est complet et suffisant pour répondre à la question de départ?

  19. #39
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Uniformisation des couleurs d'une image
    Citation Envoyé par BBouille Voir le message
    C'est pas mal du tout ça. Tu ne conclus pas mais estimes-tu que c'est complet et suffisant pour répondre à la question de départ?
    La réponse n'a rien d'évident, car la recherche de la fonction convertissant toutes les couleurs données en (0, 255, 255)
    peut conduire à de nombreuses solutions ... et que feras-tu des autres couleurs ?

    Tu peux essayer les deux algorithmes proposés, éventuellement construits sur d'autres divisions du domaine [0..255].
    Ou même envisager une partition irrégulière ... J'y aurais vu plus clair si tu avais donné les valeurs décimales
    Le plus simple serait de montrer l'image sur laquelle tu travailles, en indiquant la (ou les) zone(s) à convertir en cyan pur.

    Je vais être indisponible dans les jours qui viennent. Tu peux éventuellement consulter les programmes sources, qui se lisent comme du pseudo-code.

    Pour la conversion linéaire des couleurs:
    Code Pascal : 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
    PROGRAM Couleurs_Approchees;                     // Echelle lin‚aire
     
     USES Crt, E_Texte, U_Math, U_Copie_1F_ter, Math;
     
     CONST Chemin = 'D:\Virtual_Pascal\Fichiers_VP\Z_Modif_Im\Coul_App\';
           M1 = 255;
     
     TYPE Tab_3x3x3P = ARRAY[0..3] OF ARRAY[0..3] OF ARRAY[0..3] OF Pixel;
     
     VAR Palette: Tab_3x3x3P;
     
    (*HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
     
     Calcul de chaque pixel de la nouvelle image
     
     en fonction de celui de l'ancienne
     
     Echelle lin‚aire
     
    HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH*)
     
     PROCEDURE Calc_Mat_Im2_B(La, Ha: Z_32; VAR Ma1, Ma2: Tab_Pix);
       VAR i: Byte; Xm, Ym: Z_32; w: Reel; Px, Px1: Pixel;
       BEGIN
         FOR Xm:= 0 TO (La - 1) DO
           FOR Ym:= 0 TO (Ha - 1) DO
             BEGIN
               Px:= Ma1[Xm, Ym];
               FOR i:= 1 TO 3 DO   // w:= Sqr(Px[i] / M1); Px1[i]:= Round(3 * w)
                 BEGIN
                   w:= Px[i] / M1; Px1[i]:= Round(3 * w)
                 END;
               Ma2[Xm,Ym]:= Palette[Px1[1]][Px1[2]][Px1[3]]
             END
       END;
     
     PROCEDURE Calc_Mat_Im2_A(La, Ha: Z_32; VAR Ma1, Ma2: Tab_Pix);
       VAR I1, I2, I3: Word; Carreau, Limite, Xm, Ym: Z_32;
       BEGIN
         Limite:= La DIV 2; Carreau:= La DIV 8; // Carreau = 50
         FOR Xm:= 0 TO (La - 1) DO
           FOR Ym:= 0 TO (Ha - 1) DO
             BEGIN
               IF (Xm<Limite) THEN IF (Ym<Limite) THEN I1:= 0
                                                  ELSE I1:= 2
     
                              ELSE IF (Ym<Limite) THEN I1:= 1
                                                  ELSE I1:= 3;
               I2:= (Xm DIV Carreau) MOD 4;
               I3:= (ym DIV Carreau) MOD 4;
               Ma2[Xm,Ym]:= Palette[I1][I2][I3]
             END
       END;
     
     PROCEDURE Init_P(VAR Pal_: Tab_3x3x3P);  // C3 = 85 ; C4 = 21675 = (255^2)/3
       CONST C3 = M1 DIV 3; // C4 = M1 * C3;
       VAR I1, I2, I3: Byte; Px: Pixel;
       BEGIN
         FOR I1:= 0 TO 3 DO
           BEGIN
             Px[1]:= Round(C3 * I1);           // Px[1]:= Round(Sqrt(C4 * I1));
             FOR I2:= 0 TO 3 DO
               BEGIN
                 Px[2]:= Round(C3 * I2);       // Px[2]:= Round(Sqrt(C4 * I2));
                 FOR I3:= 0 TO 3 DO
                   BEGIN
                     Px[3]:= Round(C3 * I3);   // Px[3]:= Round(Sqrt(C4 * I3));
                     Pal_[I1][I2][I3]:= Px
                   END
               END
           END
       END;
     
    (*HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
     
     Programme principal
     
    HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH*)
     
     BEGIN
       Copie_F1(Chemin + 'Doss_1\F_1_A');
     
       Init_P(Palette);
       Calc_Mat_Im2_A(Larg_Image, Haut_Image, Matrice_1, Matrice_2);
     
       Creation_F2(Chemin + 'Doss_2\F_2_A');
     
       Copie_F1(Chemin + 'Doss_1\F_1_B');
     
       Calc_Mat_Im2_B(Larg_Image, Haut_Image, Matrice_1, Matrice_2);
     
       Creation_F2(Chemin + 'Doss_2\F_2_B'); A_;
     END.
    Pour la conversion non-linéaire:
    Code Pascal : 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
     PROGRAM Couleurs_Approchees;
     
     USES Crt, E_Texte, U_Math, U_Copie_1F_ter, Math;
     
     CONST Chemin = 'D:\Virtual_Pascal\Fichiers_VP\Z_Modif_Im\Coul_App\';
           M1 = 255;
     
     TYPE Tab_3x3x3P = ARRAY[0..3] OF ARRAY[0..3] OF ARRAY[0..3] OF Pixel;
     
     VAR Palette: Tab_3x3x3P;
     
    (*HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
     
     Calcul de chaque pixel de la nouvelle image
     
     en fonction de celui de l'ancienne
     
    HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH*)
     
     PROCEDURE Calc_Mat_Im2_B(La, Ha: Z_32; VAR Ma1, Ma2: Tab_Pix);
       VAR i: Byte; Xm, Ym: Z_32; w: Reel; Px, Px1: Pixel;
       BEGIN
         FOR Xm:= 0 TO (La - 1) DO
           FOR Ym:= 0 TO (Ha - 1) DO
             BEGIN
               Px:= Ma1[Xm, Ym];
               FOR i:= 1 TO 3 DO
                 BEGIN
                   w:= Sqr(Px[i] / M1); Px1[i]:= Round(3 * w);
                 END;
               Ma2[Xm,Ym]:= Palette[Px1[1]][Px1[2]][Px1[3]]
             END
       END;
     
     PROCEDURE Calc_Mat_Im2_A(La, Ha: Z_32; VAR Ma1, Ma2: Tab_Pix);
       VAR I1, I2, I3: Word; Carreau, Limite, Xm, Ym: Z_32;
       BEGIN
         Limite:= La DIV 2; Carreau:= La DIV 8; // Carreau = 50
         FOR Xm:= 0 TO (La - 1) DO
           FOR Ym:= 0 TO (Ha - 1) DO
             BEGIN
               IF (Xm<Limite) THEN IF (Ym<Limite) THEN I1:= 0
                                                  ELSE I1:= 2
     
                              ELSE IF (Ym<Limite) THEN I1:= 1
                                                  ELSE I1:= 3;
               I2:= (Xm DIV Carreau) MOD 4;
               I3:= (ym DIV Carreau) MOD 4;
               Ma2[Xm,Ym]:= Palette[I1][I2][I3]
             END
       END;
     
     PROCEDURE Init_P(VAR Pal_: Tab_3x3x3P);  // C3 = 85 ; C4 = 21675 = (255^2)/3
       CONST C3 = M1 DIV 3; C4 = M1 * C3;
       VAR I1, I2, I3: Byte; Px: Pixel;
       BEGIN
         FOR I1:= 0 TO 3 DO
           BEGIN
             Px[1]:= Round(Sqrt(C4 * I1));
             FOR I2:= 0 TO 3 DO
               BEGIN
                 Px[2]:= Round(Sqrt(C4 * I2));
                 FOR I3:= 0 TO 3 DO
                   BEGIN
                     Px[3]:= Round(Sqrt(C4 * I3));
                     Pal_[I1][I2][I3]:= Px
                   END
               END
           END
       END;
     
    (*HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
     
     Programme principal
     
    HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH*)
     
     BEGIN
       Copie_F1(Chemin + 'Doss_1\F_1_A');
     
       Init_P(Palette);
       Calc_Mat_Im2_A(Larg_Image, Haut_Image, Matrice_1, Matrice_2);
     
       Creation_F2(Chemin + 'Doss_2\F_2_A');
     
       Copie_F1(Chemin + 'Doss_1\F_1_B');
     
       Calc_Mat_Im2_B(Larg_Image, Haut_Image, Matrice_1, Matrice_2);
     
       Creation_F2(Chemin + 'Doss_2\F_2_B'); A_;
     END.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  20. #40
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Uniformisation des couleurs d'une image
    Pour voir ce que cela donne dans le cas d'un portrait:

    Nom : F_1_B_Audrey H.png
Affichages : 250
Taille : 508,1 Ko

    a) la régression à 64 couleurs, en mode linéaire:

    Nom : F_2_B_Linéaire.png
Affichages : 266
Taille : 66,9 Ko

    b) la même régression, en mode parabolique:

    Nom : F_2_B_Racine N_Audrey H.png
Affichages : 268
Taille : 73,6 Ko


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

Discussions similaires

  1. Transformation des couleurs d'une image
    Par Seth77 dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 11/12/2009, 11h53
  2. Lecture des couleurs d'une image Bitmap
    Par beekeep dans le forum MFC
    Réponses: 4
    Dernier message: 04/05/2009, 19h10
  3. [Débutant] Fleche, Texte, Cadre et Choix des couleurs sur une image
    Par niepoc dans le forum MATLAB
    Réponses: 10
    Dernier message: 16/07/2008, 16h44
  4. Réponses: 2
    Dernier message: 06/01/2007, 11h59
  5. [Traitement d'image] Modification des couleur d'une image png
    Par lio33 dans le forum Webdesign & Ergonomie
    Réponses: 3
    Dernier message: 01/10/2006, 22h24

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