JPEG

De la Viquipèdia, l'enciclopèdia lliure
Aquest article tracta sobre l'estàndard. Vegeu-ne altres significats a «Joint Photographic Experts Group».
Infotaula de format de fitxerJPEG
Una fotografia d'una flor comprimida successivament amb més ràtio de compressió d'esquerra a dreta.
TipusFormat d'imatge amb pèrdua
Extensió.jpg, .jpeg, .jpe
.jif, .jfif, .jfi (containers)
MIMEimage/jpeg
Codi de tipusJPEG
Uniform Type Identifierpublic.jpeg
Magic numberff d8
DesenvolupadorJoint Photographic Experts Group
Més informació
Stack ExchangeEtiqueta Modifica el valor a Wikidata
Lloc webjpeg.org… Modifica el valor a Wikidata

JPEG (acrònim de Joint Photographic Experts Group) és un algorisme dissenyat per a comprimir imatges fixes amb 24 bits de profunditat o en escala de grisos.

El 1982 es va iniciar el grup JPEG al que s'uneix el SGVII el 1986. La primera versió de l'estàndard va ésser aprovada el 1991, i l'any 1992 es va publicar l'article que el va fer popular entre la comunitat acadèmica.[1]

El JPEG només tracta imatges fixes, però existeix un estàndard relacionat anomenat MPEG per a vídeo. De vegades hom l'anomena incorrectament JPG a causa de l'extensió que té en sistemes operatius que només accepten tres lletres d'extensió de fitxer.

A banda de ser un mètode de compressió, també és considerat un format de fitxer. JPEG/EXif és el format d'imatge més comú, utilitzat per les càmeres fotogràfiques digitals i altres dispositius de captura d'imatge, juntament amb JPF/JFIF, un altre format per l'emmagatzement i la transmissió d'imatges fotogràfiques en la World Wide Web. Aquestes variacions de formats sovint no es distingeixen i s'anomenen "JPEG". Els fitxers d'aquest tipus s'anomenen amb l'extensió .jpg i en alguns casos .jpeg.

Compressió del JPEG[modifica]

El format JPEG utilitza habitualment un algorisme de compressió amb pèrdua per reduir la mida dels arxius d'imatges. Això vol dir que al descomprimir o visualitzar la imatge no s'obté exactament la mateixa imatge d'abans de la compressió. Existeixen tres variants del JPEG que comprimeixen la imatge sense pèrdua de dades: JPEG 2000, JPEG-LS i Lossless JPEG, però no són tan populars.

L'algorisme de compressió JPEG es basa en dos fenòmens visuals de l'ull humà: un és el fet que és molt més sensible al canvi de luminància que al de crominància; és a dir, que capta més bé els canvis de brillantor que els de color; l'altre és el fet que l'ull nota més fàcilment els petits canvis de brillantor en zones homogènies que en zones on la variació és gran (per exemple, en els extrems dels objectes).

Una de les característiques del JPEG és la flexibilitat a l'hora d'ajustar el grau de compressió. Un grau de compressió molt alt generarà un arxiu de mida petita amb una pèrdua significativa en la qualitat; en canvi, un grau de compressió molt baix generarà una qualitat d'imatge molt semblant a la original, però amb un arxiu de mida més gran.

La pèrdua de qualitat quan es fan compressions successives és acumulativa. Això significa que si es comprimeix una imatge i es descomprimeix, es perdrà qualitat, però si es torna a comprimir una imatge ja comprimida s'obtindrà una pèrdua encara més gran. Cada compressió pot suposar una pèrdua de qualitat addicional. La compressió amb pèrdua no és recomanable en imatges o gràfics amb textos o línies molt definits (mapes, esquemes, etc.), però ho és per arxius que tinguin àrees grans de colors sòlids (fotografies).

Objectius del JPEG[modifica]

  • Aconseguir taxes de compressió i qualitat d'imatge situades a prop dels límits de la tecnologia actual.
  • Els mètodes han d'ésser útils per comprimir imatges tant a nivell de grisos com de color o multi-resolutives. Així com ser independents de la mida de les imatges.
  • La implementació dels mètodes ha de ser possible mitjançant aplicacions de programari en qualsevol plataforma. També ha de ser possible el desenvolupament de circuits integrats que implementin la codificació.

L'estàndard JPEG ha assolit aquests objectius i encara és usat per la majoria de dispositius que capturen imatges fixes, com ara càmeres digitals i telèfons mòbils. Una expceció són els telèfons de la marca Apple, que usen el format HEIC des de 2017.[2] Una de les raons de la popularitat de l'estàndard JPEG va ser l'existència d'una llibreria de programari de codi obert que permetia comprimir i descomprimir imatges, desenvolupada pel Independent JPEG Group (IJG),[3] usada per la majoria de navegadors web i altres aplicacions que manipulen imatges JPEG.

Codificació[modifica]

