C'è un vantaggio in termini di qualità, dimensione del file o altro nel fatto che le dimensioni JPEG siano multipli di 8px o 16px?

StackOverflow https://stackoverflow.com/questions/74892

Domanda

Il processo di codifica della compressione JPEG divide una determinata immagine in blocchi di 8x8 pixel, lavorando con questi blocchi nelle future compressioni con e senza perdita. [fonte]

Si dice anche che se l'immagine è un blocco multiplo da 1 MCU (definito come unità codificata minima, "solitamente 16 pixel in entrambe le direzioni") è possibile eseguire alterazioni senza perdita di dati su un JPEG. [fonte]

Sto lavorando con le immagini dei prodotti e vorrei sapere se e quanti vantaggi possono derivare dall'utilizzo di multipli di 16 nella dimensione dell'immagine finale (ad esempio, utilizzando un'immagine con dimensioni 480 px per 360 px) rispetto a un'immagine con dimensioni 480 x 360 px.un non multiplo di 16 (ad esempio 484x362).In questo esempio non sono interessato ad ulteriori alterazioni, modifiche o ricompressioni dell'immagine finale.

Per cercare di avvicinarsi a una risposta specifica dove so che ci devono essere in gran parte delle generalità:Data un'immagine 480x360 pari a 64k e salvata alla massima qualità in Photoshop [esempio]:

  • Posso aspettarmi una perdita di qualità da un'immagine 484x362
  • Quale aumento della dimensione del file posso aspettarmi (per questo esempio, lo spazio aggiuntivo sarebbe costituito da pixel bianchi)
  • Ci sono altri svantaggi nel crescere più grandi della griglia da 8px?

So che è arbitrario usare quell'esempio specifico, ma sarebbe comunque utile (per me e potenzialmente per chiunque altro stia riflettendo sulla dimensione dell'immagine) capire con quale livello di compromesso avrei a che fare nel rompere la griglia non 8px.

La questione chiave qui è un dibattito che ho avuto è se le immagini divisibili da 8 pixel siano di qualità superiore rispetto alle immagini che non sono divisibili per 8 pixel.

È stato utile?

Soluzione

8 pixel è il limite.Il motivo è perché le immagini JPEG sono semplicemente una serie di blocchi DCT 8x8;se la risoluzione dell'immagine non è mod8 in entrambe le direzioni, l'encoder deve riempire i lati fino alla risoluzione mod8 successiva.Questo in pratica non è molto costoso in termini di bit;ciò che è molto peggio sono i casi in cui un'immagine presenta linee nere nette (come un'immagine in formato letterbox) che non si trovano sui confini del blocco.Ciò è particolarmente problematico nella codifica video.La ragione di questo problema è che la trasformazione di frequenza di una linea netta è una distribuzione gaussiana di coefficienti, che risulta in un numero enorme di bit da codificare.

Per i curiosi, il metodo più comune per riempire i bordi nella compressione intra (come le immagini JPEG) è rispecchiare le linee dei pixel prima del bordo.Ad esempio, se è necessario riempire tre linee e la linea X è il bordo, la linea X+1 è uguale alla linea X, la linea X+2 è uguale alla linea X-1 e la linea X+3 è uguale alla linea X- 2.Ciò minimizza in modo abbastanza efficace il costo dei coefficienti di trasformazione delle linee extra.

Nell'intercodifica, tuttavia, gli algoritmi di riempimento generalmente duplicano semplicemente l'ultima riga, poiché il metodo mirror non funziona bene per l'intercompressione, come nella compressione video.

Altri suggerimenti

A volte è necessario utilizzare limiti di 16 pixel anziché 8 a causa del sottocampionamento;ogni secondo pixel viene scartato durante il processo di codifica e i blocchi DCT 8x8 inizialmente erano 16x16 e verranno decodificati nuovamente in 16x16.Questo non sarà un problema con le impostazioni di massima qualità.

Le dimensioni dell'immagine multiple di 8 o 16 non influiscono molto sulla dimensione del disco, ma puoi ottenere risparmi notevoli se riesci ad allineare i contenuti visivi alla griglia di 8x8 pixel, ad esempio se c'è uno schema ripetuto o struttura nell'immagine.

Un JPG con dimensioni moltiplicate per 8 può anche essere ruotato/capovolto senza perdita di qualità.Ad esempio gthumb può farlo su Linux.

Che cosa Tometzky disse.Se non disponi del multiplo corretto, gli algoritmi di capovolgimento e rotazione senza perdita non funzionano.Questo perché il riempimento a destra/in basso che può essere tranquillamente ignorato ora finisce a sinistra/in alto, dove non può.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top