[HECTOR HRX/MX] de belles images sur vos HRX/MX

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

jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: [HECTOR HRX/MX] de belles images sur vos HRX/MX

Message par jester »

J'aimerais beaucoup avoir les images d'origine, avant passage à la moulinette.
Cela permet de voir l'étendu du carnage, mais aussi et surtout de tester d'autres techniques.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [HECTOR HRX/MX] de belles images sur vos HRX/MX

Message par __sam__ »

je pense que parler de carnage est un peu abuser. Pour rappel il n'y a que 4 couls dispo parmi une palette très réduite. Pour moi la diffusion d'erreur reste le meilleur compromis: algo simple, scriptable, adapté aux palettes non orthogonales où 2 couleurs ont des composantes RGB communes, rapide. La vitesse est un critère important car le truc pour les images est d'avoir un gros corpus, de lancer la conversion et récupérer les meilleurs visuellement parlant. Du coup on ne peut pas attendre des plombes par image pour avoir le résultat. J'ai des algos qui traitent (seulement) 12 images/heures: c'est beaucoup trop long pour traiter mon corpus de plusieurs milliers d'images, et à la fin le résultat n'est pas forcément meilleurs (apparition d'autres artefact que la technique est supposée régler: le mieux est l'ennemi du bien).

Sinon pour les images: google avec taille 240x230 donnent la plupart de celles que j'ai utilisée.
Image
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
Fool-DupleX
Messages : 2271
Inscription : 06 avr. 2009 12:07

Re: [HECTOR HRX/MX] de belles images sur vos HRX/MX

Message par Fool-DupleX »

12 images/heure ? Quel algo est aussi lent ? Il va falloir m'expliquer et ça m'intéresse.

Effectivement je crois que le mot carnage est largement inapproprié, mais je pense que c'etait entre guillemets.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [HECTOR HRX/MX] de belles images sur vos HRX/MX

Message par __sam__ »

Oui je pense que Jester a usé de l'emphase avec le mot carnage. Je sais qu'il n'aime pas la diffusion d'erreur, on avait discuté ensemble à l'époque de Skyrim. Il préfère les choses bien "ordered" si j'ose dire :mrgreen:

5mins/image c'est genre brute force à essayer toutes les combinaisons de palettes de 16 parmi 64 ou 128 couls.. Tu vois le genre. D'ailleurs je me suis fait un algo marrant pour énumérer de façon non récursive tous les ensembles de n entiers dans un liste de m entiers (non consécutifs): si je te donne {1, 3, 4, 5, 7, 15, 16, 17, 21, 23, 25, 31} lister toutes les partitions en 4 sous-ensembles. Mon implémentation est toute petite, utilise les bitfields et pleins de propriétés de l’arithmétique binaire. Elle pourrait presque figurer dans le Hacker's Delight.

Je l'ajouterais dans ce message quand je repasserai chez moi. (wait & see)

[Edit: je suis rentré] ah non l'algo est recursif. Mais il est petit quand même. Le code représente les ensembles d'entiers sous forme de bitfields (dont limité aux entier de 0 à 31 sur 32bits. Au delà il faut travailler sur une arithmétique multiprécision que je ne développerai pas).

La routine suivante prend un ensemble ($set), et un sous ensemble ($x) de ($set) (donc ($x & $set) == $x) et calcule le sous ensemble suivant ($y) de $set. Le prochain sous-ensemble ($y) est le plus petit sous ensemble de ($set) tel ($x<$y):

Code : Tout sélectionner

sub next_in_set {
        my($x, $set) = @_;
        return ($x-$set) & $set;
}
C'est très compact et très rapide. En gros avec $set = %0011001, la routine produit %0000001 %0001000 %0001001 %0010000 %00100001 %0011000 %0011001. En fait elle compte en binaire les 8 valeurs possibles pour les 3 bits à 1 dans le set initial, mais elle saute par dessus les zones de 0 consécutifs dans le bitmask.

Ensuite la routine suivante énumère toutes les partitions de ($set) en ($k) sous-ensembles

Code : Tout sélectionner

