Olá outra vez! Atopei este artigo escrito en maio de 2019. Esta é a continuación dunha serie de artigos sobre WAVE e JPEG, aquí
Un chisco de historia
Unha cullerada de artigo da Wikipedia:
JPEG (Joint Photographic Experts Group) é un dos formatos de gráficos raster populares usados para almacenar fotografías e imaxes similares.
Este estándar foi desenvolvido polo Joint Photographic Experts Group en 1991 para unha compresión de imaxe eficiente.
Como pasan as imaxes de raw a JPEG?
Algunhas persoas pensan que as imaxes JPEG son datos en bruto comprimidos mediante o método Huffman, pero isto non é certo. Antes da compresión de control, os datos percorren un longo camiño.
En primeiro lugar, o modelo de cor cámbiase de RGB a YCbCr. Incluso hai un algoritmo especial para isto -
O primeiro que hai que facer coa imaxe é "adelgazamento" (submostraxe). É doado de entender: tómase unha matriz de píxeles de 2x2, despois tómanse Cb e Cr: os valores medios de cada un dos compoñentes YCbCr destes 4 píxeles. Entón, gañamos 6 bytes, en lugar de 4 Y, 4 Cb, 4 Cr obtemos 4 Y e os mesmos Cb e Cr para cada un deles (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). Incluso a escala 2x2, a compresión con perdas cunha relación de compresión de 2:1 soa sólida. Isto aplícase a toda a imaxe. E así - caeron a metade do tamaño. E podemos utilizar esta técnica grazas á nosa percepción da cor. Unha persoa notará facilmente unha diferenza de brillo, pero non de cor, se se fai unha media sobre un pequeno bloque de píxeles. O adelgazamento tamén se pode facer en liña, 4 píxeles horizontal e vertical. A primeira opción úsase con máis frecuencia. Se a calidade da imaxe é importante, a decimación non se realiza en absoluto.
Unha ilustración visual do adelgazamento (Habr non me permitiu inserir un gif) -
A parte principal da preparación
Dkp
Agora vén a parte máis difícil e necesaria. Toda a imaxe divídese en bloques de 8x8 (utilízase o recheo se a resolución non é múltiplo do lado do bloque).
Agora aplícase a cada bloque DCT (Transformación coseno discreta). Nesta parte, todo o innecesario sácase da imaxe. Usando DCT, cómpre comprender se un determinado bloque (8×8) describe algunha parte monótona da imaxe: o ceo, a parede; ou contén estrutura complexa (pelo, símbolos, etc.). É lóxico que 64 píxeles de cor semellante poidan ser descritos por só 1, porque xa se coñece o tamaño do bloque. Tanto para a compresión: 64 a 1.
DCT converte o bloque nun espectro e, cando as lecturas cambian bruscamente, o coeficiente faise positivo e canto máis nítida sexa a transición, maior será a saída. Cando o coeficiente é maior, a imaxe mostra transicións claras de cor e brillo, onde é menor: cambios débiles (suave) nos valores dos compoñentes YCbCr do bloque.
Cuantización
A configuración de compresión xa está aplicada aquí. Cada un dos coeficientes de cada unha das matrices 8x8 divídese por un número determinado. Se non reduces a calidade da imaxe despois de todas as súas modificacións, entón o divisor debería ser un. Se a memoria que ocupa esta foto é máis importante para ti, entón o divisor será maior que 1 e o cociente será redondeado. Resulta que despois de redondear moitas veces acabas con moitos ceros.
A cuantificación faise para crear a posibilidade dunha compresión aínda maior. Aquí tes como se ve usando o exemplo de cuantificación da gráfica y = sen(x):
Compresión
Primeiro pasamos pola matriz en zig-zag:
Obtemos unha matriz unidimensional con números. Vemos que hai moitos ceros nel, pódense eliminar. Para iso, en lugar dunha secuencia de moitos ceros, introducimos 1 cero e despois un número que indica o seu número na secuencia. Deste xeito, pode restablecer a 1/3 do tamaño de toda a matriz. E entón simplemente comprimimos esta matriz usando o método Huffman e escribimos no propio ficheiro.
Onde se usa
En todas partes. Do mesmo xeito que PNG, JPEG utilízase en cámaras, sistemas operativos (como logotipos de empresas, iconas de aplicacións, miniaturas) e en todas as áreas posibles nas que as imaxes deben almacenarse de forma eficiente.
Saída
Polo momento, o coñecemento sobre JPEG é valioso só para fins educativos, porque xa está construído en todas partes e optimizado por grandes grupos de persoas, pero o granito da ciencia aínda é saboroso.
Fontes
Fonte: www.habr.com