Salutami di novu! Aghju trovu questu articulu scrittu in maghju 2019. Questa hè una continuazione di una seria d'articuli nantu à WAVE è JPEG, quì
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 -
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) -
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):
Cumpressione
Prima andemu à traversu a matrice in un mudellu zig-zag:
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
Source: www.habr.com