2009-08-11 13 views
11

Che cos'è un buon algoritmo per creare immagini a mezzitoni (come this)? Una rapida ricerca su google fa emergere una serie di articoli sull'argomento, ma è difficile giudicare quali sono buoni, efficienti, ecc. Esiste la scelta migliore per fare questo genere di cose?Algoritmo per creare immagini a mezzitoni?

+0

c'è qualcosa di più alla tua domanda che gradireste risposto? Più dettagli? – NoMoreZealots

risposta

16
  • Filtro fino alla risoluzione desidera che i "punti" siano separati da.
  • Ottieni l'intensità media del gruppo di pixel in quell'area.
  • Disegnare il punto in modo che l'area della superficie del punto sia uguale alla percentuale da bianco a Nero dell'intensità media .

Pensa ai gruppi di pixel come a una griglia esagonale. Usa una funzione circolare per decidere quali pixel entrare nel gruppo. È possibile accordare la sovrapposizione dei cerchi per regolare il nero/saturazione dell'output. Questo è veramente progettato per output ad alta risoluzione come la stampa. Se si esegue questa operazione per visualizzarla sullo schermo come effetto visivo, assicurarsi di utilizzare una routine di disegno circolare anti-alias per compensare la bassa risoluzione del display. (Rispetto alla stampa, anche l'HD non è poi così alto.)

Se lo stai facendo perché ti piace l'effetto, è fantastico. Ma se si desidera solo retinatura su un'immagine in bianco e nero, si consideri l'utilizzo di un dithering "Floyd-Steinberg". Fornisce risultati di alta qualità e distribuisce l'errore attraverso l'immagine. http://en.wikipedia.org/wiki/Floyd-Steinberg_dithering

+0

http://en.wikipedia.org/wiki/Dither – kenny

+0

Hanno un buon esempio di "floyd-stienberg". Mi ha dato i migliori risultati in passato. – NoMoreZealots

+0

L'algoritmo "draw the dot" qui delineato ottiene l'effetto "black-dot-only" sulla pagina Web di esempio citata. Costruire uno schermo e accordare la forma del punto per l'effetto "solo punti neri" sarà più veloce in fase di esecuzione. –

0

Il modo più semplice per farlo, è di andare pixel per pixel e utilizzare casualità: per ogni pixel, probabilità di colorazione indietro = oscurità del colore originale.

Ciò può darvi un algoritmo di dithering a due righe. Non sarà bello come Floyd-Steinberg (perché quello tiene traccia degli errori), o artistico come "piastrella e poi mette i dischi in ogni tessera in modo che la frazione di nero = oscurità media nella piastrella originale", ma funziona abbastanza bene nella pratica.

+0

Ciò si traduce in qualcosa in cui la densità di uscita si avvicina al livello di grigio in ingresso, ma non raggiunge l'aspetto del punto cluster dello specifico esempio citato. –

+0

Mezzitoni significa (per citare wikipedia) "Il mezzitoni è la tecnica reprografica che simula immagini a toni continui attraverso l'uso di punti, che variano in termini di dimensioni o di spaziatura". Il campione che ha mostrato varia di dimensioni, il mio varia la spaziatura. Entrambi i mezzitoni di lepre, anche se non ho intenzione di fingere che il mio sia bello come l'esempio: come detto, il valore di questa risposta è che è estremamente semplice da implementare. – redtuna

+0

lepre -> sono (oops, mi dispiace per l'errore di battitura! Vorrei poter modificare i miei commenti) – redtuna

4

Halftoning è molto efficiente.

Mezzitoni a un livello: Ingresso: Pixel dell'immagine; "schermo" precostruito contenente valori soglia. Al runtime: per ciascun canale di colore, per ciascun pixel, selezionare un valore di soglia (indice nell'array di soglia modulo le dimensioni dell'array). Un confronto tra il pixel e la soglia determina se il valore di uscita è attivato o disattivato.

Si generalizza anche all'uscita a più livelli, utilizzando più schermi.

La parte interessante è la costruzione delle schermate (matrici di soglia). Esistono molte varianti: punto cluster (AM), stocastico (FM), molte varianti e ibridi tra cui il rumore blu e il rumore verde (AM/FM). E di solito vuoi uno schermo diverso per ogni canale di colore. I tradizionali schermi a punti a grappolo raggruppano i loro punti in griglie rettangolari che possono essere descritte in base alla loro frequenza (bassa frequenza = punti grandi) e angolo (in genere 15 ° per Ciano, 75 ° per Magenta, 90 ° per Giallo e 45 ° per Nero) .

Se si desidera sperimentare, Photoshop Bitmap con Metodo schermo mezzitoni (vedere questo tutorial) ha un generatore di schermate interno e proietterà un'immagine in scala di grigi in un bitmap proprio come nell'esempio.

I metodi di dithering suggeriti da altri implicano più calcoli per pixel e l'output non assomiglia all'esempio di mezzitoni a punti con cluster.

+1

esempio animato: http://www.openprocessing.org/visuals/?visualID=911 – biziclop

1

Esistono numerose implementazioni open source di algoritmi per creare immagini a mezzitoni. Puoi dare un'occhiata ai codici sorgente. Di seguito sono presentate alcune implementazioni sviluppate in Java utilizzando Marvin Image Processing Framework. immagine

ingresso:
enter image description here

diffusione errore (source):
enter image description here

Rylanders (source):
enter image description here

dithering (source):
enter image description here

Circles (source):
enter image description here