Palette thomson 4096 Couleurs

Cette catégorie traite de développements récents pour nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
z80¯\_(ツ)_/¯
Messages : 77
Inscription : 06 oct. 2020 13:15
Localisation : Bourgogne

Palette thomson 4096 Couleurs

Message par z80¯\_(ツ)_/¯ »

Bonjour,
Je souhaite convertir une palette linéaire 4096c (16 teintes par composante) en palette Thomson (instruction PALETTE du basic 512).
Je pensais que c'était tout simple, mais non.

Apparemment, la valeur passée à l'instruction PALETTE est codée de cette manière sur 2 octets : bbbbvvvvrrrrr.
Je me suis dit qu'il suffisait donc de calculer la valeur de PALETTE codée de cette façon en prenant les valeurs SDL mais dans ce cas les couleurs sont trop claires.

J'ai testé différents trucs avec ce que j'ai pu trouver sur les forums mais je n'obtiens jamais les teintes exactes.
Le mieux que j'ai obtenu, c'est en utilisant une table de correction:
int ef_vals[] = {0,100,127,142,163,179,191,203,215,223,231,239,243,247,251,255};
Ce qui me donne par exemple (rvb linéaire -> rvb thomson -> index palette thomson) :

Code : Tout sélectionner

0 1 1 -> 0 0 0  -> PALETTE 0,0
8 4 3 -> 2 1 0  -> PALETTE 1,18
5 2 1 -> 1 0 0  -> PALETTE 2,1
11 7 4 -> 5 1 1  -> PALETTE 3,277
2 2 2 -> 0 0 0  -> PALETTE 4,0
9 7 5 -> 3 1 1  -> PALETTE 5,275
6 5 3 -> 1 1 0  -> PALETTE 6,17
12 8 5 -> 6 2 1  -> PALETTE 7,294
2 1 0 -> 0 0 0  -> PALETTE 8,0
8 6 4 -> 2 1 1  -> PALETTE 9,274
5 5 4 -> 1 1 1  -> PALETTE 10,273
12 7 4 -> 6 1 1  -> PALETTE 11,278
3 4 3 -> 0 1 0  -> PALETTE 12,16
10 6 3 -> 4 1 0  -> PALETTE 13,20
7 5 3 -> 1 1 0  -> PALETTE 14,17
14 11 5 -> 9 5 1  -> PALETTE 15,345
Et voici une image affichée par SDL (16 couleurs sur 4096) :
Image


Et la même image sur DCMOTO en utilisant la conversion de palette précédente :
Image

Je me demande s'il est possible d'obtenir exactement les même teintes qu'avec la SDL.
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Palette thomson 4096 Couleurs

Message par Daniel »

Voici la courbe de gamma a utiliser :

Code : Tout sélectionner

 int gamma4096[16]={0,38,48,56,62,67,72,76,80,83,86,89,92,95,98,100};
Dans dcmoto, cette courbe peut être légèrement modifiée en fonction de la correction gamma choisie dans les options.


Calcul des 4096 couleurs 24 bits du PC en fonction du numéro de couleur Thomson :

Code : Tout sélectionner

 i = 16;
 for(r = 0; r < 16; r++) for(g = 0; g < 16; g++) for(b = 0; b < 16; b++)
 {
  int x1, x2, x3;
  x1 = gamma4096[r] * 255 / gamma4096[15]; //rouge
  x2 = gamma4096[g] * 255 / gamma4096[15]; //vert
  x3 = gamma4096[b] * 255 / gamma4096[15]; //bleu
  color[i++] = (x1 << 16) + (x2 << 8) + x3;
 }

Ton problème est l'inverse : convertir une couleur PC en couleur Thomson.
Il faudra faire de grosses approximations, car les 4096 teintes définies sur PC n'ont pas de correspondance exacte dans la palette Thomson.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
Silou78
Messages : 382
Inscription : 11 févr. 2017 14:54
Localisation : Yvelines (78)

Re: Palette thomson 4096 Couleurs

Message par Silou78 »

z80¯\_(ツ)_/¯ a écrit : 01 mai 2021 13:27 Apparemment, la valeur passée à l'instruction PALETTE est codée de cette manière sur 2 octets : bbbbvvvvrrrrr.
Bonjour,
Si tu t'es basé sur cette organisation RVB, j'ai bien peur que le problème ne vienne de là : 4 bits pour le bleu, 4bits pour le vert, 5bits pour le rouge => il me semble qu'il y en a 1 de trop pour le rouge (4096 couleurs => 12bits et non-pas 13).
D'où le décalage vers le vert de l'image obtenue.
Sylvain
Avatar de l’utilisateur
z80¯\_(ツ)_/¯
Messages : 77
Inscription : 06 oct. 2020 13:15
Localisation : Bourgogne

