Quando si crea un JPEG, come posso ridurre al minimo la presenza di artefatti?


10

Ci sono 2 fattori principali che sembrano portare a artefatti digitali durante la creazione di immagini JPEG: Aliasing e Compression.

Esempio:

La conversione di un PNG con caratteri su di esso in un JPEG o il posizionamento di immagini vettoriali su una fotografia comporterà la pixelizzazione sui bordi. L'antialiasing in genere crea una sorta di sfocatura attorno a loro, ma se l'immagine è compressa in perdita , anche una parte dei dettagli viene persa, quindi la sfocatura e la pixelizzazione potrebbero diventare meno evidenti.

È questa la cosa giusta da fare? Ad esempio, poiché una compressione senza perdita di dati genera un'immagine altamente dettagliata, gli artefatti risultanti dall'aliasing saranno più evidenti, quindi è possibile trovare un equilibrio utilizzando la compressione corretta, pur compromettendo la qualità dell'immagine.

modificare

Ho appena salvato questo JPEG in mspaint (3.46KB):

Senza perdita

Ecco lo stesso JPEG con la massima compressione (qualità minima, 0,5 KB):

lossy

Ecco lo stesso JPEG con una compressione del 50% (nota la differenza di dimensioni, 1,29 KB):

Half-no-options

La stessa compressione del 50%, ma salvata come "JPG progressivo", ha conservato i dati EXIF ​​e XMP originali e "ha tentato di salvare con la qualità JPG originale" (puoi notare che non ci sono pixel grigi intorno, 2,96 KB):

Metà-options

E infine lo stesso di prima con il sottocampionamento chroma disabilitato (stessa dimensione del file, 2,96 KB):

Half-no-croma


1
Solo curioso, qual è il motivo per volere jpg, è la dimensione del file più piccolo? Nel caso in cui aiuti la tua situazione specifica, conosci la compressione dxt o le trame dei campi di distanza?
Alan Wolfe,

1
Non mi è chiaro quale sia la tua domanda. Vuoi sapere se è buono comprimere usando JPEG? Vuoi sapere quali tipi di immagini si comprimono bene con JPEG? Oppure stai già utilizzando JPEG e vorresti sapere come creare le tue immagini al fine di ridurre al minimo gli artefatti causati da JPEG?
Mokosha,

@AlanWolfe Ho riscontrato alcune occasioni in cui ero in grado di utilizzare solo JPEG (principalmente nelle app Web), ed è per questo che mi serviva che fosse in JPEG. Grazie, ma non avevo familiarità con la compressione dxt né le trame dei campi di distanza, da quello che ho visto in Wikipedia , gli algoritmi dxt sono diversi da quelli utilizzati in JPEG, vuoi dire che possono essere usati per creare JPEG?
Armfoot,

@Moshoka grazie, è più legato alla tua ultima domanda: come ridurre al minimo l '"impatto visivo" portato dagli artefatti nelle immagini JPEG?
Armfoot,

tieni presente che il mozjpegcompressore ha un trucco speciale per produrre meno distorsioni su questo tipo di immagini. (ed è più efficiente in generale dei soliti scrittori jpeg.) l'hai provato?
Visualizza nome

Risposte:


9

La compressione JPEG prevede tre passaggi principali:

  1. Sottocampionamento Chroma . L'immagine viene convertita da RGB YCbCr in spazio di colore, in cui la luma o la luminosità (Y) sono memorizzati separatamente dai crominanza componenti o colore, Cb e Cr. Il componente Y viene mantenuto alla massima risoluzione, ma Cb e Cr sono sottocampionati, in genere a metà risoluzione su ciascun asse. Questo sfrutta il fatto che il sistema visivo umano è più sensibile ai dettagli della luminosità che al colore.

  2. Quantizzazione di frequenza. Le immagini Y, Cb e Cr vengono convertite in una rappresentazione di frequenza, suddividendole in blocchi 8x8 e applicando la trasformata discreta del coseno (una variante della trasformata di Fourier) a ciascun blocco. Il risultato è una matrice di numeri che descrivono le ampiezze delle diverse frequenze spaziali nel blocco. Questi numeri possono quindi essere quantizzati (arrotondati al numero scelto di bit di precisione). Diversi livelli di quantizzazione vengono utilizzati per frequenze diverse, sfruttando la sensibilità relativamente inferiore del nostro sistema visivo alle alte frequenze. È qui che entra in gioco l'impostazione della qualità dell'encoder JPEG: le qualità inferiori utilizzano una quantizzazione più grossolana.

  3. Codifica entropica . I valori DCT quantizzati vengono passati attraverso un codificatore di entropia, che comprime senza perdita di flusso di bit utilizzando un numero inferiore di bit per rappresentare i valori più comuni, una specie di file zip.

I passaggi 1 e 2 sono quelli con perdita di dati e ognuno produce il proprio tipo di artefatti (sebbene vi sia una certa sovrapposizione). Il sottocampionamento Chroma tende a sfocare i bordi nitidi tra regioni di diversi colori. Ciò è particolarmente visibile nell'arte vettoriale, in cui forme dai colori vivaci raccolgono vizi malvagi attorno ai loro bordi. La quantizzazione di frequenza sfuma i dettagli fini in generale e crea anche artefatti a forma di blocco con impostazioni di bassa qualità, poiché il DCT viene eseguito blocco per blocco. È particolarmente visibile sul testo.

Questo è il motivo per cui JPEG di solito non viene utilizzato per immagini contenenti grafica vettoriale o testo: i suoi algoritmi di compressione sono scarsamente adatti per quei casi, sebbene funzionino bene per fotografie e altre immagini con trama complessa e bordi non troppo nitidi.


Grazie mille per la spiegazione dettagliata Nathan +1. Capisco che gli algoritmi di compressione hanno i loro limiti per JPEG, ma volevo solo scoprire se c'è un giusto equilibrio tra la quantità di compressione e altre opzioni (durante il salvataggio) che possono rendere meno evidenti gli artefatti. Ho modificato la mia domanda con dei campioni.
Armfoot,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.