Je me pose une question concernant les espaces colorimétriques différenciés (YCbCr et Cie…).
Dans une grande majorité de cas, nous confondons entre eux ces systèmes, où l’on prend le YUV pour du YCbCr ou du YPbPr, quand ce n’est pas du YIQ ou du YDbDr.
Au final, quelles sont les différences entre ces systèmes, et si oui, de quelle nature sont-elles
durant l’été dernier j’ai eu à faire avec ces histoires d’espace couleur YUV pour ajouter une émulation pal/secam à cryptimage, le résumé de marceljack est bon,
tu as juste à retenir la signification des 3 lettres ( composantes couleurs U et V appelées chroma, et Y l’information liée à la luminance ) et qu’il y a des coefficients derrière pour pondérer le tout,
et que c’est un subterfuge inventé du temps de la TV analogique pour faciliter la transmission hertzienne et permettre la compatibilité avec les TV noir et blanc ( qui n’auront qu’à utiliser l’information de luminance Y ), le concept a ensuite été repris pour la compression vidéo numérique ( ainsi que la compression photo numérique type jpeg ),
pour les coefficients il y a 2 normes de matrices en vidéo numérique : bt601 ( vidéos simple définition ) et bt709 ( vidéo haute définition ) :
UV ou D’b D’r, c’est la même chose à un coefficient près.
Pour I Q c’est différent car les signaux I (In phase) et Q (Quadrature) sont deux combinaisons linéaires de R-Y et B-Y qui ont été choisies de façon à ce que l’une des deux (Q) demande moins de bande passante que l’autre (de mémoire 600 kHz pour Q contre 1,3 MHz pour I).
On voit d’ailleurs sur ton image qu’il y a très peu d’information dans le signal Q.
Il faut voir qu’à l’époque où le NTSC a été défini (1952 !) les Américains avaient fait beaucoup de recherches sur la perception des couleurs pour réduire le plus possible la bande passante nécessaire aux signaux de chroma.
si tu connais les valeurs RVB de chaque pixel de ton image alors il est facile d’obtenir les 3 valeurs Y’ ( la luminance ), Db ( différence pondérée entre la valeur du bleu et la luminance ) et Dr ( différence pondérée entre la valeur du rouge et la luminance ), qui s’obtiennent via ces équations :
Y’ = 0.299 R + 0.587 G + 0.114 B
Db = + 1.505 (B - Y’)
= - 0.450 R - 0.883 G + 1.333 B
Dr = - 1.902 (R - Y’)
= - 1.333 R + 1.116 G + 0.217 B
dans ton script tu parcours chaque pixel de ton image pour récupérer la valeur R, G et B et tu appliques la transformation via ces équations,
en python il est facile de modifier les pixels d’une image, en important le module pillow de python, on parcourt les pixels de l’image via une boucle for, on fait les modifs et on sauvegarde l’image sous un nom différent, il doit alors être possible de créer 3 images representant respectivement la couche Y’, Db et Dr si c’est ça que tu veux faire
Sur tous les TV à circuits intégrés relativement récents (à partir du début des années 80), l’effacement est assuré par une impulsion à 3 niveaux dite « sandcastle ».
-niveau bas (environ 2,5V): effacement trame
-niveau moyen (environ 4,5V): effacement ligne
-niveau haut (7,5 à 12V): clamp luma et sélection de salve chroma
il suffisait juste de changer les coefficients de la matrice de conversion dans le code source, et de remplacer les messages textes « yuv » par « ydbdr »
j’ai une version linux du plugin, il ne me reste plus qu’à compiler les version pour windows ( 32 et 64 bits ),
le plugin s’installe ensuite dans le dossier plugin de gimp,
après installation on accède au plugin dans le menu « image → mode → ‹ rgb to ydbdr › et ‹ ydbdr to rgb › »,
le plugin mettra alors l’info « y » dans le canal rouge, Db dans le canal bleu et Dr et dans le canal vert, avec le menu « couleurs → composant → décomposer (RVB ) » et en décochant « décomposer en calque » on obtiendra 3 images en niveau de gris, chaque image représentant respectivement l’info y, Db et Dr
pour l’instant j’ai compilé la version 32 bits du plugin pour gimp 32 bits,
il me reste à compiler la version 64 bits, ça sera sans doute prêt pour dimanche ou lundi,
c’est un peu complexe car je fais une cross-compilation sous linux, avec mingw-w64, ça permet de créer des binaires windows depuis linux, mais ça oblige à compiler pas mal de dépendances pour gimp, ça prend du temps,
il y aura en fait 2 plugins :
un qui fait la conversion rvb vers yuv et yuv vers rvb
un autre qui fait la conversion rvb vers yDbDr et yDbDr vers rvb
ça ajoute ces 4 possibilités dans le menu image->mode :