Re: Palette thomson 4096 Couleurs

Message par z80¯\_(ツ)_/¯ »

Merci pour vos réponses.
Je vais faire des tests.

En ce qui concerne le codage de la couleur, il fallait bien lire bbbbvvvvrrrr et non pas bbbbvvvvrrrrr.
Dans mon élan, j'ai tapé une lettre de trop.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Palette thomson 4096 Couleurs

Message par __sam__ »

Le problème est le gamma à 3 de la palette thomson. Les teintes sombres d'une palette PC n'ont pas de correspondance. Il faut passer par une algorithme dédié pour approximer au mieux les basses intensités. Il y a de tels algorithmes dans mon outil.

A partir de cette image:
blake-and-mortimer-tome-27-le-cri-du-moloch-tea-9782505110774_0.jpg
blake-and-mortimer-tome-27-le-cri-du-moloch-tea-9782505110774_0.jpg (139.44 Kio) Consulté 3940 fois
J'obtiens
Avec ostro_to9.lua (Palette thomson optimisée)
Avec ostro_to9.lua (Palette thomson optimisée)
ostro_to9.gif (14.82 Kio) Consulté 3940 fois
et
Avec ostro_to9db16.lua (Palette dawbringer qui semble être celle retenue par SDL)
Avec ostro_to9db16.lua (Palette dawbringer qui semble être celle retenue par SDL)
ostro_to9db16.gif (12.4 Kio) Consulté 3940 fois
(d'autres possibilités existent: il faut jouer avec l'outil)
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
z80¯\_(ツ)_/¯
Messages : 77
Inscription : 06 oct. 2020 13:15
Localisation : Bourgogne

Re: Palette thomson 4096 Couleurs

Message par z80¯\_(ツ)_/¯ »

Je vais regarder un peu les algos. Les résultats de l'outil sont impressionnants.
En attendant, en ajustant le gamma à -30% par rapport à la palette PC, j'obtiens:

Image

Je pense qu'il y a aussi un problème de calcul de palette au départ. J'ai bricolé un median cut (https://en.wikipedia.org/wiki/Median_cut). Mais j'ai l'impression qu'il ne me choisi pas la meilleure palette possible.
Donc en gros j'obtiens 16 couleurs linéaires pas top sur lesquelles je fais un dithering, et ensuite s'ajoute les problèmes de la conversion en palette thomson.
Donc au final j'obtiens des couleurs un peu exotiques.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Palette thomson 4096 Couleurs

Message par __sam__ »

Si tu as ton original (parce le miens me semble trop sombre) je peux mettre ici le fichier MAP avec sa palette. Tu pourras ainsi voir la palette retenue par mon outil (c'est un algo assez sophistiqué à base d'oct-tree où l'on regroupe les "noeuds" qui ont le moins de variance entre eux. L'enveloppe convexe est aussi utilisée pour booster certaines couleurs très utiles à la reconstitution des couleurs par tramage.)

J'ai aussi un autre d'algo (pas encore public sur mon github) pour le mode BM4 (3 couleurs + noir) qui marche pas mal non plus.
bm4.gif
bm4.gif (6.72 Kio) Consulté 3902 fois
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
z80¯\_(ツ)_/¯
Messages : 77
Inscription : 06 oct. 2020 13:15
Localisation : Bourgogne

Re: Palette thomson 4096 Couleurs

Message par z80¯\_(ツ)_/¯ »

L'original. Pas trop éloigné du tiens j'ai l'impression.

Image

Et ce que j'obtiens en mode PC (16 couleurs [clash] 320x200) avant conversion thomson:

Image
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Palette thomson 4096 Couleurs

Message par __sam__ »

C'est marrant on perds complètement la teinte rouge, remplacée par du marron sur le gars au 1er plan. C'est là où les couleurs de l'enveloppe convexe du nuage de points de l'image prends son importance.

Sinon oui entre ton image et la mienne il n'y a que le cadrage qui change et mon algo prends la même couleur pour les deux images.
cmp.gif
cmp.gif (29.52 Kio) Consulté 3892 fois
Je vois que tu utilises un tramage ordonné. J'ai un algo pour ca. Il n'est pas encore finalisé ni public. Je l'ai juste un peu mis en oeuvre sur Oric >>exemple<<. Ca me donne envie de pousser mes expériences thomson en tramées un peu plus loin (mais le color-clash casse la régularité du tramage et ne donne pas un joli résultat je le crains.. m'enfin il faut essayer pour être sur.)
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
z80¯\_(ツ)_/¯
Messages : 77
Inscription : 06 oct. 2020 13:15
Localisation : Bourgogne

