Pergunta

eu sei que Dithering de Floyd -Steinberg O algoritmo não pode ser implementado com o Pixel Shader, porque esse algoritmo é estritamente seqüencial. Mas talvez existam algum algoritmo de derrotamento paralelo de paralelo que, por sua saída visual, é semelhante ao algoritmo Floyd-Steinberg?

Portanto, a questão é: o que são algoritmos de endividamento que são adequados para implementar no Pixel Shader (de preferência GLSL) e com qualidade de saída (muito) semelhante ao Dithering Floyd -Steinberg?

POR FALAR NISSO. Os algoritmos de várias passagens são permitidos até que não haja mais de 2 passes e a sobrecarga da CPU entre esses passes é pequena.

Alguma ideia ?

EDITAR:
Eu preciso de Dithering de cor de 24 bits para cor de 21 bits.
(Isto é - eu preciso converter de 8 bits/canal para 7 bits/canal.)

Editar 2Talvez eu não tenha explicado muito bem o problema. Então, tentarei expandir um pouco o problema exato. O problema é isto - considere que temos esta imagem:
alt text
E temos a imagem acima, mas processamos com o algoritmo de Dithering:
alt text
Agora, este é um procedimento que testará seu dithering é bom para mim ou não:
1. Carregue essas imagens no Photoshop como uma imagem com 2 camadas.
2. Escolha o modo de mistura de camadas para "diferença".
3. Execute a operação "Merge visível" em camadas, para obter apenas uma camada.
4. Execute a operação => imagem/ajustes/equalize

Depois disso, você deve obter essa imagem:
alt text
Como você vê - os pixels do meio que estavam na cor vermelha monótona não estavam em nada. Também o Dithering das zonas de imagem esquerda e direita é um pouco diferente. Tente reconstruir o algoritmo de dithering com esse comportamento.

Foi útil?

Solução

Se você está reduzindo de 8 bits para 7, está jogando fora quase nenhuma informação. Tem certeza de que precisa fazer?

Se você precisar fazer, adicione ruído aleatório e, em seguida, clipe, será muito bom para o seu aplicativo.

Outras dicas

Você poderia usar um pedidos pedidos. É mais grosseiro do que Floyd-Steinberg, mas não há dependência entre os pixels.

Editar: Como você está removendo apenas um bit, isso se torna quase trivial. O princípio por trás do Dítor ordenado é criar um padrão que influencia o limiar de transição; Nesse caso, o viés será 0 ou 1 e o padrão será de 2x2 pixels. Essas duas mudanças juntas tornarão o padrão muito menos desagradável do que o do artigo da Wikipedia - você pode até gostar mais do que Floyd -Steinberg.

Aqui está algum pseudo-código:

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

Editar 2: Aqui está o resultado da minha diferença, da melhor maneira possível. Sem saber como você mapeia seus valores de 7 bits de volta a 8 bits, não consigo fazer melhor.

alt text

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top