sub all_k_partition {
        my($k, $set, $i) = @_;
        return () if $set==0 || $k==0 || $set<=$i;
        return ($set) if $k==1;

        my(@r);
        while($i = &next_in_set($i, $set)) {
                my($m) = $i;
                for (my $j = 1;$m>>$j;$j<<=1) {$m|=$m>>$j;}
                for my $j (&all_k_partition($k-1, $set^$i, $m)) {
                        push(@r, "$i,$j");
                }
        }

        return @r;
}
elle prend en paramètres ($k), le nombre de partitions de l'ensemble ($set) à considérer et une graine ($i) représentant le plus grand sous-ensemble contigu non contenu dans $set (donc initialement cela vaut 0). Elle se base sur le fait que toutes les ($k) partitions de ($set) est constitué par la concaténation chaque sous-ensemble ($i) non vide de ($set) concaténé à toutes les ($k-1) partitions de ($set) privé de ($i) (d'où le ($set ^ $i)).

La boucle sur une ligne

Code : Tout sélectionner

for (my $j = 1;$m>>$j;$j<<=1) {$m|=$m>>$j;}
est une façon rapide de prendre un nombre $m = %00100101011, et d'obtenir %00111111111 (i.e. tous les bits du lsb au msb sont à 1) en au plus log2(position(msb))<=5 tours.

Voilà.. fin de la parenthèse chia.te. Mais chose promise, chose due :lol:

Au fait l'ensemble des partitions de {1, 3, 4, 5, 7, 15, 16, 17, 21, 23, 25, 31} en 4 sous-ensembles contient 611501 éléments. Pour les voir tous il vous suffit d'exécuter le code ici: http://pastebin.com/y1Cdi1vB. Les premières et dernières partitions énumérées sont:

Code : Tout sélectionner

1 {1} {3} {4} {5,7,15,16,17,21,23,25,31}
2 {1} {3} {5} {4,7,15,16,17,21,23,25,31}
3 {1} {3} {4,5} {7,15,16,17,21,23,25,31}
4 {1} {3} {7} {4,5,15,16,17,21,23,25,31}
5 {1} {3} {4,7} {5,15,16,17,21,23,25,31}
6 {1} {3} {5,7} {4,15,16,17,21,23,25,31}
7 {1} {3} {4,5,7} {15,16,17,21,23,25,31}
8 {1} {3} {15} {4,5,7,16,17,21,23,25,31}
9 {1} {3} {4,15} {5,7,16,17,21,23,25,31}
...
611496 {1,4,5,7,15,16,17,21} {23} {3,25} {31}
611497 {1,4,5,7,15,16,17,21} {3,23} {25} {31}
611498 {3,4,5,7,15,16,17,21} {23} {25} {1,31}
611499 {3,4,5,7,15,16,17,21} {23} {1,25} {31}
611500 {3,4,5,7,15,16,17,21} {1,23} {25} {31}
611501 {1,3,4,5,7,15,16,17,21} {23} {25} {31}
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
6502man
Messages : 12242
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [HECTOR HRX/MX] de belles images sur vos HRX/MX

Message par 6502man »

Jester si tu as d'autres rendu en 4 couleurs parmis les 8 de la palette Hector avec une autre technique c'est intéressant pour justement proposer plusieurs rendus sur un slideshow.
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: [HECTOR HRX/MX] de belles images sur vos HRX/MX

Message par jester »

4 couleurs c'est chaud... j'avais pas fait attention à ce chiffre en fait (je pensais 8 couleurs comme quasi toutes les machines).
Si tu me passes la palette je vais regarder... à moins que ce soit les 8 couleurs primaires RVB : Noir, Blanc, Bleu, Cyan, Vert, Magenta, Rouge, et Jaune ?

Je trouve que le combat algorithmique est une chose, le rendu final pour un oeil humain en est une autre :wink:
Avatar de l’utilisateur
6502man
Messages : 12242
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [HECTOR HRX/MX] de belles images sur vos HRX/MX

Message par 6502man »

Oui 4 couleurs parmi : NOIR, ROUGE, VERT, JAUNE, BLEU, MAGENTA, CYAN, BLANC.

Disons que je cherche à proposer des images inattendu sur cette machine, et avec seulement 4 couleurs je pense que l'on ai obligé de passer par des algorithmes types "diffusion d'erreur" ;)
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: [HECTOR HRX/MX] de belles images sur vos HRX/MX

Message par jester »