Re: Palette thomson 4096 Couleurs

Message par z80¯\_(ツ)_/¯ »

Juste quelques précisions:

L'image du premier post est un dithering ordonné et l'image de mon post précédent du Floyd Steinberg.
Les deux images (celles qui ne sont pas affichées dans DCMOTO et donc affichées sur PC dans une fenêtre SDL https://fr.wikipedia.org/wiki/Simple_DirectMedia_Layer) sont le résultat du dithering 16 couleurs sur 4096 avec une optimisation pour n'avoir que 2 couleurs par bloc de 8 pixels.

Je peux aussi la calculer sans dithering en 320x200 16 couleurs avec contrainte 2 couleurs par bloc de 8:

Image

C'est en lisant "Passez facilement du Basic au langage machine des TO7 TO7-70 TO9 MO5" au chapitre sur la RAM-Ecran, j'ai vu ceci:

Image

Et je me suis dit qu'il devait être possible de faire un programme sur PC qui convertit une image PC en programme Basic.
Pour le moment, la conversion image Jpeg PC vers programme Basic Thomson fonctionne mis à part les problèmes de colorimétrie.
Ensuite je passe le prog Basic dans l'émulateur DCMOTO avec le simulateur clavier.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Palette thomson 4096 Couleurs

Message par __sam__ »

Ca rends pas mal sans tramage je trouve. C'est pas les couleurs d'origine, mais ca donne un style homogène. Pour tout dire je trouve la couleur d'origine, trop rouge et trop sombre, moins jolie en fait. :)
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
z80¯\_(ツ)_/¯
Messages : 77
Inscription : 06 oct. 2020 13:15
Localisation : Bourgogne

Re: Palette thomson 4096 Couleurs

Message par z80¯\_(ツ)_/¯ »

En vidéo:



(Je pense qu'il faudrait déplacer ce thread dans Développements actuels... désolé)
Avatar de l’utilisateur
fneck
Site Admin
Messages : 17423
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: Palette thomson 4096 Couleurs

Message par fneck »

(Je suis d'accord, c'est déplacé 8) )
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Palette thomson 4096 Couleurs

Message par __sam__ »

Qu'est ce que tu penses de ce programme basic ?
Pièces jointes
bm.map.bas.zip
(24.13 Kio) Téléchargé 101 fois
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
z80¯\_(ツ)_/¯
Messages : 77
Inscription : 06 oct. 2020 13:15
Localisation : Bourgogne

Re: Palette thomson 4096 Couleurs

Message par z80¯\_(ツ)_/¯ »

Je pense que:
  • Le code basic est optimisé au niveau du source (moins de lignes) mais c'est un peu plus lent (instruction line du basic). L'effet à l'affichage est plutôt sympa puisqu'il illustre bien le color clash des Thomson. (le codage réside dans L%=(NOTC%)@16:C%=C%OR-16 ELSE L%=C%@16:C%=C%AND15, à la première lecture, c'est pas évident... je vais essayer de creuser).
  • L'algorithme de sélection de palette et de dithering sont bien plus efficaces que ceux que j'ai implémentés.
  • Il s'agit peut être de la conversion en basic Thomson de l'image obtenue dans Grafx2 après le passage du filtre ostro_to9.lua.
  • Pour l'algo de sélection de palette, je sais que "à base d'oct-tree où l'on regroupe les "noeuds". Dans le code lua, le commentaire pointe sur https://www.ece.mcmaster.ca/~xwu/cq.c, Wu's Color Quantizer.
  • Et pour le dithering, c'est une diffusion d'erreurs basée sur ce document https://perso.liris.cnrs.fr/victor.ostr ... oeffED.pdf.
  • Il y a toujours un léger décalage entre le résultat obtenu dans DCMOTO et l'image affichée directement sur le PC. Ce décalage se réduit lorsqu'on augmente la correction gamma au maximum dans DCMOTO.
Concernant la sélection de palette. J'ai de mon côté implémenté un octree en me basant la dessus http://delimitry.blogspot.com/2016/02/o ... ython.html. Cependant, lorsque je réduit l'arbre, je n'obtiens pas une palette optimale (il me faudrait une couleur plus foncée dans la palette) :
Image

Est-ce qu'il y a des astuces à connaitre sur la réduction de l'arbre octree ?

Je vais essayer d'utiliser le Wu's Color Quantizer.
Répondre