Moltes opcions del JPEG estàndard s'utilitzen poc. El que segueix a continuació és una breu descripció d'un dels molts mètodes per comprimir imatges quan s'apliquen a una imatge d'entrada amb 24 bits per píxel (vuit per cadascun dels canals vermell, verd i blau, o també anomenat "8 bits per canal".) Aquesta opció en particular és un mètode de compressió amb pèrdua.

Transformació de l'espai de color[modifica]

Es comença convertint la imatge des del seu model de color RGB a un altre anomenat YUV o YCbCr. Aquest espai de color és similar al que utilitzen els sistemes de color per televisió PAL i NTSC, però és molt més semblant al sistema de televisió MAC (Multiplexed Analogue Components).

Aquest espai de color (YUV) té tres components:

  • El component Y, o luminància (informació de brillantor; és a dir, la imatge en escala de grisos.
  • Els components U o Cb i V o Cr, respectivament diferència del blau (relativitza la imatge entre blau i vermell) i diferència del vermell (relativitza la imatge entre verd i vermell); ambdues senyals són conegudes com a crominància (informació de color).

Les equacions que realitzen aquest canvi de base de RGB a YUV són les següents:

Y = 0,257 * R + 0,504 * G + 0,098 * B + 16
Cb = U = -0,148 * R - 0,291 * G + 0,439 * B + 128
Cr = V = 0,439 * R - 0,368 * G - 0,071 * B + 128

Les equacions pel canvi invers són les següents:

B = 1,164 * (Y - 16) + 2,018 * (U - 128)
G = 1,164 * (Y - 16) - 0,813 * (V - 128) - 0,391 * (U - 128)
R = 1,164 * (Y - 16) + 1,596 * (V - 128)

Si s'analitzen les primeres equacions es pot veure que els tres components agafen com a valor mínim el 16. El canal de luminància (canal Y) té com a valor màxim el 235 i els canals de crominància el 240. Tots aquests valors caben en un byte arrodonint al nombre enter més pròxim. Durant aquesta fase no hi ha pèrdua significativa d'informació, tot i que l'arrodoniment introdueix un petit marge d'error imperceptible per l'ull humà.

Submostreig[modifica]

Una opció que es pot aplicar a l'hora de guardar la imatge és reduir la informació del color respecte a la de la brillantor (degut al fenomen visual en l'ull humà comentat anteriorment). Hi ha diferents mètodes: si aquest pas no s'aplica, la imatge segueix en el seu espai de color YUV (aquest submostreig s'entén com a 4:4:4) i no hi ha pèrdues. La informació cromàtica es pot reduir a la meitat, 4:2:2 (reduir en un factor de 2 en direcció horitzontal); d'aquesta manera, el color té la meitat de la resolució (en horitzontal) i la brillantor segueix intacta. Un altre mètode molt utilitzat és reduir el color a la quarta part, 4:2:0, així el color es redueix en un factor de 2 en horitzontal i vertical. Si la imatge estava en una escala de grisos, es pot eliminar per complet la informació de color, quedant com a 4:0:0.

Alguns programes que permeten guardar imatges en JPEG anomenen aquests mètodes amb 1x1, 1x1, 1x1 per YUV 4:4:4 (l'opció per no perdre color); 2x1, 1x2, 1x1 per YUV 4:2:2 i 2x2, 1x1, 1x1 per YUV 4:2:0.

Transformació discreta del cosinus (DCT)[modifica]

Cada component de la imatge es divideix en blocs petits de 8x8 píxels que es processen de manera gairebé independent, fent que disminueixi notablement el temps de càlcul. D'això resulta la típica formació quadriculada, que es torna visible en les imatges comprimides amb una ratio de compressió alta. Si la imatge ha passat per un submostreig del color, els colors queden en la imatge final en blocs de 8x16 o 16x16 píxels (segons si és 4:2:2 o 4:2:0).

Després, cada bloc petit es converteix al domini de la freqüència a través de la transformació discreta del cosinus o DCT.

Un exemple d'un d'aquests blocs petits de 8x8 inicial és aquest:

El pas següent és restar 128 perquè quedin nombres entorn al 0, -128 i 127.

Es procedeix a la transformació per DCT de la matriu i l'arrodoniment de cada element al nombre enter més pròxim. Aquest arrodoniment també introdueix un petit error irreversible.

L'element més gran de tota la matriu apareix al cantó superior esquerra, aquest és el coeficient DC, i equival a la mitjana dels 64 píxels del bloc de 8x8. Es pot observar que els nombres propers a la cantonada superior esquerre de la matriu són grans mentre que els de l'altre extrem són petits Això és degut a les propietats de la DCT que concentra la variança en uns pocs coeficients.

Quantificació digital[modifica]

Article principal: Quantificació digital

L'ull humà és molt bo detectant canvis petits de brillantor en àrees relativament grans, però no ho és quan la brillantor canvia ràpidament en àrees petites (variació d'alta freqüència). Degut a aquesta condició, es poden eliminar les altes freqüències sense una gran pèrdua de qualitat visual. Això es fa dividint cada component en el domini de la freqüència per una constant per aquell component i arrodonint-lo al seu nombre enter més pròxim. Aquest és el procés en el que es perd la major part de la informació (i qualitat) quan una imatge és processada per aquest algoritme. El resultat d'això és que els components de les altes freqüències tendeixen a igualar-se a zero, mentre que molts d'altres es converteixen en nombres positius i negatius petits.

