JPEG. Algorisme de compressió

Hola de nou! Vaig trobar aquest article escrit el maig del 2019. Aquesta és la continuació d'una sèrie d'articles sobre WAVE i JPEG, aquí primer. Aquesta publicació inclourà informació sobre l'algorisme de codificació d'imatges i el format en si mateix.

Un pessic d'història

Una cullerada d'article de la Viquipèdia:

JPEG (Joint Photographic Experts Group) és un dels formats de gràfics ràster populars utilitzats per emmagatzemar fotografies i imatges similars.

Aquest estàndard va ser desenvolupat pel Joint Photographic Experts Group l'any 1991 per a una compressió eficient d'imatges.

Com passen les imatges de raw a JPEG?

Algunes persones pensen que les imatges JPEG són dades en brut comprimides mitjançant el mètode Huffman, però això no és cert. Abans de controlar la compressió, les dades recorren un llarg camí.

Primer, el model de color es canvia de RGB a YCbCr. Fins i tot hi ha un algorisme especial per a això: aquí. No es toca Y, ja que és responsable de la brillantor, i el seu canvi es notarà.

El primer que cal fer amb la imatge és "aprimament" (submostreig). És fàcil d'entendre: es pren una matriu de píxels de 2x2, després es pren Cb i Cr: els valors mitjans de cadascun dels components YCbCr d'aquests 4 píxels. Tan, vam guanyar 6 bytes, en lloc de 4 Y, 4 Cb, 4 Cr tenim 4 Y i els mateixos Cb i Cr per a cadascun d'ells (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). Fins i tot a escala 2x2, la compressió amb pèrdues amb una relació de compressió de 2:1 sona sòlida. Això s'aplica a tota la imatge. I així, van baixar la meitat de la mida. I aquesta tècnica la podem utilitzar gràcies a la nostra percepció del color. Una persona notarà fàcilment una diferència de brillantor, però no de color, si es fa una mitjana sobre un petit bloc de píxels. L'aprimament també es pot fer en línia, 4 píxels horitzontalment i verticalment. La primera opció s'utilitza més sovint. Si la qualitat de la imatge és important, no es duu a terme en absolut.
Una il·lustració visual de l'aprimament (Habr no em va permetre inserir un gif) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

La part principal de la preparació

Dkp

Ara ve la part més difícil i necessària. La imatge sencera es divideix en blocs de 8x8 (s'utilitza el farciment si la resolució no és múltiple del costat del bloc).

Ara aplica a cada bloc DCT (Transformació discreta del cosinus). En aquesta part, tot el que no és necessari es treu de la imatge. Amb DCT, cal entendre si un bloc determinat (8×8) descriu alguna part monòtona de la imatge: el cel, la paret; o conté una estructura complexa (cabells, símbols, etc.). És lògic que 64 píxels de color similar es puguin descriure amb només 1, perquè la mida del bloc ja es coneix. Tant per la compressió: 64 a 1.

DCT converteix el bloc en un espectre i, quan les lectures canvien bruscament, el coeficient esdevé positiu i com més nítida sigui la transició, més alta serà la sortida. Quan el coeficient és més alt, la imatge mostra transicions clares en color i brillantor, on és més baix: canvis febles (suauts) en els valors dels components YCbCr del bloc.

Quantització

La configuració de compressió ja s'ha aplicat aquí. Cadascun dels coeficients de cadascuna de les matrius 8x8 es divideix per un nombre determinat. Si no reduireu la qualitat de la imatge després de totes les seves modificacions, el divisor hauria de ser un. Si la memòria que ocupa aquesta foto és més important per a vostè, aleshores el divisor serà més gran que 1 i el quocient s'arrodonirà. Resulta que després d'arrodonir sovint acabes amb molts zeros.

La quantificació es fa per crear la possibilitat d'una compressió encara més gran. Aquí teniu el que sembla amb l'exemple de quantificació del gràfic y = sin(x):

JPEG. Algorisme de compressió

Compressió

Primer passem per la matriu en un patró en zig-zag:

JPEG. Algorisme de compressió

Obtenim una matriu unidimensional amb nombres. Veiem que hi ha molts zeros, es poden eliminar. Per fer-ho, en comptes d'una seqüència de molts zeros, introduïm 1 zero i després un número que indica el seu nombre en la seqüència. D'aquesta manera, podeu restablir a 1/3 de la mida de tota la matriu. I després simplement comprimim aquesta matriu utilitzant el mètode Huffman i l'escriurem al fitxer mateix.

On s'utilitza

A tot arreu. Igual que PNG, JPEG s'utilitza en càmeres, sistemes operatius (com a logotips d'empresa, icones d'aplicacions, miniatures) i en totes les àrees possibles on les imatges s'han d'emmagatzemar de manera eficient.

Sortida

De moment, el coneixement sobre JPEG és valuós només per a finalitats educatives, perquè ja està integrat a tot arreu i optimitzat per grans grups de persones, però el granit de la ciència encara és saborós.

Fonts

Article sobre YCbCr a la Viquipèdia
Article de la Viquipèdia sobre JPEG
Una mica sobre la PrEP de la publicació de Pikabu
Article de la Viquipèdia sobre PrEP

Font: www.habr.com

Afegeix comentari