J'utilise ImageMagick mais je ne sais pas paramétrer l'outil pour lui dire de choisir les 4 meilleurs couleurs d'une palette de 8 pour une image donnée.
Dés que j'ai trouvé je pourrais faire des tests... mais j'ai l'impression que c'est impossible.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [HECTOR HRX/MX] de belles images sur vos HRX/MX

Message par __sam__ »

A ma connaissance les méthodes sans diffusion d'erreur (Posterize sous imagemagick) ne marchent que sur une palette aux couleurs indépendantes, c'est à dire une palette où l'on peut influer sur la quantité de rouge sans changer les quantités de vert et bleu. L'espace des couleurs étant de dimension 3, il faut au moins 2^3=8 couleurs dans la palette. Avec moins de couleurs (4 par exemple) la seule technique qui s'applique vraiment est la diffusion d'erreur je pense.

Il existe cependant une autre possibilité: regrouper les pixels 2x2 avec la palette (Noir, Rouge, Vert, Bleu).

Code : Tout sélectionner

R B
B V
La résolution est moindre, mais on arrive à émuler l'orthogonalité de la palette. Il y a deux bleus pour un vert et un rouge parce que l'intensité perçue pour le bleu est plus faible. Cette approche peut fournir des résultats intéressants, mais la résolution est bien plus basse et l'intensité lumineuse des 8 couleurs reproductibles pas très respectée (l'image est 4 fois plus sombre qu'à l'entrée et le blanc contient un peu trop de bleu.) Bon par contre je ne suis pas sur que ImageMagick sache faire cela. Il faut probablement programmer un peu.

[edit: il me vient une autre idée] Toujours avec la palette R,V,B,N, on peut aussi reproduire les 8 couleurs ainsi:

Code : Tout sélectionner

NN   RR   VV   VR   BB   BR   BV   BR
NN   RR   VV   RV   BB   RB   VB   VB
Noir Roug Vert Jaun Bleu Mage Cyan Blanc
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
jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: [HECTOR HRX/MX] de belles images sur vos HRX/MX

Message par jester »

Tout cela est bien compliqué... pour le résultat obtenu.
En choisissant 4 couleurs moi-même: intervention d'un humain dans la boucle, et en utilisant ImageMagick avec de l'ordered-dithering o2x2, ma palette de couleur, j'obtiens le résultant ci-dessous que je trouve bien plus sympa à l'écran, agréable à l'oeil, avec un piqué qui perd peu de détails et surtout sans explosion de petits points tout partout. L'aliasing naturel d'un cathodique donnant un résultat optimal avec ce genre de texture simple bicolore.
Après si on veut passer à la moulinette 500 images à la chaine, c'est pas adapté, mais si on veut faire un beau slideshow aves des images bien choisies, en prenant le temps de configurer manuellement la palette (virer 4 couleurs parmi 8 c'est pas la mort non plus,on voit vite les dominantes). Et rien n'empêche de retoucher l'image après coup ou de modifier avec filtrage certaines couleurs à la main pour obtenir un résultat plus net... bref une petite part artistique et moins mécanique.
Bien sur ça marche pas bien avec des images photo-réaliste... mais avec des captures de jeux, des cartoons le résultat est bon et donne un cachet 8bits d'époque.
Image
Image

C'est mon avis... assez tranché... mais je le partage.
Dernière modification par jester le 27 févr. 2014 12:45, modifié 1 fois.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [HECTOR HRX/MX] de belles images sur vos HRX/MX

Message par __sam__ »

C'est sur que pour trancher, ca tranche :wink: Un avantage que je vois à l'ordered-dither est que tes images se compresseront forcément mieux.

Hum j'y penses: je crois qu'on peut automatiser ton processus. (affaire à suivre..)
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
jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: [HECTOR HRX/MX] de belles images sur vos HRX/MX

Message par jester »

En fait pour être sérieux, le résultat d'une diffusion d'erreur à faible résolution + très peu de couleurs donne l'impression de regarder une image TV analogique par tant de neige avec une antenne mal orientée... on a tous connu cela.
On reconnait mieux les détails, on conserve bien l'ambiance des couleurs... mais c'est désagréable pour l'oeil humain.

Le dithering (mode checks ou o2x2) donne un résultat cartoon, videogame vintage qui passe, je trouve super bien... même si l'ambiance des couleurs change. Mais avec 8 couleurs de base (Exl100 et autres) les résultats sont bluffants, la avec 4 parmi 8 c'est correct sans plus. Je pense que les méthodes sont complémentaires : diffusion d'erreur pour le photo-réalisme où le dithering est nul (la photo avec les lions par exemple), le dithering dans les autres cas.