Una matriu de quantificació típica és la matriu de Losheller, que s'utilitza opcionalment en l'estàndard JPEG.

Dividint cada coeficient de la matriu de la imatge transformada entre cada coeficient de la matriu de quantificació, s'obté aquesta matriu, ja quantificada:

Per exemple, quantificant el primer element, el coeficient DC, seria així:

Codificació entròpica[modifica]

La codificació entròpica és una manera especial de compressió sense pèrdua de dades. Consisteix en agafar els elements de la matriu seguint una forma de zig-zag començant per la component DC, posant grups amb freqüències similars junts i insertant zeros de codificació i utilitzant la codificació Huffman pel que queda. També es pot utilitzar la codificació aritmètica, superior a la de Huffman, tot i que s'utilitza poc perquè esta coberta per patents; aquesta compressió produeix arxius un 5% menors, però tarda més temps a codificar i descodificar. Aquest petit guany es pot fer servir també en aplicar un menor grau de compressió a la imatge per obtenir més qualitat a una mida semblant.

En la matriu anterior, la seqüència en zig-zag és aquesta:

−26, −3, 0, −3, −2, −6, 2, −4, 1 −4, 1, 1, 5, 1, 2, −1, 1, −1, 2, 0, 0, 0, 0, 0, −1, −1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

El JPEG té un codi Huffman per tallar la cadena anterior en el punt en què la resta de coeficients siguin zeros. D'aquesta manera, s'estalvia espai:

−26, −3, 0, −3, −2, −6, 2, −4, 1 −4, 1, 1, 5, 1, 2, −1, 1, −1, 2, 0, 0, 0, 0, 0, −1, −1, EOB

Soroll per la compressió[modifica]

Article principal: Soroll de quantificació

El resultat després de la compressió pot variar en funció de l'agressivitat dels divisors de la matriu en la quantització: com més valor tinguin els divisors, més coeficients es convertiran en zeros i més es comprimirà la imatge. Però les compressions més grans produeixen soroll en la imatge, empitjorant-ne la qualitat. Una imatge amb una compressió forta (1%-15%) pot tenir una mida d'arxiu petita, però tindrà tantes imperfeccions que no serà interessant; en canvi, una imatge amb una compressió molt baixa (98%-100%) produirà una imatge de qualitat alta però tindrà una mida molt gran.[4]

La majoria de persones que naveguen per Internet estan familiaritzades amb aquestes imperfeccions, que són el resultat d'una bona compressió. Per evitar-les, s'ha de reduir el nivell de compressió o aplicar compressió sense pèrdua, produint arxius més grans.

Decodificació[modifica]

El procés de decodificació és similar al que hem vist fins ara, però de manera inversa. En aquest cas, al haver perdut informació, els valors finals reconstruïts no coincidiran amb els inicials.

S'agafa la informació de la matriu, es descodifica i es posa cada valor a la seva casella. Després es multiplica cadascun dels valors pel valor corresponent de la matriu de quantització utilitzada; molts valors són zeros i, per tant, només es recuperen (i de manera aproximada) els valors de l'extrem superior esquerra.

Després es desfà la transformació DCT aplicant la seva inversa:

I finalment es suma 128 a cada entrada:

Per comparar les diferències entre el bloc original i el comprimit, es pot calcular la diferència entre ambdues matrius. La mitjana dels seus valors absoluts dona una idea de la qualitat que s'ha perdut a nivell de cada bloc de 8x8 píxels:

Referències[modifica]

A Wikimedia Commons hi ha contingut multimèdia relatiu a: JPEG
Vegeu JPEG en el Viccionari, el diccionari lliure.
  1. Wallace, G.K. «The JPEG still picture compression standard». IEEE Transactions on Consumer Electronics, 38, 1, Feb./1992, pàg. xviii–xxxiv. DOI: 10.1109/30.125072.
  2. Casserly, Martyn. «Complete guide to the HEIC image format in iOS» (en anglès). [Consulta: 8 gener 2022].
  3. «Independent JPEG Group». [Consulta: 8 gener 2022].
  4. Minguillón, Julià «JPEG standard uniform quantization error modeling with applications to sequential and progressive operation modes» (en anglès). Journal of Electronic Imaging, 10, 2, 01-04-2001, pàg. 475. DOI: 10.1117/1.1344592. ISSN: 1017-9909.