JPEG. Algoritmu di cumpressione

Salutami di novu! Aghju trovu questu articulu scrittu in maghju 2019. Questa hè una continuazione di una seria d'articuli nantu à WAVE è JPEG, quì u primu. Questa publicazione includerà infurmazioni nantu à l'algoritmu di codificazione di l'imaghjini è u furmatu stessu in tuttu.

Un pizzicu di storia

Una cucchiara di l'articulu di Wikipedia:

JPEG (Joint Photographic Experts Group) hè unu di i formati di grafica raster populari utilizati per almacenà e fotografie è imagine simili.

Stu standard hè statu sviluppatu da u Joint Photographic Experts Group in u 1991 per una cumpressione efficiente di l'imaghjini.

Cumu l'imaghjini passanu da raw à JPEG?

Certi pirsuni pensanu chì l'imaghjini JPEG sò dati crudi compressi cù u metudu Huffman, ma questu ùn hè micca veru. Prima di cumpressione di cuntrollu, i dati viaghjanu assai.

Prima, u mudellu di culore hè cambiatu da RGB à YCbCr. Ci hè ancu un algoritmu speciale per questu - ccà. Y ùn hè micca toccu, postu chì hè rispunsevuli di a luminosità, è u so cambiamentu serà notevuli.

A prima cosa da fà cù l'imaghjini hè "diluzione" (sottocampionamentu). Hè faciule da capisce: un array 2x2 di pixel hè pigliatu, allora Cb è Cr sò pigliati - i valori medii di ognunu di i cumpunenti YCbCr di questi 4 pixel. Allora, avemu vintu 6 bytes, invece di 4 Y, 4 Cb, 4 Cr avemu 4 Y è u listessu Cb è Cr per ognunu di elli (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). Ancu à a scala 2x2, a compressione di perdita cù un rapportu di compressione 2: 1 sona solidu. Questu hè applicà à tutta l'imaghjini. È cusì - anu cascatu a mità di grandezza. È pudemu usà sta tecnica grazia à a nostra percepzione di u culore. Una persona facilmente notarà una diffarenza di luminosità, ma micca di culore, s'ellu hè mediu nantu à un picculu bloccu di pixel. U diluimentu pò ancu esse fattu in una linea, 4 pixel orizontali è verticali. A prima opzione hè usata più spessu. Se a qualità di l'imaghjini hè impurtante, a decimazione ùn hè micca realizata.
Un'illustrazione visuale di diluzione (Habr ùn m'hà micca permessu di inserisce un gif) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

A parte principale di a preparazione

Dkp

Avà vene a parte più dura è necessaria. L'imaghjina sana hè divisa in blocchi 8x8 (u riempimentu hè utilizatu se a risoluzione ùn hè micca multiplu di u latu di u bloccu).

Avà appricà à ogni bloccu DCT (trasformazione discreta di cosenu). In questa parte, tuttu ciò chì ùn hè micca necessariu hè pigliatu da a stampa. Utilizendu DCT, avete bisognu di capisce chì un bloccu datu (8 × 8) descrive ogni parte monotona di l'imaghjini: u celu, u muru; o cuntene una struttura cumplessa (capelli, simboli, etc.). Hè logicu chì 64 pixels di culore simili pò esse discrittu da solu 1, perchè a dimensione di u bloccu hè digià cunnisciutu. Tantu per a cumpressione: 64 à 1.

DCT trasforma u bloccu in un spettru, è induve e letture cambianu bruscamente, u coefficientu diventa pusitivu, è più forte a transizione, u più altu serà a pruduzzioni. Induve u coefficient hè più altu, a stampa mostra transizioni chjaru in u culore è a luminosità, induve hè più bassu - cambiamenti debuli (liscia) in i valori di i cumpunenti YCbCr in u bloccu.

Quantization

I paràmetri di cumpressione sò digià applicati quì. Ognunu di i coefficienti in ognuna di e matrici 8x8 hè divisu da un certu numaru. Se ùn reducià micca a qualità di l'imaghjini dopu à tutte e so mudificazioni, u divisore deve esse unu. Se a memoria occupata da sta foto hè più impurtante per voi, allora u divisore serà più grande di 1, è u quotient serà arrotondatu. Ci hè chì dopu à l'arrotondamentu spessu finiscinu cù assai zeri.

A quantizazione hè fatta per creà a pussibilità di cumpressione ancu più grande. Eccu ciò chì s'assumiglia cù l'esempiu di quantizing u graficu y = sin(x):

JPEG. Algoritmu di cumpressione

Cumpressione

Prima andemu à traversu a matrice in un mudellu zig-zag:

JPEG. Algoritmu di cumpressione

Avemu un array unidimensionale cù numeri. Avemu vistu chì ci sò assai zeri in questu, ponu esse eliminati. Per fà questu, invece di una sequenza di parechji zeri, entremu 1 zero è dopu un numeru chì indica u so numeru in a sequenza. Questu modu pudete resettate à 1/3 di a dimensione di l'array tutale. E poi simpricimenti cumpressà stu array usendu u metudu Huffman è scrivemu in u schedariu stessu.

Induve si usa

In ogni locu. Cum'è PNG, JPEG hè utilizatu in camere, OS (cum'è loghi di a cumpagnia, icone di l'applicazioni, miniature) è in tutti i spazii pussibuli induve l'imaghjini anu da esse almacenatu in modu efficiente.

cunchiusioni

À u mumentu, a cunniscenza di JPEG hè avà preziosa solu per scopi educativi, perchè hè digià custruita in ogni locu è ottimizzata da grandi gruppi di persone, ma u granitu di a scienza hè sempre gustoso.

Fonti

Articulu nantu à YCbCr in Wikipedia
Articulu di Wikipedia in JPEG
Un pocu di PrEP da u postu Pikabu
Articulu di Wikipedia nantu à PrEP

Source: www.habr.com

Add a comment