Régression complexe

Bonjour,
je mets à jour ma question https://www.maths-forum.com/superieur/moindres-carres-sur-une-equation-matricielle-t216825-40.html
avec le fichier suivant : http://sylvain-ard.fr/temp/questions%20Lab.pdf.
Merci de m'aider
Bien cordialement.

PS : il y a une panne sur maths forum quand on poste un message ça plante le site entier, après ils le remettent en marche après quelques heures, mais dès qu'on poste un message ça recommence, impossible de les contacter car il n'y a que le forum

Réponses

  • Bonjour,

    On est d'accord que ta question d'origine a trouvé sa réponse ? ($M = (B^TB)^{-1}B^T A$ avec la convention $A, B \in \mathbb{R}^{n\times 3}$)

    Ensuite, ton document est dur à suivre. Notations surchargées, variables renommées... Resserre un peu les boulons pour nous aider à t'aider ;-)

    Quelques suggestions.
    (1) Supprime ou regroupe tout ce qui est redondant ou inutile. Dans le cas présent, tu peux faire usage de notations vectorisées, qui sont d'ailleurs plus proches du code que tu risques d’implémenter*.
    (2) Présente sans ambiguïté la dimension de chaque variable. Assure-toi que les équations sont cohérentes en terme de dimension**.
    (3) Écrit les équations de façon chronologique. Pour un problème de régression, vu de loin on a $output = f(input)$, et tu peux dérouler pour nous la succession d’opérations appliquées aux entrées afin d'obtenir les sorties.
    (4) Si ce n'est pas trop obscur ni pénible, un mot d'explication quant au contexte permet souvent d'avoir des réponses plus pertinentes.

    Merci.

    En l’état des choses, c'est dur de voir de la "structure" dans tes équations, qui pourrait suggérer des méthodes dédiées plus efficaces. S'il n'y a pas suffisamment de structure, tu te retrouves avec un problème d'optimisation non-linéaire, presque partout différentiable, plus ou moins bien posé, et comme tu as l'air de déjà faire du python j'ai envie de dire :

    tl;dr: tourne-toi vers pytorch. C'est une bibliothèque d'auto-différentiation*** et d'optimisation, avec une interface python (et le tout tournant sur GPU si tu le souhaites), qui s'inscrit dans le paradigme moderne d'apprentissage machine. Au vu du degré de généralité, c'est efficace et accessible. En plus ils proposent de très bons tutoriels.


    ---
    * E.g., les fonctions $x_r\mapsto f_x$, $y_r\mapsto f_y$, $z_r\mapsto f_z$ sont définies de la même façon, tu peux vectoriser pour gagner en compacité, et on comprend que la "non-linéarite" s'applique composante par composante.
    ** E.g., un vecteur $v$ à $k$ dimensions: $v \in \mathbb{R}^k$, une matrice $M$ de taille $l\times k$: $M \in \mathbb{R}^{l\times k}$. De plus si $w\in\mathbb{R}^l$, l'expression $w=Mv$ a du sens, mais pas l'expression $v=Mw$.
    *** L'auto-différentiation, c'est la fonctionnalité de différentiation automatique, sans avoir à implémenter de dérivées soi-même, via des graphs computationnels et la règle de la chaîne (anglicismes :-P). Utilisé conjointement à des algos de descente de gradient généralisé, tu as là une approche générale d'optimisation non-linéaire. Ou de quoi faire de la dynamique hamiltonienne en deux lignes si t'as pas besoin d'une précision folle :-D
  • Bonjour,

    Je ne comprends pas en quoi consiste le problème même, en tenant un peu compte,, de ton avant-dernière question il y a plus d'une semaine.

    Cordialement.

    Ajout : je n'avais pas vu le contenu du fichier mais je ne suis toujours pas plus avancé. De plus, le lien donné ne correspond à rien. Je ne suis pas talmudiste donc je laisse ce problème à d'autres.
  • Bonjour à tous,
    en fait le problème posé consiste à transformer des couleurs RGB en Lab. RGB est un espace couleur dépendant du matériel et Lab est un espace couleur "objectif". Les inconnues du problème sont les variables permettant de passer d'une espace à l'autre. Pour trouver ces inconnues on scanne une mire où les patchs de couleur ont des couleurs Lab connues, on trouve donc des couleurs RGB qui sont des connues aussi et on peut donc théoriquement calculer les inconnues.
    Ces passages et leurs équations ont été trouvés sur le site de référence : http://www.brucelindbloom.com/
    Je suis bien incapable de réécrire ces équations étant nul en maths.
    Je sais que mon problème n'est pas simple. Si personne ne trouve de solution tant pis.
    Merci quand même
  • La recherche "rgb to lab" dans mon moteur de recherche retourne 33 100 000 résultats.

    La recherche "rgb2lab <computer language>" renvoie un (et souvent de multiples) lien(s), en première page voire en premier lien, vers une routine pré-implémentée dans une bibliothèque écrite dans le langage <computer language>.

    La page wikipedia L*a*b* CIE 1976 fournit les transformations en forme fermée pour passer de CIELAB à CIE XYZ et réciproquement. Un clic de souris plus tard, la page CIE XYZ fournit les transformations en forme fermée pour passer de CIE XYZ à CIE RGB et réciproquement...


    Est-ce que tu travailles sur un projet qui vise à redéfinir une partie de ces conversions, ou bien est-ce que tu cherches à nous refiler une roue connectée, carrée, qui dit "bonjour papi" grâce à de l'IA quand je vérifie la pression ? :-)
  • ce n'est pas une conversion de RGB vers Lab que je cherche, ça je sais déjà faire, mais la détermination des coordonnées des primaires et du blanc de référence connaissant les coordonnées RGB et Lab
  • en plus les équations de conversion qu'on trouve sur le net sont pour la plupart fausses, seules celles du site de Bruce Lindbloom font référence selon un professeur de mon université spécialiste de la couleur
  • Ok, mea culpa :-D, excuse-moi.

    En regardant de plus près le lien partagé – il me reste une question, quand tu dis blanc de référence. Si je comprends bien*, il y a le blanc de référence CIE et le blanc de référence du modèle RGB, lesquels ne sont pas forcement les mêmes – auquel cas il y a une procédure d'adaptation chromatique. Que peut-on supposer connu ? La matrice d'adaptation ? L'un des deux blancs de référence ? Rien ?

    Pour te donner une idée, si tu avais $N$ couples $(RGB_i, XYZ_i)$ au lieu de $(RGB_i, LAB_i)$, tu pourrais obtenir les coordonnées chromatiques $(x_r, y_r)$, $(x_g, y_g)$, $(x_b, y_b)$ du système RGB et le blanc de référence $X_W,Y_W,Z_W$ (cf. notations) avec quelques lignes de code. Mais la transformation LAB vers XYZ introduit un autre blanc de référence (ici) et le lien entre ces notations n'est pas très clair pour quelqu'un qui n'y connaît pas grand chose.

    * Calc $\rightarrow$ CIE calculator $\rightarrow$ Learn More, paragraphe sur le menu pop-up d'adaptation
  • Bonjour,
    Il ne faut pas regarder dans CIE calculator mais dans Math. D'autre part il n'y a qu'un blanc de référence. En fait je vais tenter de m'expliquer. Le RGB est dépendant du matériel, le CieLab non. On scanne une mire dont les carrés de couleur appelés patchs ont des couleurs CieLab connues. On obtient après le scan les couleurs RGB des patchs. On déduit ensuite de ces deux connues les inconnues que sont les coordonnées des primaires et du blanc de référence. Ensuite on rescanne quelquechose on obtient donc des couleurs RGB. D'après les coordonnées des primaires et du blanc de référence on peut alors faire la conversion de RGB vers CieLab et obtenir la couleur CieLab de notre échantillon (le but recherché). Toute la difficulté consiste en remontant des équations de conversion à trouver ces inconnues connaissant les couleurs CieLab et RGB des patchs de la mire. Qui sont plusieurs, or on a quatre inconnues d'où la régression. J'y était arrivé de RGB vers XYZ mais en fait je vais devoir le faire de RGB vers CieLab ce qui est beaucoup plus compliqué.
    Merci
    En espérant que ce soit plus clair désormais
  • Je comprends l’idée, je me permets tout de même de maintenir une certaine réserve quant au fait que le problème d'adaptation chromatique soit court-circuité dans ton interprétation. Tu l'as dit, l'auteur de la page semble savoir ce qu'il fait et il y a tout un passage à ce sujet, avec des avertissements sur plusieurs pages. Je doute que ce soit sans importance. Enfin bon, je m'en tiens à ton document en PJ pour discuter des conversions XYZ $\rightarrow$ RGB, et Lab $\rightarrow$ RGB. J’écris ici explicitement ton hypothèse : $X_r, Y_r, B_r$ sur cette page sont identiques aux quantités qui partagent leurs notations sur cette page.

    Dans mes notations $\mathbf{XYZ},\mathbf{RGB},\mathbf{LAB}\in\mathbb{R}^{N\times 3}$ sont des matrices, $N$ le nombre d’échantillons ($3$ pour les trois composantes). ${}^T$ designe la transposée, ${}^{-1}$ l'inverse.


    XYZ $\rightarrow$ RGB.

    (1) $M = (\mathbf{XYZ}) (\mathbf{RGB})^T (\mathbf{RGB}\, \mathbf{RGB}^T)^{-1}$, estimateur par moindres carrés qui fera très bien l'affaire.
    (2) $Y_r=Y_g=Y_b=1$, donné tel quel lignes (4), (7) et (10).
    (3) On en déduit $S_r$, $S_g$, $S_b$ qui peuvent être lus sur la deuxième ligne de $M$. $(S_r\, S_g\, S_b) = M_2$.
    (4) Puis $(X_r,X_g,X_b)$ lus sur $M_1$ et $(Z_r,Z_b,Z_g)$ lus sur $M_3$, après mise a l’échelle en divisant par $(S_r,S_g,S_b)$. Explicitement, $(X_r,X_g,X_b) = M_1 / (S_r,S_g,S_b)$ et $(Z_r,Z_g,Z_b) = M_3 / (S_r,S_g,S_b)$, ou $/$ est une division composante par composante ("element-wise").
    (5) On constate grâce à (3) et (5) que $Z_r = 1/y_r - X_r - 1$ donc $y_r=1/(Z_r+X_r+1)$. $x_r=X_r\cdot y_r$ suit. Pareil pour $g$ et $b$.
    (6) $\begin{pmatrix}X_W \\ Y_W \\ Z_W\end{pmatrix} =
    \begin{pmatrix}X_r & X_g & X_b \\ Y_r & Y_g & Y_b \\ Z_r & Z_g & Z_b\end{pmatrix} \begin{pmatrix}S_r \\ S_g \\ S_b\end{pmatrix}$ grâce à (12).

    Bref, on a pour ainsi dire pas besoin de faire de stats, c'est tout en forme close sauf $(1)$.

    LAB $\rightarrow$ RGB sous l’hypothèse faite dans ton document en PJ.

    (1) Notons $\mathbf{xyz}\in \mathbb{R}^{N\times 3}$ la matrice des $(x_r,y_r,z_r)$ obtenue à partir de $\mathbf{LAB}$ en forme close grâce aux équations (4) à (11).
    (2) $\mathbf{xyz} = \mathbf{XYZ} / (X_r, Y_r, Z_r)$ ou $/$ est element-wise, avec convention de broadcasting, row-first. En maths, $\mathbf{xyz}^T = \text{diag}(X_r, Y_r, Z_r)^{-1} \mathbf{XYZ}^T$ avec $\text{diag}(a,b,c)=\begin{pmatrix} a & 0 & 0 \\ 0 & b & 0 \\ 0 & 0 & c\end{pmatrix}$.

    (2') Donc $\mathbf{xyz}^T = \text{diag}(X_r, Y_r, Z_r)^{-1} M \, \mathbf{RGB}^T$. [C'est la qu'intervient ton hypothèse.]
    (3) On peut donc déterminer par moindres carrés $\text{diag}(X_r, Y_r, Z_r)^{-1} M$, connaissant $\mathbf{RGB}$ et $\mathbf{xyz}$.
    (4) $\text{diag}(X_r, Y_r, Z_r)^{-1} M = \begin{pmatrix}S_r & S_gX_g/X_r & S_bX_b/X_r \\ S_r & S_gY_g/Y_r & S_gY_b/Y_r \\ S_r & S_gZ_g/Z_r& S_gZ_b/Z_r\end{pmatrix} = \begin{pmatrix}S_r & S_gX_g/X_r & S_bX_b/X_r \\ S_r & S_g & S_b \\ S_r & S_gZ_g/Z_r& S_bZ_b/Z_r\end{pmatrix}$, première égalité grâce à (2), seconde grâce à (4), (7), (10).


    Et là, c'est le drame ;-). Comme tu le vois, on peut déterminer $S_r,S_g, S_b$ sur la deuxième ligne. Mais on perd $2$ équations par redondance sur la première colonne. Cela suppose en outre que miraculeusement, les coefficients de la première colonne soient tous trois égaux à erreur numérique près. Je suis dubitatif. Passons.

    On a $4$ équations restantes qui permettent de déterminer $X_g/X_r$, $X_b/X_r$, $Z_g/Z_r$ et $Z_b/Z_r$. Plus $6$ équations supplémentaires grâce à (3), (5), (6), (8), (9), (11). Soit $10$ équations pour $12$ degrés de liberté $(x_r,y_r)$, $(x_g,y_g)$, $(x_b, y_b)$ et la même chose avec lettres capitales. Ce n'est pas inversible (ça l'aurait été sans la perte de $2$ équations indépendantes). Théoriquement, c'est là que finit le calcul et que commencent les stats, en faisant des hypothèses supplémentaires. Dans le cas présent, je suis à peu près convaincu que les transformations entre principaux domaines de couleur sont inversibles, et donc qu'il y a eu erreur de formalisation. Je constate dans tes équations en PJ, outre mon commentaire sur $X_r, Y_r, Z_r$, que tu fais aussi l'amalgame entre $(x_r,y_r)$, etc. définis ici et . Hors ça n'a pas de sens selon moi puisque d'un côté on a $6$ valeurs, de l'autre une matrice de $N\times 3$ valeurs.

    J’espère que ça apporte de l'eau à ton moulin.

    Cordialement.
  • Bonsoir,
    je vais en parler à mon prof pour tenter d'éclaircir, merci de te pencher sur le problème.
    Cordialement
  • Ah oui en fait Bruce Lindbloom appelle X_W Y_W Z_W le blanc de référence dans le RGB vers XYZ et l'appelle X_r Y_r Z_r dans le XYZ vers Lab, de plus il recrée des variables x_r, y_r, z_r dans le XYZ vers Lab qui sont différentes de celles du même nom dans le RGB vers XYZ, j'ai refait le PDF en conséquence, tu peux le télécharger ici :
    http://sylvain-ard.fr/temp/questions%20Lab2.pdf
    dis-moi s'il y a encore des incohérences ou si ça va
    merci beaucoup de ton aide
    bonne journée
  • je précise que pour avoir le calcul de RGB vers XYZ dans le site de BL il faut aller dans Math/RGB to XYZ/The transformation matrix [M] is calculated from the RGB reference primaries as discussed here. (cliquer sur here)
  • Hello,

    Dans ce cas tu te retrouves avec $\mathbf{xyz}^T = \text{diag}(X_W, Y_W, Z_W)^{-1} M \, \mathbf{RGB}^T = M' \, \mathbf{RGB}^T$, avec $M_{ij}' = M_{ij}/s_i$ et $s_i=\sum_{j=1,2,3} M_{ij}$. Par exemple $s_1=X_rS_r + X_g S_g + X_b S_b$.

    $s_i$ normalise la $i$-ème ligne de sorte qu'elle somme à $1$.

    Résultat aisément testable : je regarde les matrices $M$ pré-calculées sur cette page, toujours la mêêmeeuh (en-dessous des équations). Pour la plupart elles ne satisfont pas cette propriété (sauf une : working space : CIE RGB - reference white : E).

    Donc ce n'est pas si simple à mon humble avis et il faut bel et bien se pencher de plus près sur l'adaptation chromatique sus-mentionnée.

    Bon aprem.
  • "Donc ce n'est pas si simple à mon humble avis et il faut bel et bien se pencher de plus près sur l'adaptation chromatique sus-mentionnée. " quelle adaptation chromatique ? je ne vois pas ?
    " toujours la mêêmeeuh (en-dessous des équations)" >> la même que quoi ?
    "Résultat aisément testable : je regarde les matrices M pré-calculées sur cette page, toujours la mêêmeeuh (en-dessous des équations)." il ne faut pas regarder ces matrices, c'est pour des calculs simplifiés qui ne nous intéressent pas ici

    merci encore
  • Ok, calcule la matrice $M'$ par la méthode des moindres carrés en te référant à mes messages précédents. Vérifie si les lignes somment à $1$ à $10^{-5}$ près.
  • j'en suis bien incapable ^^ mais on avait réussi avec maths forum à le faire pour de RGB vers XYZ et ça marchait donc il n'y a pas de problème !
Connectez-vous ou Inscrivez-vous pour répondre.