Question

Je sais que tramage Floyd-Steinberg algorithme ne peut pas être mis en œuvre avec pixel shader, car cet algorithme est strictement séquentiel. Mais peut-être il existe un certain parallèle extrémement algorithme de tramage qui, par sa sortie visuelle est similaire à l'algorithme de Floyd-Steinberg?

La question est - Quels sont les algorithmes de tramage qui conviennent à mettre en œuvre sur le pixel shader (de préférence GLSL) et avec une qualité de sortie (très) similaire à tramage Floyd-Steinberg

BTW. algorithmes multi-passes sont autorisés jusqu'à ce qu'il n'y a pas plus de 2 passes et CPU frais généraux entre ces passages est faible.

Toutes les idées?

EDIT: J'ai besoin tramage de couleur 24 bits couleur 21 bits.
(C'est - je dois convertir de 8 bits / canal à 7 bits / canal.)

EDIT 2 Peut-être que je l'ai pas expliqué problème très bien. Je vais donc essayer de développer un peu problème exact. Problème est - considérer que nous avons cette image:
text alt
Et nous avons au-dessus de l'image, mais traités avec l'algorithme de tramage:
text alt
Maintenant, c'est la procédure qui permettra de tester votre tramage est bon pour moi ou non:
1. Chargez ces images dans Photoshop comme une image avec 2 couches.
2. Choisissez le mode de fusion des calques pour « différence ».
3. Effectuer une opération « Fusionner visible » sur les couches, pour obtenir une seule couche.
4. Effectuer des opérations => Image / Réglages / Égalise
Après cela, vous devez obtenir telle image:
text alt
Comme vous le voyez - pixels du milieu qui était en monotones couleur rouge n'a pas été tramées du tout. tramage également des zones d'image gauche et droite est un autre bit. Essayez de reconstruire l'algorithme de tramage avec un tel comportement.

Était-ce utile?

La solution

Si vous réduisez de 8 bits à 7, vous JETER presque aucune information. êtes-vous sûr que vous devez même tramage?

Si vous avez besoin de tergiverser, ajouter du bruit aléatoire puis clip, il sera bon beaucoup pour votre application.

Autres conseils

Vous pouvez utiliser un commandé tramage . Il est plus gros que la recherche Floyd-Steinberg, mais il n'y a pas de dépendance entre les pixels.

Modifier Puisque vous êtes seulement la suppression d'un seul bit, cela devient presque trivial. Le principe de tramage est commandé pour créer un motif qui sollicite le seuil de transition; dans ce cas, la polarisation sera de 0 ou 1 et le motif sera de 2x2 pixels. Ces deux changements feront ensemble le modèle beaucoup moins désagréable que celui dans l'article de Wikipedia -. Vous pourriez même comme mieux que Floyd-Steinberg

Voici quelques pseudo-code:

bias = (X xor Y) and 0x01
value = pixel + bias
if value > 255: value = 255
pixel = value and 0x7e

Edit 2: Voici mon résultat de différence, mieux que je peux le faire. Sans savoir comment vous associez vos valeurs de retour 7 bits à 8 bits je suis incapable de faire mieux.

text alt

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top