Quoiqu'il en soit il faut des images sans artifacts de compression pour le dithering... facile avec les captures de jeux, moins avec les images récupérées sur le net.

Mais si tu as une astuce pour trouver les 4 meilleures couleurs pour une image avec ImageMagick, ou encore mieux pour trouver le pattern bicolore le mieux adapté la je deviens amoureux. (Le dithering est en fait assez limité et ImageMagick compose des motifs simples en alternant une couleur soit avec du blanc, soit avec du noir. Mais on pourrait avoir plus de nuance en affectant automatiquement une des 32 combinaisons de couleurs/patterns à une couleur source. Cette technique devrait s'adapter très bien aux captures de jeux vidéo, dessin, cartoon... en autorisant une bonne compression. J'avais testé cette méthode manuellement pour convertir des images SierraOnLine AGI et SCI en EGA pour Exl100... j'avais presque eut une larme en rêvant de voir la scène s'animer.)
Fool-DupleX
Messages : 2271
Inscription : 06 avr. 2009 12:07

Re: [HECTOR HRX/MX] de belles images sur vos HRX/MX

Message par Fool-DupleX »

Oui ... Du bon vieux Bayer de 40 ans d'âge, bourré d'artefacts, d'aplats et de dérive couleur (gris au milieu du tapis vert). On a fait mieux depuis, même en tramage ordonné, comme la rotation dispersée dont je parlais plus haut. Pourquoi toujours et encore ne tout ramener qu'a ces deux techniques de 40 balais (ordonné vs. diffusion d'erreur) alors qu'il en existe au moins 4 ou 5 autres qu'on ne peut classer ni dans l'ordré, ni dans la diffusion d'erreur : stochastique, blue noise, pulse-density, ... et qui donnent toutes de bien meilleurs résultats VISUELS, puisque c'est un sujet de recherche en soit. Quant à la réduction de gamut, c'est également un sujet de recherche ardent et il existe un certain nombre d'algorithmes plus ou moins performants pour déterminer les meilleures palettes. Sam, nous avons déjà longuement discuté de scolorq de Puzicha/Buehmann.

En tout cas c'est bien sûr qu'il n'existe aucune algorithme parfait. Mais Bayer et Floyd-Steinberg, franchement ... c'est la préhistoire du tramage. C'est mon opinion, du moins ...
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [HECTOR HRX/MX] de belles images sur vos HRX/MX

Message par __sam__ »

Hé, oh! 40 balais c'est pas si vieux! en tout cas dans mon esprit je me sens jeune alors que j'ai dépassé les 40. :P

Sinon je pense à un truc sympa que je vais sans doute essayer (j'adore expérimenter): Du void-and-cluster pour ramener l'image de true-color aux 8 couls de base (le void & cluster évitera les artefact de bayer et j'ai déjà quelques matrices en réserve ici). Ensuite remap des 8couls à 4 couleurs "optimales" avec le modèle de vision humaine que j'ai utilisé pour choisir la meilleur palette pour le FS. On va voir ce qu'on peut obtenir avec cette approche... (suspens)

A propos de scolorq, c'est pas mal, mais en travaillant sur des images de 6502man pour un jeu sur TO8 je me suis rendu compte que l'algo dépend beaucoup du choix des couleurs de départ. Quand la palette destination est très petite (typiquement 4) l'algo tombe dans un minimum local dépendant des conditions de départ (donc changeantes). Résultat: entre deux exécution on peut, sur une même image, avoir une palette parfaite ou très mauvaise. C'est un peu ennuyeux cet aspect non reproductif des résultats que j'ai obtenu :evil:
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
yo_fr
Messages : 1336
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: [HECTOR HRX/MX] de belles images sur vos HRX/MX

Message par yo_fr »

Attention : Hector est bien meilleur que cela !
en effet pour les couleurs 0, 1 et 3 il s'agit bien de choisir 1 parmi les 8 primaires (RVB + mélange, ok c'est pas primaires...) mais la couleur 2 propose le même choix avec en plus une demi luminosité (soit 1 parmi 15 - 15 car le noir en demi-luminosité ça fait.... du noir :wink: )
JJ
Répondre