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 :

Problème de matrices et de conversion d'espaces de couleurs


Sujet :

Traitement d'images

  1. #61
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    J'ai fait une synthèse de ces fonctions similaires, il n'en reste plus que 4 :

    2 identiques au test de tête près :
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if t*t*t > ZEROZEROQUATREVINGTHUITCINQUANTESIX then t := t*t*t else t := (t - SEIZEsurCENTSEIZE) * div_SEPTpointSEPTCENTQUATREVINGTSEPT;
    // ou
    if t > 0.206896552 then // suite identique à dessus

    et 2 autres, différentes des 2 de dessus par le test sur Y et son traitement (qui correspond au L de CIE-LCh°),
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if Y > NEUFCENTTROISpointTROIS * ZEROZEROQUATREVINGTHUITCINQUANTESIX
      then Y := power( (Y + 16) / 116, 3) else Y := Y * div_NEUFCENTTROISpointTROIS;
    et différentes entre elles par le calcul de X et Z :
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if X*X*X > ZEROZEROQUATREVINGTHUITCINQUANTESIX then X := X*X*X else X := (X - SEIZEsurCENTSEIZE) * div_SEPTpointSEPTCENTQUATREVINGTSEPT;
    // ou
    if X*X*X > ZEROZEROQUATREVINGTHUITCINQUANTESIX then X := X*X*X else X := (X * 116 - 16) * div_NEUFCENTTROISpointTROIS;

    Au bout du compte ça fait donc 4 fonctions différentes, qui génèrent 4 images identiques au pixel près (j'ai un comparateur de fichiers bmp qui travaille octet par octet).
    Comment choisir ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  2. #62
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Bonjour,

    Citation Envoyé par Jipété Voir le message
    Comment choisir ?
    Je pense que je vais faire au plus simple et pi valà !
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // les 3 valeurs au même régime :
    if t > 0.206896552 then t := t*t*t else t := (t - SEIZEsurCENTSEIZE) * div_SEPTpointSEPTCENTQUATREVINGTSEPT;


    Et maintenant, en avant pour la nouvelle étape et donc d'abord, posons de bonnes bases !

    Je lis chez Bruce, entre les deux tableaux,
    For those RGB working spaces that are not natively D50, the Bradford-adapted D50 matrices are
    suivi d'une liste de valeurs de matrices.
    Ok, mais quelles matrices utiliser ? Comment savoir, quand je tripote les curseurs de mon programme en Pascal pour jouer avec les niveaux de L, de C, et les degrés de h°, dans quel "working space" je suis ?

    Par exemple, J. Delmas nous explique que le mode CIELab de Photoshop travaille en D50, information intéressante pour préparer un fichier en amont, mais le préparer à partir de quoi ?

    C'est la question du week-end, que je vous souhaite excellent
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #63
    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 Problème de matrices et de conversion d'espaces de couleurs
    Je travaillais sur le sujet depuis un moment, et ne retrouve plus certaines de tes remarques; peut-être as-tu modifié ton message ?
    Quoi qu'il en soit, tu parviens au même résultat par quatre voies différentes, et cela prouve que tes codes sont corrects .

    Au bout du compte ça fait donc 4 fonctions différentes, qui génèrent 4 images identiques au pixel près (j'ai un comparateur de fichiers bmp qui travaille octet par octet).
    Comment choisir ?
    Et s'il faut s'en tenir aux six lignes de code que comportent les échantillons, je choisirais le deuxième, apparemment exempt des cochoncetés algorithmiques déjà commentées.

    Je suggèrerais seulement une cure d'amaigrissement à tes identificateurs de constantes, qui souffrent d'une obésité pathologique:
    # Pi_180 = Pi / 180 (ou encore: DegRad, puisqu'il s'agit du facteur de conversion des degrés en radians;
    # tous les calculs se rapportent apparemment à l'expression de la luminosité (lien déjà mentionné) en fonction de la luminance lumineuse (y); il n'y intervient en fait que des constantes entières, à partir desquelles on pourrait calculer les valeurs décimales:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    L = 116*y^(1/3) - 16 si y > (6/29)^3 = 0.008856 (= 0.008856451679)
    L = (116/3)*(29/6)^2*y = 903.30*y sinon (903.2962963)
     
    y = ((L + 16)/116)^3 si L > 8
    y = (3/116)*(6/29)^2*L = L/903.30
    Ne penses-tu pas qu'il serait plus pratique d'introduire des conventions comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      CONST C1 = 6 / 29;  C2 = C1 * C1; Ylim = C1 * C2;     // Ylim = 0.008856451679
            C3 = 116 / 3; Ky = C3 / C2; // Ky ~ 903.2962963
    Virtual Pascal les accepte, et probablement aussi Lazarus/Fre Pascal.

    Tu as injustement parlé du site EasyRGB, dont les formules de conversion sont bien présentées et aisément compréhensibles;
    ... EasyRGB, (et c'est mal foutu : une fois sur la page, clique sur CIE-L*ab --> XYZ) c'est du pseudo-code, libre à chacun de l'écrire à sa sauce ...
    leur traduction en Pascal est immédiate.
    Il est vrai que tu as supprimé cette remarque.

    Il y deux choses (d'ailleurs liées) que je ne comprends pas dans la construction du dégradé:
    a) quelle est la grandeur photométrique initialement liée à chacun des pixels (i, j) de l'image, et de laquelle on déduit les composantes (r, v, b) ?
    b) pourquoi n'as-tu pas utilisé la luminance relative standard, pourtant plus simple d'emploi à mon avis) que les grandeurs de la photométrie visuelle ?

    On trouve sur ce sujet des références incontournables, et très bien exposées:
    # MathML version of the relative luminance definition

    # W3C
    Relative luminance_WCAG definition of relative luminance

    relative luminance_Web Content Accessibility Guidelines (WCAG) 2.0


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

  4. #64
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Citation Envoyé par wiwaxia Voir le message
    Je travaillais sur le sujet depuis un moment, et ne retrouve plus certaines de tes remarques; peut-être as-tu modifié ton message ?
    Quoi qu'il en soit, tu parviens au même résultat par quatre voies différentes, et cela prouve que tes codes sont corrects .
    Pas que je sache -- de quel message parles-tu ?

    Merci pour les compliments, ça compense les pertes de poids liées aux gouttes de sueur perdues,


    Citation Envoyé par wiwaxia Voir le message
    Je suggèrerais seulement une cure d'amaigrissement à tes identificateurs de constantes, qui souffrent d'une obésité pathologique:
    # Pi_180 = Pi / 180 (ou encore: DegRad, puisqu'il s'agit du facteur de conversion des degrés en radians;
    # tous les calculs se rapportent apparemment à l'expression de la luminosité (lien déjà mentionné) en fonction de la luminance lumineuse (y); il n'y intervient en fait que des constantes entières, à partir desquelles on pourrait calculer les valeurs décimales:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    L = 116*y^(1/3) - 16 si y > (6/29)^3 = 0.008856 (= 0.008856451679)
    L = (116/3)*(29/6)^2*y = 903.30*y sinon (903.2962963)
     
    y = ((L + 16)/116)^3 si L > 8
    y = (3/116)*(6/29)^2*L = L/903.30
    Je pense (déjà dit, faudrait que je demande à des spécialiste Laz) que le compilateur calcule tout ça avant de générer le fichier exécutable ou, au pire, ça sera calculé lors de la mise en mémoire du programme juste avant l'exécution, donc pourquoi se prendre la tête ?

    Citation Envoyé par wiwaxia Voir le message
    Ne penses-tu pas qu'il serait plus pratique d'introduire des conventions comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      CONST C1 = 6 / 29;  C2 = C1 * C1; Ylim = C1 * C2;     // Ylim = 0.008856451679
            C3 = 116 / 3; Ky = C3 / C2; // Ky ~ 903.2962963
    Virtual Pascal les accepte, et probablement aussi Lazarus/Fre Pascal.
    Pas très parlant, je trouve, surtout quand on est face à plusieurs fonctions + ou - similaires, alors dans un premier temps je reste avec mes noms longs, CENTSEIZEsurTROIS c'est plus causant que C3,

    Citation Envoyé par wiwaxia Voir le message
    Tu as injustement parlé du site EasyRGB, dont les formules de conversion sont bien présentées et aisément compréhensibles;
    Je disais ça dans le sens où il n'est pas possible de donner un lien direct vers la page dont on parle : on peut aller sur la page math par un lien, mais après faut cliquer sur la formule, c'est ça qui me déplaît un peu.


    Citation Envoyé par wiwaxia Voir le message
    Il y deux choses (d'ailleurs liées) que je ne comprends pas dans la construction du dégradé:
    a) quelle est la grandeur photométrique initialement liée à chacun des pixels (i, j) de l'image, et de laquelle on déduit les composantes (r, v, b) ?
    b) pourquoi n'as-tu pas utilisé la luminance relative standard, pourtant plus simple d'emploi à mon avis) que les grandeurs de la photométrie visuelle ?
    a) l'ihm comporte 3 curseurs L (0..100), C (0..100) et h° (0..360) et pour le dégradé automatique au lancement du binaire, je fixe C à 50 et j'utilise une boucle
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for hauteur := 0 to 100 do 
      for largeur := 0 to 360 do 
        calcule_la_couleur_de_ce_point(hauteur, C, largeur);
    b) euh, de quoi tu parles ?

    Citation Envoyé par wiwaxia Voir le message
    On trouve sur ce sujet des références incontournables, et très bien exposées:
    # MathML version of the relative luminance definition
    Pas tout compris, là (à peine survolé), mais y ai trouvé la réponse à ma question existentielle du week-end :
    Note 2: Almost all systems used today to view Web content assume sRGB encoding. Unless it is known that another color space will be used to process and display the content, authors should evaluate using sRGB colorspace.
    et ça, c'est top de chez top !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #65
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    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 053
    Points : 9 393
    Points
    9 393
    Par défaut
    je reviens sur le petit exercice proposé par foetus : comparer 5+'3' et 5-'3'. C'était quoi, l'intérêt pédagogique de sa question ?
    L'idée, c'était que dès qu'on manipule des objets avec des types différents, il faut se méfier. Des objets avec des types différents, ça veut dire une formule où on additionne un entier avec une chaine (l'exemple 1), on soustrait un entier et une chaine ( l'exemple 2)... mais ça peut être aussi une formule où on additionne un entier et un réel.

    Le compilateur se débrouille ; en général, en lisant la doc, on peut trouver quels arbitrages il va faire. Quand on a une formule qui manipule un entier et une chaîne, elle va convertir les 2 éléments dans le même type. Puis elle va faire l'opération demandée.
    Dans cet exemple, additionner 2 chaines, ça a un sens, et donc 5+'3', ça donne '53'. Soustraire 2 chaines, ça n'a pas de sens, et donc on va les convertir en entiers : 5-'3' = 2.

    Si on fait y = a*b ou y = b*a ... dans certains langages, on va obtenir des résultats différents. Si a = 3.14159 et b = 10, si par malchance notre compilateur décide de tout convertir en entiers parce que b est déclaré comme entier, on va avoir des surprises.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  6. #66
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Si on fait y = a*b ou y = b*a ... dans certains langages, on va obtenir des résultats différents. Si a = 3.14159 et b = 10, si par malchance notre compilateur décide de tout convertir en entiers parce que b est déclaré comme entier, on va avoir des surprises.
    Quelle horreur !
    Merci à Pascal et à son fort typage, qui nous évite ces embrouilles

    Truc de malade, ce que tu expliques : s'il faut passer son temps à lire la doc, on ne le passe pas à (essayer de) comprendre ce que fait le prog, et il n'y a que 24 heures par jour, misère de nous,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #67
    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
    ... Le compilateur se débrouille ...
    C'est bien cela qui est inquiétant: lui laisser l'initiative, au risque d'obtenir n'importe quoi à la moindre faute de frappe ou de syntaxe.
    Cela fait penser à une autoroute à 8 voies, dépourvue de balisage au sol: on peut foncer, on a toute la place pour le faire, mais tout peut surgir de l'arrière sans préavis ... C'est évidemment moins risqué dans le cas d'un logiciel (à moins qu'on lui ait confié le pilotage du véhicule ).

    Je tiens à ce que le compilateur plante sur toute instruction fautive, et la signale: il subsiste suffisamment de problèmes potentiels (format des variables, dépassements d'intervalles) dans la rédaction ou l'extension d'un programme, auxquels il faut rester attentif.


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

  8. #68
    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 Problème de matrices et de conversion d'espaces de couleurs
    Citation Envoyé par Jipété Voir le message
    ... Pas très parlant, je trouve, surtout quand on est face à plusieurs fonctions + ou - similaires, alors dans un premier temps je reste avec mes noms longs, CENTSEIZEsurTROIS c'est plus causant que C3, ...
    Oui, mais c'est surtout plus pénible à lire !
    (C1, C2, C3) ne sont que des intermédiaires de calcul, que l'on ne retrouve pas par la suite et auxquels on aurait pu réserver une autre notation, si possible brève et peu usitée(O1, O2, O3) - c'est un choix personnel.
    Ce sont les termes (Ylim, Ky) qui interviennent, et dont il n'est pas nécessaire d'écrire les valeurs décimales; le procédé supprime de plus toute dérive calculatoire due à l'emploi de valeurs approchées.

    Citation Envoyé par Jipété Voir le message
    ... a) l'ihm comporte 3 curseurs L (0..100), C (0..100) et h° (0..360) et pour le dégradé automatique au lancement du binaire, je fixe C à 50 et j'utilise une boucle
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for hauteur := 0 to 100 do 
      for largeur := 0 to 360 do 
        calcule_la_couleur_de_ce_point(hauteur, C, largeur);
    Justement, qu'est-ce qui est d'abord calculé en ce point, et qui dépend des coordonnées ? Une luminosité locale ? L'un des termes (X, Y, Z) ? C'est ce que je ne comprends pas.


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

  9. #69
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Citation Envoyé par wiwaxia Voir le message
    Justement, qu'est-ce qui est d'abord calculé en ce point, et qui dépend des coordonnées ? Une luminosité locale ? L'un des termes (X, Y, Z) ? C'est ce que je ne comprends pas.
    Il est calculé ce que le monsieur du script avec les sliders a écrit et que j'ai converti en Pascal (moins la gestion des couleurs impossibles) :

    1. transformation CIELCh° (les valeurs des curseurs ([0..100] 2 fois et [0..360]) en CIELa*b*
    2. transformation CIELa*b* en XYZ
    3. transformation XYZ en RGB
    4. ajout du clamping des valeurs RGB, et passage en valeurs [0..255] pour affichage dans l'ihm par un retour genre result := RGBtoColor(R,G,B);.

    Ce que j'avais appelé calcule_la_couleur_de_ce_point(hauteur, C, largeur); en pseudo-code.

    Mince, il me semblait que c'était clair, depuis le temps qu'on en parle !

    Allez,
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for hauteur := 0 to 100 do 
      for largeur := 0 to 360 do 
        TColor(couleur_du_pixel(hauteur, largeur)) := calcule_la_couleur_de_ce_point(hauteur, C, largeur);
    C'est mieux, là ?

    Dès qu'elle ("calcule_la_couleur_de_ce_point") est propre, tu l'auras, son code, t'inquiètes pas,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  10. #70
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    je reviens sur le petit exercice proposé par foetus : comparer 5+'3' et 5-'3'. C'était quoi, l'intérêt pédagogique de sa question ?
    L'idée, c'était que dès qu'on manipule des objets avec des types différents, il faut se méfier. Des objets avec des types différents, ça veut dire une formule où on additionne un entier avec une chaine (l'exemple 1), on soustrait un entier et une chaine ( l'exemple 2)... mais ça peut être aussi une formule où on additionne un entier et un réel.
    On arrive à pleins de '"techniques" niveau compilateur/ interpréteur :
    • Comment se débrouille-t-il avec différents types ? En C, C++ on ne peut pas faire des opérations entre un entier (flottant) et une chaîne de caractères (sauf si c'est un pointeur avec une surprise )
    • Quelles sont les conversions implicites mises en jeu ? Ici on voit que lors d'une addition, l'entier 5 est converti en chaîne de caractères.
    • Comment réagit-t-il lors d'une situation "particulière" ? JavaScript lui propose un résultat coûte que coûte. Je ne connais pas Python, mais que je pense qu'il te sort une erreur.


    Et plus spécifiquement :
    • JavaScript est incohérent : pourquoi lors d'une addition, il fait une conversion chaîne de caractères et lors d'une soustraction, il fait une conversion entier
    • Avec un langage non typé, on ne peut pas savoir ce qu'il y a dans une variable (à moins de blinder le truc). Surtout pour des données venant de n'importe d'où. Si tu additionnes 2 variables 'a + b'. b est un entier qui vient d'une base de données. Si tu changes ta base, et tu transformes cet entier en chaîne de caractères, en JavaScript cela marche [à peu près].
    • Qu'est ce que signifie des opérations mathématiques sur des chaînes de caractères ? Surtout que depuis 15 ans on est passé à l'Unicode et qu'il y a une notion de collation : "石室诗士施氏,嗜狮,誓食十狮" - "Le Poète" * "прочитав французский"

  11. #71
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Bonsoir,
    Citation Envoyé par Jipété Voir le message
    Ben..., le cercle chromatique basé sur LCh* c'est pas pour tout de suite... Je pensais m'en sortir avec un cercle HSV trouvé chez efg, mais ça va être beaucoup plus compliqué que prévu, on en reparlera.
    Ou pas.
    6 jours plus tard, partant toujours du cercle HSV d'efg, et après 2-3 retouches et le remplacement de sa fonction de colorisation par la mienne, ben j'ai les boules, je n'arrive pas à supprimer le point noir central :

    Nom : cercle_LCh.png
Affichages : 182
Taille : 27,1 Ko

    Dommage...

    Bon dimanche,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  12. #72
    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 Problème de matrices et de conversion d'espaces de couleurs
    Je suppose qu'il s'agit d'une palette à luminosité constante (1).

    L'agrandissement (x15) de la partie centrale de la toile du Maître Nom : Centre cercle chrom00.png
Affichages : 180
Taille : 395 octets donne à penser que la coloration des pixels a été soumise à la condition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF ((Abs(x - x<sub>c</sub>)> Seuil) AND (Abs(y - y<sub>c</sub>)>Seuil)) THEN ...
    Pourrais-tu donner la partie du code concernant l'angle polaire et le rayon (distance au centre (C)), relatifs à la position relative de chaque pixel ?

    (1) palette isophote: dit avec détachement, ça fait très bien dans une conversation

    PS: Je ne crois pas avoir cité ce lien vers un article présentant très bien le passage de l'espace CIE XYZ à l'espace CIE L*a*b*
    il n'y a pratiquement qu'à transposer les formules données dans le langage choisi. (voir #63)
    Il faut sérieusement que je remette mes archives à jour (et en ordre !), sur ce sujet.


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

  13. #73
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Hello

    Citation Envoyé par wiwaxia Voir le message
    L'agrandissement (x15) de la partie centrale de la toile du Maître...


    Citation Envoyé par wiwaxia Voir le message
    palette isophote: dit avec détachement, ça fait très bien dans une conversation
    Je note et j'essaierai de la placer, mais c'est pas tous les jours qu'on cause de ça,

    Citation Envoyé par wiwaxia Voir le message
    Pourrais-tu donner la partie du code concernant l'angle polaire et le rayon (distance au centre (C)) relatifs à la position relative de chaque pixel ?
    Tes désirs sont des ordres, mais avant, deux infos :
    1. problème solutionné, j'ai laissé les essais en commentaires pour la compréhension du truc ;
    2. la source vient de l'ami efg, et je vous invite à l'étudier (sauf qu'il est chiche en commentaires {in english}...)

    Juste la partie concernée :
    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
      Radius := size DIV 2; // size c'est un côté de l'objet carré TImage utilisé pour afficher le cercle
      RadiusSquared := Radius*Radius;
     
      V := ValueLevel; // passé par la proc. appelante
     
      RESULT.BeginUpdate(); // pour Lazarus
      FOR j := 0 TO RESULT.Height-1 DO   // balayage vertical de l'image destination
      BEGIN
        Y := Size - 1 - j - Radius;  {Center is Radius offset} // Y va de 99 à -100 avec image 200x200
        //row := pRGBQuad(RESULT.Scanline[Size - 1 - j]); // en Delphi
        row := pRGBQuad(RESULT.RawImage.GetLineStart(Size - 1 - j)); // si HSV
        rpw := pPointeurDeLigne(RESULT.RawImage.GetLineStart(Size - 1 - j)); // si LCh°
     
        FOR i := 0 TO RESULT.Width-1 DO // les pixels de la ligne
        BEGIN
          X := i - Radius;
          dSquared := X*X + Y*Y; // original
          dSquared := (X*X -1) + (Y*Y -1); // croix
          dSquared := (X*X +1) + (Y*Y +1); // 1 pixel seulement
          dSquared := X*X + Y*Y + 3; // OK, plus rien
          IF  dSquared <= RadiusSquared
          THEN BEGIN
    //        S := ROUND( (255 * SQRT(dSquared)) / Radius ); // si HSV
            S := ROUND( (100 * SQRT(dSquared)) / Radius ); // si LCh°
    //        H := ROUND( 180 * (1 + ArcTan2(X, Y) / PI)); // 0..360 degrees si HSV
            H := ROUND( 180 * (1 - ArcTan2(X, Y) / PI));   // si LCh° "-" pour tourner dans l'autre sens
            // Shift 90 degrees so H=0 (red) occurs along "X" axis
            //H := H + 90; // pour HSV
            H := H + 210; // pour LCh°
            IF   H > 360 THEN H := H - 360;
            //row[i] := HSVtoRGBQuad(H,S,V,255);  // OK si appel de la proc avec 60 230 255
     
            HSVtoRGB(H,S,V, R,G,B); // ajout pour LCh°
    //        row[i] := RGBtoRGBQuad(R,G,B,255); // test HSV, pour confirmer la conversion ligne précédente
            rpw^[i] := optLCH2ColorwithClamp(22,S,H, False, False, 15);//  // ajout pour LCh°, rendu sympathique
          END; // if dSquared
        END; // for i
      END; // for j
      RESULT.EndUpdate();

    EDIT2 : bug corrigé, une sordide histoire de fonctions avec presque le même nom et dont l'une attend des entiers ([0..360] et [0..255] 2 fois), quand l'autre espère des flottants ([0..1] 3 fois), vite trouvé, plus la nécessité de remplacer round par floor (bien caché, celui-là ! Cochonnerie... )
    il me reste un mystère, quand même ; avec le code d'origine
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            IF   H > 360 THEN H := H - 360;
            row[i] := HSVtoRGBQuad(H,S,V,255);  // OK si appel de la proc avec 60 230 255
            // HSVtoRGBQuad consiste à trafiquer H,S,V et à les envoyer dans RGBtoRGBQuad pour empaquetage pour affichage
    il affiche le cercle HSV comme la source d'efg, mais si je fais
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            IF   H > 360 THEN H := H - 360;
            HSVtoRGB(H,S,V, R,G,B);
            row[i] := RGBtoRGBQuad(R,G,B,255); // test --> dégradé de vert : pas glop !
    Mais c'est pas bien grave. (juste que ça fait désordre, )


    EDIT1 :
    D'autres toiles de maître du Maître
    Je vous invite à expérimenter à partir du "22" (ligne 35 du bout de code) ; à gauche avec 10, à droite avec 85 :

    Nom : boules_10_85_2.png
Affichages : 171
Taille : 13,0 Ko
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  14. #74
    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
    Chouette la référence !
    Et en plus, il y a du Pascal ou du moins quelque chose qui y ressemble fortement


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

  15. #75
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Bonjour,

    Fort satisfait de mon histoire de clamping et de mes dégradés à partir de LCh°, et ayant la volonté, comme Ariane remontant le long de son fil, de régler en marche arrière les problèmes qui m'ont amenés jusqu'ici, voilà-t-y pas que j'ai décidé d'appliquer le clamping à un vieux projet à base de L*a*b*, projet qui souffrait de sautes de couleurs assez phénoménales et décourageantes, solutionnées grâce au... clamping, hé oui !


    Sauf que...

    Sauf que je ne sais pas comment borner les curseurs a* et b* de mon ihm de tests :
    • J. Delmas dans son bouquin parle de -128 à +127 (p. 50) ;
    • Colormine va de -128 à +128, tout comme (le magnifique) colorizer.org ;
    • EasyRGB autorise de -200 à +200 ;
    • Wikipédia parle de -100 à +100 ou de -128 à +127 ;
    • mais aussi de -300 à +299 !

    Et moi, avec mes curseurs, qu'est-ce que je choisis ?

    Une idée, quelqu'un ?


    Ah tiens, pour ne pas perdre cette info, je vous la partage, c'est une tuerie : https://digital-photography-school.c...o-your-images/
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  16. #76
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    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 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    pour les 256 couleurs c'est bien -127+128 car le 0 est une couleur a prendre en compte
    tu peut faire -127+127 avec 0- et 0+
    plus sérieusement ce n'est pas une couleur mais un pas d'increment d'une couleur vers une autres

    ensuite le choix depend de la definition de ta palette de couleur

    ce que dit wikipedia
    Les composantes a* et b* sont le plus souvent notées par une valeur de +127 à −128 comportant ainsi 256 niveaux permettant d'être codé en 8 bits en base hexadécimal pour être corrélé avec l'espace RVB informatique
    (ou +10899 / −12451 en 16 bits).
    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

  17. #77
    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 Problème de matrices et de conversion d'espaces de couleurs
    Citation Envoyé par Jipété Voir le message
    ... j'ai décidé d'appliquer le clamping à un vieux projet à base de L*a*b*, projet qui souffrait de sautes de couleurs assez phénoménales et décourageantes, solutionnées grâce au... clamping ...
    Ces surprises proviennent habituellement de la sortie accidentelle de l'intervalle [0..255]; elles disparaissent alors dès l'intervention de la procédure de bornage.

    Les autres domaines proposés sont vraisemblablement liés à un changement de paramètre par transformation affine.
    On passe ainsi du paramètre (i), appartenant au domaine [Min ; Max], à l'indice habituel (j) situé dans [0..255] par la relation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    j:= Round(255*(i - Min) / (Max - Min));
    ou encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    j:= Trunc(256*(i - Min) / (Max - Min));
    IF (j=256) THEN Dec(j);
    Il arrive parfois que des dépassements soient possibles, sans qu'ils aient des effets détectables ou nuisibles: le logiciel gère alors les anomalies (ou ce que l'on juge comme tel) sans qu'on dispose d'informations satisfaisantes dans le manuel.
    C'est ce que j'avais observé avec POV Ray.


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

  18. #78
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Merci pour les précisions, les copains

    En ce qui me concerne, je vais donc me cantonner à [-128..+127], quitte à passer au niveau supérieur si un jour il me prenait la folie de tout convertir en 16 bits (paraît que c'est mieux).

    Dans l'attente, voilà ce que j'ai trouvé dans la déclaration des variables, au début du code concernant les curseurs en mode web (celui des couleurs impossibles) :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MAXLIGHT = 101;  // 101 needed for bright colors (maybe due to rounding errors)
    MAXVALIDCHROMA = 144;   // maximum valid chroma value found convertible to rgb (blue)
    Quand je pense que Wikipedia et les autres les mettent à 100 au max...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  19. #79
    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 Problème de matrices et de conversion d'espaces de couleurs
    Citation Envoyé par Jipété Voir le message
    ... pour ne pas perdre cette info, je vous la partage, c'est une tuerie : https://digital-photography-school.c...o-your-images/
    Le document est tout à fait explicite: Nom : Graphiques.png
Affichages : 515
Taille : 105,8 Ko
    il intervient une procédure (ou fonction) de ré-haussement des couleurs à l'aide d'une relation linéaire par morceaux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    PROCEDURE RehCoul(k, m: Extended; var j: Byte);
      VAR x, y, z: Extended;
      BEGIN
        x:= 1.0 * j;         y:= x - m;               z:= k * y;          // k > 1    
        IF (z<0) THEN z:= 0; IF (z>255) THEN z:= 255; j:= Round(z)
      END;
    qui utilise l'algorithme de la merveilleuse procédure Nom : Clamp_French Script.png
Affichages : 170
Taille : 1,2 Ko , et étale légèrement l'histogramme des couleurs dans sa partie centrale.

    Tu peux éventuellement regarder ce que donne la modulation de la pente (k) sur la branche inclinée, et de l'abscisse (m) du premier point de raccordement - données introduites ici en paramètres.
    Il faut simplement que soit vérifiée la condition: k * (255 - m) > 255 .


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

  20. #80
    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 Problème de matrices et de conversion d'espaces de couleurs
    Citation Envoyé par Jipété Voir le message
    ... Dans l'attente, voilà ce que j'ai trouvé dans la déclaration des variables, au début du code concernant les curseurs en mode web (celui des couleurs impossibles) :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MAXLIGHT = 101;  // 101 needed for bright colors (maybe due to rounding errors)
    MAXVALIDCHROMA = 144;   // maximum valid chroma value found convertible to rgb (blue)
    Quand je pense que Wikipedia et les autres les mettent à 100 au max ...
    Ce sont des instructions d'appoint permettant d'éviter le plantage du programme, lors de débordements d'intervalles découlant d'erreurs d'arrondi.

    J'ai connu une mésaventure semblable lors du calcul d'un sinus à partir d'un cosinus, mathématiquement irréprochable, et du niveau collège :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    c:= l / d; C2:= Sqr(c); 
    IF (C2>1) THEN C2:= 1;
    s:= Sqrt(1 - C2);


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

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

Discussions similaires

  1. [Image] [JAI] conversion d'espaces de couleur
    Par Patriarch24 dans le forum Graphisme
    Réponses: 2
    Dernier message: 25/08/2010, 17h01
  2. Conversion d'espace dans chaine
    Par Shifty_ dans le forum C#
    Réponses: 8
    Dernier message: 06/03/2007, 14h22
  3. problème de matrice
    Par micfont999 dans le forum C++
    Réponses: 9
    Dernier message: 07/01/2007, 15h19
  4. Réponses: 3
    Dernier message: 28/12/2006, 15h06
  5. Problème de chemin de fichier avec des espaces
    Par Akronyme dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 11/12/2006, 17h12

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