JPEG - JPEG

JPEG
Formato JPEG logo.svg
Felis silvestris silvestris pequena diminuição gradual da qualidade.png
Uma foto de um gato selvagem europeu com a qualidade aumentando, da esquerda para a direita
Extensão de nome de arquivo .jpg, .jpeg, .jpe
.jif, .jfif,.jfi
Tipo de mídia da Internet
imagem / jpeg
Digite o código JPEG
Identificador de tipo uniforme (UTI) public.jpeg
número mágico ff d8 ff
Desenvolvido por Joint Photographic Experts Group , IBM , Mitsubishi Electric , AT&T , Canon Inc. , ITU-T Study Group 16
lançamento inicial 18 de setembro de 1992 ; 29 anos atrás ( 18/09/1992 )
Tipo de formato Formato de compressão de imagem com perdas
Padrão ITU-T T.81, ITU-T T.83, ITU-T T.84, ITU-T T.86, ISO / IEC 10918
Local na rede Internet www .jpeg .org / jpeg /
Compressão JPEG continuamente variado (entre Q = 100 e Q = 1) para uma tomografia computadorizada abdominal

JPEG ou JPG ( / p ɛ do ɡ / Jay PEG ) é um método vulgarmente utilizado de compressão com perdas de imagens digitais , em particular para aquelas imagens produzidas por fotografia digital . O grau de compressão pode ser ajustado, permitindo uma compensação selecionável entre o tamanho do armazenamento e a qualidade da imagem . O JPEG normalmente atinge compactação 10: 1 com pouca perda perceptível na qualidade da imagem. Desde a sua introdução em 1992, JPEG tem sido o padrão de compressão de imagem mais usado no mundo e o formato de imagem digital mais amplamente usado , com vários bilhões de imagens JPEG produzidas todos os dias a partir de 2015.

O termo "JPEG" é um inicialismo / acrônimo para Joint Photographic Experts Group , que criou o padrão em 1992. A base para JPEG é a transformada discreta de cosseno (DCT), uma técnica de compressão de imagem com perdas que foi proposta pela primeira vez por Nasir Ahmed em 1972. JPEG foi o grande responsável pela proliferação de imagens e fotos digitais na Internet e, posteriormente, nas mídias sociais .

A compactação JPEG é usada em vários formatos de arquivo de imagem . JPEG / Exif é o formato de imagem mais comum usado por câmeras digitais e outros dispositivos de captura de imagem fotográfica; junto com JPEG / JFIF , é o formato mais comum para armazenar e transmitir imagens fotográficas na World Wide Web . Essas variações de formato geralmente não são diferenciadas e são simplesmente chamadas de JPEG.

O tipo de mídia MIME para JPEG é imagem / jpeg , exceto em versões mais antigas do Internet Explorer , que fornece um tipo MIME de imagem / pjpeg ao enviar imagens JPEG. Os arquivos JPEG geralmente têm uma extensão de nome de arquivo.jpg ou .jpeg. JPEG / JFIF suporta um tamanho máximo de imagem de 65.535 × 65.535 pixels, portanto, até 4 gigapixels. Em 2000, o grupo JPEG introduziu um formato que pretendia ser um sucessor, JPEG 2000 , mas não foi capaz de substituir o JPEG original como o padrão de imagem dominante.

História

Fundo

A especificação JPEG original publicada em 1992 implementa processos de vários documentos de pesquisa anteriores e patentes citadas pelo CCITT (agora ITU-T , via ITU-T Study Group 16 ) e Joint Photographic Experts Group. A base principal para o algoritmo de compressão com perdas do JPEG é a transformada discreta de cosseno (DCT), que foi proposta pela primeira vez por Nasir Ahmed como uma técnica de compressão de imagem em 1972. Ahmed desenvolveu um algoritmo DCT prático com T. Natarajan da Kansas State University e KR Rao de a Universidade do Texas em Arlington em 1973. Seu artigo seminal de 1974 é citado na especificação JPEG, junto com vários trabalhos de pesquisa posteriores que fizeram mais trabalho em DCT, incluindo um artigo de 1977 de Wen-Hsiung Chen, CH Smith e SC Fralick que descreveu um algoritmo DCT rápido, bem como um artigo de 1978 de NJ Narasinha e SC Fralick, e um artigo de 1984 de BG Lee. A especificação também cita um artigo de 1984 de Wen-Hsiung Chen e WK Pratt como uma influência em seu algoritmo de quantização , e o artigo de David A. Huffman de 1952 para seu algoritmo de codificação de Huffman .

A especificação JPEG cita patentes de várias empresas. As seguintes patentes forneceram a base para seu algoritmo de codificação aritmética .

  • IBM
    • Patente dos EUA 4.652.856 - 4 de fevereiro de 1986 - Kottappuram MA Mohiuddin e Jorma J. Rissanen - Código aritmético multi-alfabeto livre de multiplicação
    • Patente dos EUA 4.905.297 - 27 de fevereiro de 1990 - G. Langdon, JL Mitchell, WB Pennebaker e Jorma J. Rissanen - Codificador aritmético e sistema decodificador
    • Patente US 4.935.882 - 19 de junho de 1990 - WB Pennebaker e JL Mitchell - Adaptação de probabilidade para codificadores aritméticos
  • Mitsubishi Electric
    • JP H02202267  ( 1021672 ) - 21 de janeiro de 1989 - Toshihiro Kimura, Shigenori Kino, Fumitaka Ono, Masayuki Yoshida - Sistema de codificação
    • JP H03247123  ( 2-46275 ) - 26 de fevereiro de 1990 - Fumitaka Ono, Tomohiro Kimura, Masayuki Yoshida e Shigenori Kino - Aparelho de codificação e método de codificação

A especificação JPEG também cita três outras patentes da IBM. Outras empresas citadas como detentoras de patentes incluem AT&T (duas patentes) e Canon Inc. Ausente da lista está a Patente dos EUA 4.698.672 , registrada por Wen-Hsiung Chen e Daniel J. Klenke da Compression Labs em outubro de 1986. A patente descreve uma patente baseada em DCT algoritmo de compressão de imagem, e mais tarde seria uma causa de controvérsia em 2002 (veja Controvérsia sobre patentes abaixo). No entanto, a especificação JPEG citou dois artigos de pesquisa anteriores de Wen-Hsiung Chen, publicados em 1977 e 1984.

Padrão JPEG

"JPEG" significa Joint Photographic Experts Group, o nome do comitê que criou o padrão JPEG e também outros padrões de codificação de imagens estáticas. O "Conjunto" significava ISO TC97 WG8 e CCITT SGVIII. Fundado em 1986, o grupo desenvolveu o padrão JPEG no final dos anos 1980. Entre as várias técnicas de codificação de transformadas que examinaram, eles selecionaram a transformada discreta de cosseno (DCT), por ser de longe a técnica de compressão prática mais eficiente. O grupo publicou o padrão JPEG em 1992.

Em 1987, o ISO TC 97 tornou-se ISO / IEC JTC1 e, em 1992, CCITT tornou-se ITU-T. Atualmente no lado JTC1, JPEG é um dos dois subgrupos do Comitê Técnico Conjunto 1 do ISO / IEC , Subcomitê 29, Grupo de Trabalho 1 ( ISO / IEC JTC 1 / SC 29 / WG 1) - intitulado como Codificação de imagens estáticas . No lado ITU-T, ITU-T SG16 é o respectivo corpo. O JPEG Group original foi organizado em 1986, emitindo o primeiro padrão JPEG em 1992, que foi aprovado em setembro de 1992 como ITU-T Recommendation T.81 e, em 1994, como ISO / IEC 10918-1 .

O padrão JPEG especifica o codec , que define como uma imagem é compactada em um fluxo de bytes e descompactada de volta em uma imagem, mas não o formato de arquivo usado para conter esse fluxo. Os padrões Exif e JFIF definem os formatos de arquivo comumente usados ​​para intercâmbio de imagens compactadas em JPEG.

Os padrões JPEG são formalmente chamados de Tecnologia da informação - compactação digital e codificação de imagens estáticas de tom contínuo . ISO / IEC 10918 consiste nas seguintes partes:

Compressão digital e codificação de imagens estáticas de tom contínuo - Partes
Papel Padrão ISO / IEC ITU-T Rec. Primeira data de lançamento ao público Última emenda Título Descrição
Parte 1 ISO / IEC 10918-1: 1994 T.81 (09/92) 18 de setembro de 1992 Requisitos e diretrizes
Parte 2 ISO / IEC 10918-2: 1995 T.83 (11/94) 11 de novembro de 1994 Teste de conformidade Regras e verificações de conformidade do software (para a Parte 1).
Parte 3 ISO / IEC 10918-3: 1997 T.84 (07/96) 3 de julho de 1996 1 de abril de 1999 Extensões Conjunto de extensões para melhorar a Parte 1, incluindo o Still Picture Interchange File Format (SPIFF).
Parte 4 ISO / IEC 10918-4: 1999 T.86 (06/98) 18 de junho de 1998 29 de junho de 2012 Registro de perfis JPEG, perfis SPIFF, tags SPIFF, espaços de cores SPIFF, marcadores APPn, tipos de compactação SPIFF e Autoridades de registro (REGAUT) métodos para registrar alguns dos parâmetros usados ​​para estender JPEG
Parte 5 ISO / IEC 10918-5: 2013 T.871 (05/11) 14 de maio de 2011 Formato de intercâmbio de arquivos JPEG (JFIF) Um formato popular que tem sido o formato de arquivo de fato para imagens codificadas pelo padrão JPEG. Em 2009, o Comitê JPEG estabeleceu formalmente um Grupo Ad Hoc para padronizar o JFIF como JPEG Parte 5.
Parte 6 ISO / IEC 10918-6: 2013 T.872 (06/12) Junho de 2012 Aplicação a sistemas de impressão Especifica um subconjunto de recursos e ferramentas de aplicativo para o intercâmbio de imagens codificadas de acordo com a ISO / IEC 10918-1 para impressão.
Parte 7 ISO / IEC 10918-7: 2019 T.873 (19/05) Maio de 2019 Compressão digital e codificação de imagens estáticas de tom contínuo Fornece software de referência para a tecnologia de codificação especificada na Recomendação ITU-T T.81 - ISO / IEC 10918-1. Embora as implementações de referência também forneçam um codificador, o teste de conformidade de seu processo de codificação está além do escopo desta Especificação.

Ecma International TR / 98 especifica o JPEG File Interchange Format (JFIF); a primeira edição foi publicada em junho de 2009.

Controvérsia de patentes

Em 2002, a Forgent Networks afirmou que possuía e faria cumprir os direitos de patente sobre a tecnologia JPEG, decorrentes de uma patente que foi depositada em 27 de outubro de 1986 e concedida em 6 de outubro de 1987: Patente dos EUA 4.698.672 por Wen- da Compression Labs. Hsiung Chen e Daniel J. Klenke. Embora a Forgent não possuísse o Compression Labs na época, Chen posteriormente vendeu o Compression Labs para a Forgent, antes de Chen trabalhar para a Cisco . Isso levou a Forgent a adquirir a propriedade da patente. O anúncio da Forgent em 2002 criou um furor que lembra as tentativas da Unisys de reivindicar seus direitos sobre o padrão de compressão de imagem GIF.

O comitê JPEG investigou as reivindicações de patentes em 2002 e foi de opinião que elas foram invalidadas pelo estado da técnica , uma visão compartilhada por vários especialistas. A patente descreve um algoritmo de compressão de imagem baseado na transformada discreta de cosseno (DCT), uma técnica de compressão de imagem com perdas originada de um artigo de 1974 de Nasir Ahmed, T. Natarajan e KR Rao . Wen-Hsiung Chen desenvolveu ainda mais sua técnica DCT, descrevendo um algoritmo DCT rápido em um artigo de 1977 com CH Smith e SC Fralick. A especificação JPEG de 1992 cita o artigo de Ahmed de 1974 e o artigo de Chen de 1977 para seu algoritmo DCT, bem como um artigo de 1984 de Chen e WK Pratt para seu algoritmo de quantização . A Compression Labs foi fundada por Chen e foi a primeira empresa a comercializar a tecnologia DCT. Quando Chen registrou sua patente para um algoritmo de compressão de imagem baseado em DCT com Klenke em 1986, a maior parte do que mais tarde se tornaria o padrão JPEG já havia sido formulado na literatura anterior. O representante do JPEG, Richard Clark, também afirmou que o próprio Chen participava de um dos comitês do JPEG, mas Forgent negou essa afirmação.

Entre 2002 e 2004, a Forgent conseguiu obter cerca de US $ 105 milhões licenciando sua patente para cerca de 30 empresas. Em abril de 2004, a Forgent processou 31 outras empresas para impor pagamentos adicionais de licença. Em julho do mesmo ano, um consórcio de 21 grandes empresas de informática entrou com uma ação judicial, com o objetivo de invalidar a patente. Além disso, a Microsoft lançou um processo separado contra a Forgent em abril de 2005. Em fevereiro de 2006, o Escritório de Marcas e Patentes dos Estados Unidos concordou em reexaminar a patente JPEG da Forgent a pedido da Public Patent Foundation . Em 26 de maio de 2006, o USPTO considerou a patente inválida com base na técnica anterior. O USPTO também descobriu que Forgent sabia sobre a técnica anterior, mas intencionalmente evitou contar ao Escritório de Patentes. Isso torna qualquer apelo para restabelecer a patente altamente improvável de ter sucesso.

Forgent também possui uma patente semelhante concedida pelo European Patent Office em 1994, embora não esteja claro o quão exequível é.

Em 27 de outubro de 2006, o prazo de 20 anos da patente dos EUA parecia ter expirado e, em novembro de 2006, a Forgent concordou em abandonar a aplicação de reivindicações de patentes contra o uso do padrão JPEG.

O comitê JPEG tem como um de seus objetivos explícitos que seus padrões (em particular seus métodos de linha de base) sejam implementáveis ​​sem o pagamento de taxas de licença, e eles garantiram os direitos de licença apropriados para seu padrão JPEG 2000 de mais de 20 grandes organizações.

A partir de agosto de 2007, outra empresa, a Global Patent Holdings, LLC alegou que sua patente ( Patente dos EUA 5.253.341 ) emitida em 1993 foi infringida pelo download de imagens JPEG em um site ou por e-mail. Se não for invalidada, esta patente pode ser aplicada a qualquer site que exiba imagens JPEG. A patente estava sendo reexaminada pelo US Patent and Trademark Office de 2000 a 2007; em julho de 2007, o Patent Office revogou todas as reivindicações originais da patente, mas concluiu que uma reivindicação adicional proposta pela Global Patent Holdings (reivindicação 17) era válida. A Global Patent Holdings então entrou com uma série de ações judiciais com base na reivindicação 17 de sua patente.

Em seus dois primeiros processos após o reexame, ambos movidos em Chicago, Illinois, a Global Patent Holdings processou os Green Bay Packers , CDW , Motorola , Apple , Orbitz , Officemax , Caterpillar , Kraft e Peapod como réus. Um terceiro processo foi aberto em 5 de dezembro de 2007, no sul da Flórida, contra ADT Security Services , AutoNation , Florida Crystals Corp., HearUSA, MovieTickets.com , Ocwen Financial Corp. e Tire Kingdom , e um quarto processo em 8 de janeiro de 2008, no sul da Flórida contra o Boca Raton Resort & Club . Um quinto processo foi aberto contra a Global Patent Holdings em Nevada. Esse processo foi movido pela Zappos.com , Inc., que foi supostamente ameaçada pela Global Patent Holdings, e buscou uma declaração judicial de que a patente '341 é inválida e não foi infringida.

A Global Patent Holdings também usou a patente '341 para processar ou ameaçar os críticos declarados de patentes de software, incluindo Gregory Aharonian e o operador anônimo de um blog conhecido como " Patent Troll Tracker ". Em 21 de dezembro de 2007, o advogado de patentes Vernon Francissen de Chicago pediu ao US Patent and Trademark Office para reexaminar a única reivindicação restante da patente '341 com base na nova técnica anterior.

Em 5 de março de 2008, o Escritório de Patentes e Marcas dos Estados Unidos concordou em reexaminar a patente '341, descobrindo que a nova técnica levantava novas questões substanciais em relação à validade da patente. À luz do reexame, os infratores acusados ​​em quatro dos cinco processos pendentes entraram com moções para suspender (suspender) seus casos até a conclusão da revisão da patente '341 pelo Escritório de Patentes e Marcas dos Estados Unidos. Em 23 de abril de 2008, um juiz que presidia os dois processos em Chicago, Illinois, concedeu as moções nesses casos. Em 22 de julho de 2008, o Escritório de Patentes emitiu a primeira "Ação de Escritório" do segundo reexame, declarando a reivindicação inválida com base em dezenove fundamentos separados. Em 24 de novembro de 2009, um Certificado de Reexame foi emitido cancelando todas as reivindicações.

Começando em 2011 e continuando no início de 2013, uma entidade conhecida como Princeton Digital Image Corporation, com sede no leste do Texas, começou a processar um grande número de empresas por suposta violação da patente dos EUA 4.813.056 . Princeton afirma que o padrão de compressão de imagem JPEG infringe a patente '056 e processou um grande número de sites, varejistas, fabricantes e revendedores de câmeras e dispositivos. A patente foi originalmente de propriedade e atribuída à General Electric. A patente expirou em dezembro de 2007, mas Princeton processou um grande número de empresas por "infração passada" desta patente. (De acordo com as leis de patentes dos EUA, um proprietário de patente pode processar por "violação passada" até seis anos antes de entrar com um processo, então Princeton poderia teoricamente ter continuado processando empresas até dezembro de 2013.) Em março de 2013, Princeton tinha processos pendentes em Nova York e Delaware contra mais de 55 empresas. O envolvimento da General Electric no processo é desconhecido, embora os registros do tribunal indiquem que ela atribuiu a patente a Princeton em 2009 e retém certos direitos sobre a patente.

Uso típico

O algoritmo de compactação JPEG opera da melhor forma em fotografias e pinturas com variações suaves de tom e cor. É melhor usado para imagens estáticas coloridas e em tons de cinza, mas não para imagens binárias . Para uso na web, onde reduzir a quantidade de dados usados ​​para uma imagem é importante para uma apresentação responsiva, os benefícios da compactação do JPEG o tornam popular. JPEG / Exif também é o formato mais comum salvo por câmeras digitais.

No entanto, JPEG não é adequado para desenhos de linha e outros gráficos textuais ou icônicos, onde os contrastes nítidos entre pixels adjacentes podem causar artefatos perceptíveis. Essas imagens são melhor salvas em um formato gráfico sem perdas , como TIFF , GIF ou PNG , e embora o padrão JPEG inclua um modo de codificação sem perdas, o modo não é compatível com muitos produtos devido à inferioridade de seu esquema de compressão em comparação com outros formatos. A ISO desenvolveu seu próprio formato de arquivo denominado JPEG-LS para esse fim.

Como o JPEG é um método de compactação com perdas, o que reduz a fidelidade da imagem, ele é inadequado para a reprodução exata de dados de imagem (como alguns aplicativos de imagens médicas e científicas e certos trabalhos técnicos de processamento de imagens ). Os arquivos JPEG também não são adequados para várias edições, pois parte da qualidade da imagem é perdida cada vez que a imagem é recompactada - consulte perda de geração digital para obter detalhes. Para evitar a perda de informações da imagem durante a edição sequencial e repetitiva, a primeira edição pode ser salva em um formato sem perdas, posteriormente editada nesse formato e, finalmente, publicada como JPEG para distribuição.

Compressão JPEG

JPEG usa uma forma de compressão com perdas baseada na transformada discreta de cosseno (DCT). Esta operação matemática converte cada quadro / campo da fonte de vídeo do domínio espacial (2D) para o domínio da frequência (também conhecido como domínio de transformação). Um modelo perceptivo baseado vagamente no sistema psicovisual humano descarta informações de alta frequência, ou seja, transições nítidas em intensidade e matiz de cor . No domínio da transformação, o processo de redução da informação é denominado quantização. Em termos mais simples, a quantização é um método para reduzir de forma otimizada uma grande escala numérica (com diferentes ocorrências de cada número) em uma menor, e o domínio de transformação é uma representação conveniente da imagem porque os coeficientes de alta frequência, que contribuem menos para o quadro geral do que outros coeficientes, são valores caracteristicamente pequenos com alta compressibilidade. Os coeficientes quantizados são então sequenciados e compactados sem perdas no fluxo de bits de saída . Quase todas as implementações de software de JPEG permitem o controle do usuário sobre a taxa de compressão (bem como outros parâmetros opcionais), permitindo que o usuário troque a qualidade da imagem por um tamanho de arquivo menor. Em aplicativos incorporados (como miniDV, que usa um esquema de compressão DCT semelhante), os parâmetros são pré-selecionados e fixos para o aplicativo.

O método de compactação geralmente apresenta perdas, o que significa que algumas informações da imagem original são perdidas e não podem ser restauradas, possivelmente afetando a qualidade da imagem. Há um modo opcional sem perdas definido no padrão JPEG. No entanto, esse modo não é amplamente compatível com os produtos.

Também existe um formato JPEG progressivo entrelaçado , no qual os dados são compactados em várias passagens de detalhes progressivamente mais altos. Isso é ideal para imagens grandes que serão exibidas durante o download em uma conexão lenta, permitindo uma visualização razoável após receber apenas uma parte dos dados. No entanto, o suporte para JPEGs progressivos não é universal. Quando JPEGs progressivos são recebidos por programas que não os suportam (como versões do Internet Explorer anteriores ao Windows 7 ), o software exibe a imagem somente depois de seu download completo.

Edição sem perdas

Uma série de alterações em uma imagem JPEG pode ser realizada sem perdas (ou seja, sem recompressão e a perda de qualidade associada), desde que o tamanho da imagem seja um múltiplo de 1 bloco MCU (unidade mínima codificada) (geralmente 16 pixels em ambas as direções, para subamostragem de croma 4: 2: 0 ). Os utilitários que implementam isso incluem:

  • jpegtran e sua GUI, Jpegcrop.
  • IrfanView usando "JPG Lossless Crop (PlugIn)" e "JPG Lossless Rotation (PlugIn)", que requerem a instalação do plugin JPG_TRANSFORM.
  • FastStone Image Viewer usando "Lossless Crop to File" e "JPEG Lossless Rotate".
  • XnViewMP usando "transformações sem perda de JPEG".
  • O ACDSee oferece suporte à rotação sem perdas (mas não ao corte sem perdas) com sua opção "Forçar operações JPEG sem perdas".

Os blocos podem ser girados em incrementos de 90 graus, invertidos nos eixos horizontal, vertical e diagonal e movidos na imagem. Nem todos os blocos da imagem original precisam ser usados ​​na modificada.

As bordas superior e esquerda de uma imagem JPEG devem estar em um limite de bloco de 8 × 8 pixels, mas as bordas inferior e direita não precisam disso. Isso limita as possíveis operações de corte sem perdas e também evita inversões e rotações de uma imagem cuja borda inferior ou direita não se encontra em um limite de bloco para todos os canais (porque a borda terminaria na parte superior ou esquerda, onde - como mencionado - um limite de bloco é obrigatório).

Rotações onde a largura e altura da imagem não são múltiplos de 8 ou 16 (dependendo da subamostragem de croma), não são sem perdas. Girar essa imagem faz com que os blocos sejam recalculados, o que resulta em perda de qualidade.

Ao usar o corte sem perdas, se a parte inferior ou o lado direito da região de corte não estiver em um limite de bloco, o restante dos dados dos blocos parcialmente usados ​​ainda estarão presentes no arquivo cortado e podem ser recuperados. Também é possível transformar entre formatos de linha de base e progressivos sem qualquer perda de qualidade, pois a única diferença é a ordem em que os coeficientes são colocados no arquivo.

Além disso, várias imagens JPEG podem ser unidas sem perdas, desde que sejam salvas com a mesma qualidade e as bordas coincidam com os limites do bloco.

Arquivos JPEG

O formato de arquivo conhecido como "JPEG Interchange Format" (JIF) é especificado no Anexo B da norma. No entanto, esse formato de arquivo "puro" raramente é usado, principalmente por causa da dificuldade de programar codificadores e decodificadores que implementam totalmente todos os aspectos do padrão e por causa de certas deficiências do padrão:

  • Definição do espaço de cores
  • Registro de subamostragem de componente
  • Definição de proporção de pixel .

Vários padrões adicionais foram desenvolvidos para lidar com esses problemas. O primeiro deles, lançado em 1992, foi o JPEG File Interchange Format (ou JFIF), seguido nos últimos anos pelo formato de arquivo de imagem Exchangeable (Exif) e perfis de cores ICC . Ambos os formatos usam o layout de bytes JIF real, consistindo em marcadores diferentes , mas, além disso, empregam um dos pontos de extensão do padrão JIF, a saber, os marcadores de aplicativo : JFIF usa APP0, enquanto Exif usa APP1. Dentro desses segmentos do arquivo que foram deixados para uso futuro no padrão JIF e não são lidos por ele, esses padrões adicionam metadados específicos.

Assim, em alguns aspectos, JFIF é uma versão reduzida do padrão JIF em que especifica certas restrições (como não permitir todos os modos de codificação diferentes), enquanto em outras formas, é uma extensão de JIF devido ao metadados. A documentação para os estados do padrão JFIF original:

JPEG File Interchange Format é um formato de arquivo mínimo que permite que fluxos de bits JPEG sejam trocados entre uma ampla variedade de plataformas e aplicativos. Este formato mínimo não inclui nenhum dos recursos avançados encontrados na especificação TIFF JPEG ou em qualquer formato de arquivo específico do aplicativo. Nem deveria, pois o único propósito desse formato simplificado é permitir a troca de imagens compactadas em JPEG.

Os arquivos de imagem que empregam compactação JPEG são comumente chamados de "arquivos JPEG" e são armazenados em variantes do formato de imagem JIF. A maioria dos dispositivos de captura de imagem (como câmeras digitais) que produzem JPEG na verdade estão criando arquivos no formato Exif, o formato que a indústria de câmeras padronizou para o intercâmbio de metadados. Por outro lado, como o padrão Exif não permite perfis de cores, a maioria dos softwares de edição de imagem armazena JPEG no formato JFIF e também inclui o segmento APP1 do arquivo Exif para incluir os metadados de forma quase compatível; o padrão JFIF é interpretado com certa flexibilidade.

A rigor, os padrões JFIF e Exif são incompatíveis, pois cada um especifica que seu segmento marcador (APP0 ou APP1, respectivamente) apareça primeiro. Na prática, a maioria dos arquivos JPEG contém um segmento de marcador JFIF que precede o cabeçalho Exif. Isso permite que os leitores mais antigos manipulem corretamente o segmento JFIF do formato antigo, enquanto os leitores mais novos também decodificam o segmento Exif a seguir, sendo menos rigorosos em exigir que ele apareça primeiro.

Extensões de nome de arquivo JPEG

As extensões de nome de arquivo mais comuns para arquivos que empregam compactação JPEG são .jpge .jpeg, no entanto .jpe, .jfife .jiftambém são usadas. Também é possível que dados JPEG sejam incorporados em outros tipos de arquivo - arquivos codificados com TIFF geralmente incorporam uma imagem JPEG como uma miniatura da imagem principal; e os arquivos MP3 podem conter um JPEG da arte da capa na tag ID3v2 .

Perfil de cor

Muitos arquivos JPEG incorporam um perfil de cores ICC ( espaço de cores ). Perfis de cores comumente usados ​​incluem sRGB e Adobe RGB . Porque esses espaços de cor usar uma transformação não-linear, a faixa dinâmica de um arquivo JPEG de 8 bits é de cerca de 11 paradas ; veja a curva gama .

Sintaxe e estrutura

Uma imagem JPEG consiste em uma sequência de segmentos , cada um começando com um marcador , cada um dos quais começando com um byte 0xFF, seguido por um byte indicando o tipo de marcador. Alguns marcadores consistem apenas nesses dois bytes; outros são seguidos por dois bytes (alto e baixo), indicando o comprimento dos dados de carga útil específicos do marcador que se seguem. (O comprimento inclui os dois bytes para o comprimento, mas não os dois bytes para o marcador.) Alguns marcadores são seguidos por dados codificados por entropia ; o comprimento de tal marcador não inclui os dados codificados por entropia. Observe que bytes 0xFF consecutivos são usados ​​como bytes de preenchimento para fins de preenchimento , embora esse preenchimento de bytes de preenchimento deva ocorrer apenas para marcadores imediatamente após os dados de varredura codificados por entropia (consulte a seção de especificação JPEG B.1.1.2 e E.1.2 para obter detalhes; especificamente "Em todos os casos em que os marcadores são acrescentados após os dados compactados, bytes de preenchimento 0xFF opcionais podem preceder o marcador").

Dentro dos dados codificados por entropia, após qualquer byte 0xFF, um byte 0x00 é inserido pelo codificador antes do próximo byte, de modo que não pareça haver um marcador onde nenhum é pretendido, evitando erros de enquadramento. Os decodificadores devem pular este byte 0x00. Essa técnica, chamada de preenchimento de bytes (consulte a seção F.1.2.3 de especificação de JPEG), é aplicada apenas aos dados codificados por entropia, não aos dados de carga útil do marcador. Observe, entretanto, que os dados codificados por entropia têm alguns marcadores próprios; especificamente os marcadores de Reset (0xD0 a 0xD7), que são usados ​​para isolar pedaços independentes de dados codificados por entropia para permitir a decodificação paralela, e os codificadores são livres para inserir esses marcadores de Reset em intervalos regulares (embora nem todos os codificadores façam isso).

Marcadores JPEG comuns
Nome curto Bytes Carga útil Nome Comentários
ENTÃO EU 0xFF, 0xD8 Nenhum Início da imagem
SOF0 0xFF, 0xC0 tamanho variável Início do quadro (DCT de linha de base) Indica que este é um JPEG de linha de base baseado em DCT e especifica a largura, altura, número de componentes e subamostragem de componentes (por exemplo, 4: 2: 0).
SOF2 0xFF, 0xC2 tamanho variável Início do quadro (DCT progressivo) Indica que este é um JPEG progressivo baseado em DCT e especifica a largura, altura, número de componentes e subamostragem de componentes (por exemplo, 4: 2: 0).
DHT 0xFF, 0xC4 tamanho variável Definir Tabela (s) Huffman Especifica uma ou mais tabelas Huffman.
DQT 0xFF, 0xDB tamanho variável Definir Tabela (s) de Quantização Especifica uma ou mais tabelas de quantização.
DRI 0xFF, 0xDD 4 bytes Definir intervalo de reinicialização Especifica o intervalo entre os marcadores RST n , em Minimum Coded Units (MCUs). Este marcador é seguido por dois bytes indicando o tamanho fixo para que possa ser tratado como qualquer outro segmento de tamanho variável.
SOS 0xFF, 0xDA tamanho variável Início da varredura Começa uma varredura de cima para baixo da imagem. Em imagens DCT JPEG de linha de base, geralmente há uma única varredura. As imagens DCT JPEG progressivas geralmente contêm várias digitalizações. Este marcador especifica qual fatia de dados ele conterá e é imediatamente seguido por dados codificados por entropia.
RST n 0xFF, 0xD n ( n = 0..7) Nenhum Reiniciar Inserido a cada r macroblocos, onde r é o intervalo de reinicialização definido por um marcador DRI. Não usado se não houver marcador DRI. Os três bits mais baixos do código do marcador variam em valor de 0 a 7.
APP n 0xFF, 0xE n tamanho variável Específico do aplicativo Por exemplo, um arquivo Exif JPEG usa um marcador APP1 para armazenar metadados, dispostos em uma estrutura estritamente baseada em TIFF .
COM 0xFF, 0xFE tamanho variável Comente Contém um comentário de texto.
EOI 0xFF, 0xD9 Nenhum Fim da imagem

Existem outros marcadores de início de quadro que introduzem outros tipos de codificações JPEG.

Como vários fornecedores podem usar o mesmo tipo de marcador APP n , os marcadores específicos do aplicativo geralmente começam com um nome padrão ou de fornecedor (por exemplo, "Exif" ou "Adobe") ou alguma outra sequência de identificação.

Em um marcador de reinicialização, as variáveis ​​preditoras de bloco a bloco são redefinidas e o fluxo de bits é sincronizado com um limite de byte. Os marcadores de reinicialização fornecem meios de recuperação após erro de fluxo de bits, como transmissão por uma rede não confiável ou corrupção de arquivo. Uma vez que as execuções de macroblocos entre marcadores de reinicialização podem ser decodificadas de forma independente, essas execuções podem ser decodificadas em paralelo.

Exemplo de codec JPEG

Embora um arquivo JPEG possa ser codificado de várias maneiras, mais comumente isso é feito com a codificação JFIF. O processo de codificação consiste em várias etapas:

  1. A representação das cores na imagem é convertida em Y′C B C R , consistindo em um componente luma (Y '), representando o brilho, e dois componentes croma , (C B e C R ), representando a cor. Esta etapa às vezes é ignorada.
  2. A resolução dos dados de croma é reduzida, geralmente por um fator de 2 ou 3. Isso reflete o fato de que o olho é menos sensível a detalhes finos de cor do que a detalhes finos de brilho.
  3. A imagem é dividida em blocos de 8 × 8 pixels e, para cada bloco, cada um dos dados Y, C B e C R passa pela transformação discreta de cosseno (DCT). Um DCT é semelhante a uma transformada de Fourier no sentido de que produz uma espécie de espectro de frequência espacial.
  4. As amplitudes dos componentes da frequência são quantizadas. A visão humana é muito mais sensível a pequenas variações de cor ou brilho em grandes áreas do que à intensidade das variações de brilho de alta frequência. Portanto, as magnitudes dos componentes de alta frequência são armazenadas com uma precisão menor do que os componentes de baixa frequência. A configuração de qualidade do codificador (por exemplo, 50 ou 95 em uma escala de 0–100 na biblioteca do Independent JPEG Group) afeta até que ponto a resolução de cada componente de frequência é reduzida. Se uma configuração de qualidade excessivamente baixa for usada, os componentes de alta frequência serão totalmente descartados.
  5. Os dados resultantes para todos os blocos de 8 × 8 são compactados posteriormente com um algoritmo sem perdas, uma variante da codificação de Huffman .

O processo de decodificação inverte essas etapas, exceto a quantização por ser irreversível. No restante desta seção, os processos de codificação e decodificação são descritos em mais detalhes.

Codificação

Muitas das opções do padrão JPEG não são comumente usadas e, conforme mencionado acima, a maioria dos softwares de imagem usa o formato JFIF mais simples ao criar um arquivo JPEG, que, entre outras coisas, especifica o método de codificação. Aqui está uma breve descrição de um dos métodos mais comuns de codificação quando aplicado a uma entrada que tem 24 bits por pixel (oito de cada vermelho, verde e azul). Esta opção específica é um método de compactação de dados com perdas .

Transformação do espaço de cores

Primeiro, a imagem deve ser convertida de RGB em um espaço de cores diferente chamado Y′C B C R (ou, informalmente, YCbCr). Possui três componentes Y ', C B e C R : o componente Y' representa o brilho de um pixel, e os componentes C B e C R representam a crominância (divididos em componentes azul e vermelho). Este é basicamente o mesmo espaço de cor usado pela televisão digital em cores , bem como vídeo digital, incluindo DVDs de vídeo , e é semelhante à forma como a cor é representada em vídeo PAL analógico e MAC (mas não por NTSC analógico , que usa o espaço de cor YIQ ) A conversão do espaço de cores Y′C B C R permite maior compactação sem um efeito significativo na qualidade da imagem perceptiva (ou maior qualidade da imagem perceptiva para a mesma compactação). A compressão é mais eficiente porque as informações de brilho, que são mais importantes para a eventual qualidade perceptiva da imagem, estão confinadas a um único canal. Isso corresponde mais de perto à percepção da cor no sistema visual humano. A transformação de cores também melhora a compactação por decorrelação estatística .

Uma conversão particular para Y′C B C R é especificada no padrão JFIF e deve ser executada para que o arquivo JPEG resultante tenha compatibilidade máxima. No entanto, algumas implementações de JPEG no modo de "qualidade mais alta" não aplicam esta etapa e, em vez disso, mantêm as informações de cores no modelo de cores RGB, onde a imagem é armazenada em canais separados para componentes de brilho vermelho, verde e azul. Isso resulta em compactação menos eficiente e provavelmente não será usado quando o tamanho do arquivo for especialmente importante.

Downsampling

Devido às densidades de receptores sensíveis à cor e ao brilho no olho humano, os humanos podem ver consideravelmente mais detalhes finos no brilho de uma imagem (o componente Y ') do que na saturação de matiz e cor de uma imagem (o Cb e Componentes Cr). Usando esse conhecimento, os codificadores podem ser projetados para compactar imagens com mais eficiência.

A transformação no modelo de cores Y′C B C R permite a próxima etapa usual, que é reduzir a resolução espacial dos componentes Cb e Cr (chamados de " downsampling " ou "chroma subampling"). As taxas nas quais a redução da resolução é normalmente feita para imagens JPEG são 4: 4: 4 (sem redução da resolução), 4: 2: 2 (redução por um fator de 2 na direção horizontal) ou (mais comumente) 4: 2: 0 (redução por um fator de 2 nas direções horizontal e vertical). Para o resto do processo de compressão, Y ', Cb e Cr são processados ​​separadamente e de uma maneira muito semelhante.

Divisão de bloco

Após a subamostragem , cada canal deve ser dividido em blocos de 8 × 8. Dependendo da subamostragem de croma, isso produz blocos de Unidade Codificada Mínima (MCU) de tamanho 8 × 8 (4: 4: 4 - sem subamostragem), 16 × 8 (4: 2: 2) ou mais comumente 16 × 16 (4: 2: 0). Na compressão de vídeo, os MCUs são chamados de macroblocos .

Se os dados de um canal não representam um número inteiro de blocos, o codificador deve preencher a área restante dos blocos incompletos com alguma forma de dados fictícios. Preencher as bordas com uma cor fixa (por exemplo, preto) pode criar artefatos de anel ao longo da parte visível da borda; repetir os pixels da borda é uma técnica comum que reduz (mas não necessariamente elimina) esses artefatos, e técnicas de preenchimento de borda mais sofisticadas também podem ser aplicadas.

Transformada discreta de cosseno

A subimagem 8 × 8 mostrada em tons de cinza de 8 bits

Em seguida, cada bloco 8 × 8 de cada componente (Y, Cb, Cr) é convertido em uma representação no domínio da frequência , usando uma transformada discreta de cosseno tipo II bidimensional normalizada (DCT), consulte Citação 1 em transformada de cosseno discreta . O DCT é algumas vezes referido como "DCT do tipo II" no contexto de uma família de transformações como na transformação discreta do cosseno , e o inverso correspondente (IDCT) é denotado como "DCT do tipo III".

Por exemplo, uma dessas sub-imagens de 8 × 8 8 bits pode ser:

Antes de calcular o DCT do bloco 8 × 8, seus valores são deslocados de um intervalo positivo para um centrado em zero. Para uma imagem de 8 bits, cada entrada no bloco original cai no intervalo . O ponto médio do intervalo (neste caso, o valor 128) é subtraído de cada entrada para produzir um intervalo de dados centralizado em zero, de modo que o intervalo modificado seja . Esta etapa reduz os requisitos de faixa dinâmica no estágio de processamento DCT que se segue.

Esta etapa resulta nos seguintes valores:

O DCT transforma um bloco 8 × 8 de valores de entrada em uma combinação linear desses 64 padrões. Os padrões são chamados de funções básicas DCT bidimensionais e os valores de saída são chamados de coeficientes de transformação . O índice horizontal é e o índice vertical é .

A próxima etapa é fazer o DCT bidimensional, que é dado por:

Onde

  • é a frequência espacial horizontal , para os inteiros .
  • é a frequência espacial vertical, para os inteiros .
  • é um fator de escala de normalização para tornar a transformação ortonormal
  • é o valor do pixel nas coordenadas
  • é o coeficiente DCT nas coordenadas

Se realizarmos essa transformação em nossa matriz acima, obteremos o seguinte (arredondado para os dois dígitos mais próximos além da vírgula decimal):

Observe a entrada do canto superior esquerdo com uma magnitude bastante grande. Este é o coeficiente DC (também chamado de componente constante), que define o matiz básico para todo o bloco. Os 63 coeficientes restantes são os coeficientes AC (também chamados de componentes alternados). A vantagem do DCT é sua tendência de agregar a maior parte do sinal em um canto do resultado, como pode ser visto acima. A etapa de quantização a seguir acentua esse efeito ao mesmo tempo em que reduz o tamanho geral dos coeficientes DCT, resultando em um sinal que é fácil de comprimir de forma eficiente no estágio de entropia.

O DCT aumenta temporariamente a profundidade de bits dos dados, uma vez que os coeficientes DCT de uma imagem de 8 bits / componente levam até 11 ou mais bits (dependendo da fidelidade do cálculo DCT) para armazenar. Isso pode forçar o codec a usar temporariamente números de 16 bits para manter esses coeficientes, dobrando o tamanho da representação da imagem neste ponto; esses valores são normalmente reduzidos de volta a valores de 8 bits pela etapa de quantização. O aumento temporário no tamanho neste estágio não é uma preocupação de desempenho para a maioria das implementações JPEG, uma vez que normalmente apenas uma parte muito pequena da imagem é armazenada na forma DCT completa a qualquer momento durante o processo de codificação ou decodificação da imagem.

Quantização

O olho humano é bom em ver pequenas diferenças de brilho em uma área relativamente grande, mas não tão bom em distinguir a intensidade exata de uma variação de brilho de alta frequência. Isso permite reduzir bastante a quantidade de informações nos componentes de alta frequência. Isso é feito simplesmente dividindo cada componente no domínio da frequência por uma constante para esse componente e, em seguida, arredondando para o número inteiro mais próximo. Esta operação de arredondamento é a única operação com perdas em todo o processo (exceto subamostragem de croma) se o cálculo DCT for executado com precisão suficientemente alta. Como resultado disso, normalmente ocorre que muitos dos componentes de frequência mais alta são arredondados para zero e muitos dos demais se tornam pequenos números positivos ou negativos, que exigem muito menos bits para serem representados.

Os elementos na matriz de quantização controlam a taxa de compressão, com valores maiores produzindo maior compressão. Uma matriz de quantização típica (para uma qualidade de 50%, conforme especificado no padrão JPEG original), é a seguinte:

Os coeficientes DCT quantizados são calculados com

onde estão os coeficientes DCT não quantizados; é a matriz de quantização acima; e são os coeficientes DCT quantizados.

Usar esta matriz de quantização com a matriz de coeficiente DCT acima resulta em:

Esquerda: uma imagem final é construída a partir de uma série de funções básicas. À direita: cada uma das funções de base DCT que compõem a imagem e o coeficiente de ponderação correspondente. Meio: a função de base, após multiplicação pelo coeficiente: este componente é adicionado à imagem final. Para maior clareza, o macrobloco 8 × 8 neste exemplo é ampliado em 10x usando interpolação bilinear.

Por exemplo, usando −415 (o coeficiente DC) e arredondando para o inteiro mais próximo

Observe que a maioria dos elementos de alta frequência do sub-bloco (ou seja, aqueles com uma frequência espacial x ou y maior que 4) são quantizados em valores zero.

Codificação de entropia

Ordenação em ziguezague de componentes de imagem JPEG

A codificação de entropia é uma forma especial de compactação de dados sem perdas . Envolve organizar os componentes da imagem em uma ordem de " zigue-zague ", empregando um algoritmo de codificação de comprimento de execução (RLE) que agrupa frequências semelhantes, inserindo zeros de codificação de comprimento e, em seguida, usando a codificação de Huffman no que resta.

O padrão JPEG também permite, mas não exige, decodificadores para oferecer suporte ao uso de codificação aritmética, que é matematicamente superior à codificação de Huffman. No entanto, esse recurso raramente foi usado, pois era historicamente coberto por patentes que exigiam licenças com royalties e porque é mais lento para codificar e decodificar em comparação com a codificação de Huffman. A codificação aritmética normalmente torna os arquivos cerca de 5 a 7% menores.

O coeficiente DC quantizado anterior é usado para prever o coeficiente DC quantizado atual. A diferença entre os dois é codificada em vez do valor real. A codificação dos 63 coeficientes AC quantizados não usa essa diferenciação de predição.

A sequência em ziguezague para os coeficientes quantizados acima é mostrada abaixo. (O formato mostrado é apenas para facilitar a compreensão / visualização.)

-26
-3 0
-3 -2 -6
2 -4 1 -3
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

Se o i -ésimo bloco for representado por e as posições dentro de cada bloco forem representadas por , onde e , então qualquer coeficiente na imagem DCT pode ser representado como . Assim, no esquema acima, a fim de codificar pixels (para o i bloco -ésimo) é , , , , , , , e assim por diante.

Processos de codificação e decodificação sequenciais de JPEG de linha de base

Esse modo de codificação é chamado de codificação sequencial de linha de base . Baseline JPEG também suporta codificação progressiva . Enquanto a codificação sequencial codifica os coeficientes de um único bloco por vez (em zigue-zague), a codificação progressiva codifica o lote de coeficientes de todos os blocos em posição semelhante de uma só vez (chamado de varredura ), seguido pelo próximo lote de coeficientes de todos os blocos , e assim por diante. Por exemplo, se a imagem for dividida em blocos N 8 × 8 , uma codificação progressiva de 3 varreduras codifica o componente DC para todos os blocos (ou seja, para todos , na primeira varredura). Isso é seguido pela segunda varredura, que codifica (assumindo mais quatro componentes) para , ainda em zigue-zague. Neste ponto, a sequência de coeficientes é:) , seguida pelos coeficientes restantes de todos os blocos na última varredura.

Uma vez que todos os coeficientes posicionados semelhantes tenham sido codificados, a próxima posição a ser codificada é aquela que ocorre a seguir na travessia em zigue-zague, conforme indicado na figura acima. Foi descoberto que a codificação JPEG progressiva de linha de base geralmente oferece melhor compactação em comparação com JPEG sequencial de linha de base devido à capacidade de usar diferentes tabelas de Huffman (veja abaixo) adaptadas para diferentes frequências em cada "varredura" ou "passagem" (que inclui similar- coeficientes posicionados), embora a diferença não seja muito grande.

No restante do artigo, assume-se que o padrão de coeficiente gerado é devido ao modo sequencial.

Para codificar o padrão de coeficiente gerado acima, o JPEG usa a codificação Huffman. O padrão JPEG fornece tabelas Huffman de uso geral, embora os codificadores também possam optar por gerar tabelas Huffman dinamicamente otimizadas para as distribuições de frequência reais nas imagens que estão sendo codificadas.

O processo de codificação dos dados quantizados em zigue-zague começa com uma codificação de comprimento de execução, onde:

  • x é o coeficiente AC quantizado diferente de zero.
  • RUNLENGTH é o número de zeros que vieram antes deste coeficiente AC diferente de zero.
  • SIZE é o número de bits necessários para representar x .
  • AMPLITUDE é a representação de bits de x .

A codificação run-length funciona examinando cada coeficiente AC diferente de zero x e determinando quantos zeros vieram antes do coeficiente AC anterior. Com essas informações, dois símbolos são criados:

Símbolo 1 Símbolo 2
(RUNLENGTH, SIZE) (AMPLITUDE)

Ambos RUNLENGTH e SIZE repousam no mesmo byte, o que significa que cada um contém apenas quatro bits de informação. Os bits mais altos lidam com o número de zeros, enquanto os bits mais baixos denotam o número de bits necessários para codificar o valor de x .

Isso tem a implicação imediata de que o símbolo 1 só é capaz de armazenar informações sobre os primeiros 15 zeros que precedem o coeficiente AC diferente de zero. No entanto, JPEG define duas palavras de código Huffman especiais. Uma é para terminar a sequência prematuramente quando os coeficientes restantes são zero (chamados de "Fim do Bloco" ou "EOB"), e outra para quando a sequência de zeros ultrapassar 15 antes de atingir um coeficiente AC diferente de zero. Em tal caso, onde 16 zeros são encontrados antes de um dado coeficiente AC diferente de zero, o Símbolo 1 é codificado como (15, 0) (0).

O processo geral continua até que "EOB" - denotado por (0, 0) - seja alcançado.

Com isso em mente, a sequência anterior torna-se:

  • (0, 2) (- 3); (1, 2) (- 3); (0, 1) (- 2); (0, 2) (- 6); (0, 1) (2); ( 0, 1) (- 4); (0, 1) (1); (0, 2) (- 3); (0, 1) (1); (0, 1) (1);
  • (0, 2) (5); (0, 1) (1); (0, 1) (2); (0, 1) (- 1); (0, 1) (1); (0, 1 ) (- 1); (0, 1) (2); (5, 1) (- 1); (0, 1) (- 1); (0, 0);

(O primeiro valor na matriz, −26, é o coeficiente DC; ele não é codificado da mesma maneira. Veja acima.)

A partir daqui, os cálculos de frequência são feitos com base nas ocorrências dos coeficientes. Em nosso bloco de exemplo, a maioria dos coeficientes quantizados são pequenos números que não são precedidos imediatamente por um coeficiente zero. Esses casos mais frequentes serão representados por palavras de código mais curtas.

Taxa de compressão e artefatos

Esta imagem mostra os pixels que são diferentes entre uma imagem não compactada e a mesma imagem JPEG compactada com uma configuração de qualidade de 50. Mais escuro significa uma diferença maior. Observe especialmente as mudanças que ocorrem perto de arestas vivas e com uma forma semelhante a um bloco.
A imagem original
Os quadrados compactados de 8 × 8 são visíveis na imagem ampliada, junto com outros artefatos visuais da compactação com perdas .

A taxa de compressão resultante pode ser variada de acordo com a necessidade, sendo mais ou menos agressiva nos divisores usados ​​na fase de quantização. A compactação dez para um geralmente resulta em uma imagem que não pode ser diferenciada a olho nu do original. Uma taxa de compactação de 100: 1 geralmente é possível, mas parecerá nitidamente distorcida em comparação com o original. O nível apropriado de compactação depende do uso que será dado à imagem.

Imagem externa
ícone de imagem Ilustração de ocupação extrema

Quem usa a World Wide Web pode estar familiarizado com as irregularidades conhecidas como artefatos de compressão que aparecem nas imagens JPEG, que podem assumir a forma de ruído em torno de bordas contrastantes (especialmente curvas e cantos) ou imagens "em blocos". Isso se deve à etapa de quantização do algoritmo JPEG. Eles são especialmente perceptíveis em torno de cantos agudos entre cores contrastantes (o texto é um bom exemplo, pois contém muitos desses cantos). Os artefatos análogos no vídeo MPEG são chamados de ruído de mosquito , como a "ocupação da borda" resultante e pontos espúrios, que mudam com o tempo, parecem mosquitos enxameando ao redor do objeto.

Esses artefatos podem ser reduzidos escolhendo um nível inferior de compactação; eles podem ser completamente evitados ao salvar uma imagem usando um formato de arquivo sem perdas, embora isso resulte em um tamanho de arquivo maior. As imagens criadas com programas de rastreamento de raios têm formas de blocos perceptíveis no terreno. Certos artefatos de compressão de baixa intensidade podem ser aceitáveis ​​ao simplesmente visualizar as imagens, mas podem ser enfatizados se a imagem for processada posteriormente, geralmente resultando em uma qualidade inaceitável. Considere o exemplo abaixo, demonstrando o efeito da compressão com perdas em uma etapa de processamento de detecção de borda .

Imagem Compressão sem perdas Compressão com perda
Original Lossless-circle.png Lossy-circle.jpg
Processado pelo
detector de borda Canny
Lossless-circle-canny.png Lossy-circle-canny.png

Alguns programas permitem que o usuário varie a quantidade de compressão de blocos individuais. Uma compressão mais forte é aplicada a áreas da imagem que mostram menos artefatos. Dessa forma, é possível reduzir manualmente o tamanho do arquivo JPEG com menos perda de qualidade.

Como o estágio de quantização sempre resulta em perda de informações, o padrão JPEG é sempre um codec de compactação com perdas. (As informações são perdidas na quantização e no arredondamento dos números de ponto flutuante.) Mesmo se a matriz de quantização for uma matriz de uns , as informações ainda serão perdidas na etapa de arredondamento.

Decodificação

A decodificação para exibir a imagem consiste em fazer tudo acima ao contrário.

Pegando a matriz de coeficiente DCT (depois de adicionar a diferença do coeficiente DC de volta)

e tomar o produto de entrada por entrada com a matriz de quantização acima resulta em

que se assemelha muito à matriz de coeficiente DCT original para a porção superior esquerda.

A próxima etapa é obter o DCT inverso bidimensional (um DCT 2D tipo III), que é dado por:

Onde

  • é a linha do pixel, para os inteiros .
  • é a coluna de pixel, para os inteiros .
  • é definido como acima, para os inteiros .
  • é o coeficiente aproximado reconstruído nas coordenadas
  • é o valor do pixel reconstruído nas coordenadas

Arredondar a saída para valores inteiros (já que o original tinha valores inteiros) resulta em uma imagem com valores (ainda desviada em 128)

São perceptíveis ligeiras diferenças entre a imagem original (superior) e a imagem descomprimida (inferior), que é mais facilmente vista no canto inferior esquerdo.

e adicionando 128 a cada entrada

Esta é a subimagem descompactada. Em geral, o processo de descompressão pode produzir valores fora do intervalo de entrada original de . Se isso ocorrer, o decodificador precisa cortar os valores de saída para mantê-los dentro dessa faixa para evitar o estouro ao armazenar a imagem descompactada com a profundidade de bits original.

A subimagem descompactada pode ser comparada à subimagem original (veja também as imagens à direita) tomando a diferença (original - descompactada) nos seguintes valores de erro:

com um erro absoluto médio de cerca de 5 valores por pixels (ou seja, ).

O erro é mais perceptível no canto inferior esquerdo, onde o pixel inferior esquerdo se torna mais escuro do que o pixel imediatamente à direita.

Precisão necessária

A conformidade de codificação e decodificação e, portanto, os requisitos de precisão são especificados na ISO / IEC 10918-2, ou seja, parte 2 da especificação JPEG. Essas especificações requerem, por exemplo, que os coeficientes DCT (transformados para a frente) formados a partir de uma imagem de uma implementação JPEG em teste tenham um erro que está dentro da precisão de um balde de quantização em comparação com os coeficientes de referência. Para este fim, a ISO / IEC 10918-2 fornece fluxos de teste, bem como os coeficientes DCT para os quais o fluxo de código deve decodificar.

Da mesma forma, a ISO / IEC 10918-2 define as precisões do codificador em termos de um erro máximo permitido no domínio DCT. Isso é incomum, pois muitos outros padrões definem apenas a conformidade do decodificador e exigem apenas do codificador para gerar um fluxo de código sintaticamente correto.

As imagens de teste encontradas na ISO / IEC 10918-2 são padrões (pseudo-) aleatórios, para verificar os piores casos. Como ISO / IEC 10918-1 não define espaços de cores e nem inclui a transformação YCbCr em RGB de JFIF (agora ISO / IEC 10918-5), a precisão da última transformação não pode ser testada por ISO / IEC 10918-2.

A fim de suportar a precisão de 8 bits por saída de componente de pixel, a desquantização e as transformações DCT inversas são tipicamente implementadas com pelo menos 14 bits de precisão em decodificadores otimizados.

Efeitos da compressão JPEG

Repetição da compressão de uma imagem (opções de qualidade aleatória)

Os artefatos de compactação JPEG combinam bem com as fotografias com texturas não uniformes detalhadas, permitindo taxas de compactação mais altas. Observe como uma taxa de compressão mais alta afeta primeiro as texturas de alta frequência no canto superior esquerdo da imagem e como as linhas contrastantes se tornam mais difusas. A taxa de compressão muito alta afeta severamente a qualidade da imagem, embora as cores gerais e a forma da imagem ainda sejam reconhecíveis. No entanto, a precisão das cores sofre menos (para o olho humano) do que a precisão dos contornos (baseada na luminância). Isso justifica o fato de que as imagens devem primeiro ser transformadas em um modelo de cores separando a luminância da informação cromática, antes de subamostrar os planos cromáticos (que também podem usar quantização de qualidade inferior), a fim de preservar a precisão do plano de luminância com mais bits de informação .

Fotografias de amostra

Impacto visual de uma compressão jpeg no Photoshop em uma imagem de 4480x4480 pixels

Para obter informações, a imagem de bitmap RGB de 24 bits não compactada abaixo (73.242 pixels) exigiria 219.726 bytes (excluindo todos os outros cabeçalhos de informações). Os tamanhos de arquivo indicados abaixo incluem os cabeçalhos de informações JPEG internos e alguns metadados . Para imagens de qualidade mais alta (Q = 100), são necessários cerca de 8,25 bits por pixel de cor. Em imagens em tons de cinza, um mínimo de 6,5 bits por pixel é suficiente (um Q comparável = 100 informações de cores de qualidade requer cerca de 25% mais bits codificados). A imagem de qualidade mais alta abaixo (Q = 100) é codificada em nove bits por pixel de cor, a imagem de qualidade média (Q = 25) usa um bit por pixel de cor. Para a maioria das aplicações, o fator de qualidade não deve ser inferior a 0,75 bit por pixel (Q = 12,5), conforme demonstrado pela imagem de baixa qualidade. A imagem com qualidade mais baixa usa apenas 0,13 bits por pixel e exibe cores muito pobres. Isso é útil quando a imagem será exibida em um tamanho significativamente reduzido. Um método para criar melhores matrizes de quantização para uma dada qualidade de imagem usando PSNR em vez do fator Q é descrito em Minguillón & Pujol (2001).

Nota: As imagens acima não são imagens de teste IEEE / CCIR / EBU  e as configurações do codificador não estão especificadas ou disponíveis.
Imagem Qualidade Tamanho (bytes) Taxa de compressão Comente
Exemplo de JPEG JPG RIP 100.jpg Mais alta qualidade (Q = 100) 81.447 2,7: 1 Artefatos extremamente menores
Exemplo de JPEG JPG RIP 050.jpg Alta qualidade (Q = 50) 14.679 15: 1 Sinais iniciais de artefatos de subimagem
Exemplo de JPEG JPG RIP 025.jpg Qualidade média (Q = 25) 9.407 23: 1 Artefatos mais fortes; perda de informação de alta frequência
Exemplo de JPEG JPG RIP 010.jpg Baixa qualidade (Q = 10) 4.787 46: 1 A perda severa de alta frequência leva a artefatos óbvios nos limites da subimagem ("macrobloqueio")
Exemplo de JPEG JPG RIP 001.jpg Qualidade mais baixa (Q = 1) 1.523 144: 1 Perda extrema de cor e detalhes; as folhas estão quase irreconhecíveis.

A foto de qualidade média usa apenas 4,3% do espaço de armazenamento necessário para a imagem descompactada, mas tem pouca perda perceptível de detalhes ou artefatos visíveis. No entanto, uma vez que um certo limite de compressão é ultrapassado, as imagens comprimidas mostram defeitos cada vez mais visíveis. Consulte o artigo sobre a teoria da taxa de distorção para obter uma explicação matemática desse efeito de limite. Uma limitação particular do JPEG a este respeito é sua estrutura de transformação de bloco 8 × 8 não sobreposta. Projetos mais modernos, como JPEG 2000 e JPEG XR, exibem uma degradação de qualidade mais elegante à medida que o uso de bits diminui - usando transformações com uma extensão espacial maior para os coeficientes de frequência mais baixos e usando funções de base de transformação sobrepostas.

Mais compressão sem perdas

De 2004 a 2008, novas pesquisas surgiram sobre maneiras de compactar ainda mais os dados contidos em imagens JPEG sem modificar a imagem representada. Isso tem aplicações em cenários onde a imagem original está disponível apenas no formato JPEG e seu tamanho precisa ser reduzido para arquivamento ou transmissão. As ferramentas de compactação padrão de uso geral não podem compactar arquivos JPEG de maneira significativa.

Normalmente, tais esquemas tiram vantagem de melhorias no esquema ingênuo para codificar coeficientes DCT, que não leva em consideração:

  • Correlações entre magnitudes de coeficientes adjacentes no mesmo bloco;
  • Correlações entre magnitudes do mesmo coeficiente em blocos adjacentes;
  • Correlações entre magnitudes do mesmo coeficiente / bloco em diferentes canais;
  • Os coeficientes DC, quando tomados em conjunto, se assemelham a uma versão em escala reduzida da imagem original multiplicada por um fator de escala. Esquemas bem conhecidos para codificação sem perdas de imagens de tons contínuos podem ser aplicados, alcançando uma compressão um pouco melhor do que o DPCM codificado por Huffman usado em JPEG.

Algumas opções padrão, mas raramente usadas, já existem no JPEG para melhorar a eficiência da codificação dos coeficientes DCT: a opção de codificação aritmética e a opção de codificação progressiva (que produz taxas de bits mais baixas porque os valores para cada coeficiente são codificados independentemente, e cada coeficiente tem um valor significativamente diferente distribuição). Os métodos modernos aprimoraram essas técnicas reordenando coeficientes para agrupar coeficientes de magnitude maior; usando coeficientes e blocos adjacentes para prever novos valores de coeficientes; dividir blocos ou coeficientes entre um pequeno número de modelos codificados independentemente com base em suas estatísticas e valores adjacentes; e mais recentemente, decodificando blocos, prevendo blocos subsequentes no domínio espacial e, em seguida, codificando-os para gerar previsões para coeficientes DCT.

Normalmente, esses métodos podem compactar arquivos JPEG existentes entre 15 e 25 por cento e, para JPEGs compactados em configurações de baixa qualidade, podem produzir melhorias de até 65%.

Uma ferramenta disponível gratuitamente chamada packJPG é baseada no artigo de 2007 "Redundancy Redundancy Reduction for JPEG Files". Um artigo de 2016 intitulado "JPEG em esteróides" usando ISO libjpeg mostra que as técnicas atuais, com perdas ou não, podem tornar o JPEG quase tão eficiente quanto o JPEG XR ; mozjpeg usa técnicas semelhantes. JPEG XL é um novo formato de arquivo que pode recodificar sem perdas um JPEG com conversão de volta eficiente para JPEG.

Formatos derivados

Para 3D estereoscópico

JPEG estereoscópico

Um exemplo de arquivo estereoscópico .JPS

JPEG estereoscópico (JPS, extensão .jps) é um formato baseado em JPEG para imagens estereoscópicas . Ele tem uma gama de configurações armazenadas no campo do marcador JPEG APP3, mas geralmente contém uma imagem de largura dupla, representando duas imagens de tamanho idêntico em cruz (ou seja, quadro esquerdo na metade direita da imagem e vice-versa) lado- arranjo a lado. Este formato de arquivo pode ser visualizado como JPEG sem nenhum software especial ou pode ser processado para renderização em outros modos.

Formato JPEG de várias imagens

O JPEG Multi-Picture Format (MPO, extensão .mpo) é um formato baseado em JPEG para armazenar várias imagens em um único arquivo. Ele contém dois ou mais arquivos JPEG concatenados. Ele também define um segmento de marcador JPEG APP2 para a descrição da imagem. Vários dispositivos o utilizam para armazenar imagens 3D, como Fujifilm FinePix Real 3D W1 , HTC Evo 3D , camcorder de extensão JVC GY-HMZ1U AVCHD / MVC, Nintendo 3DS , Sony PlayStation 3 , Sony PlayStation Vita , Panasonic Lumix DMC-TZ20 , DMC- TZ30 , DMC-TZ60 , DMC-TS4 (FT4) e Sony DSC-HX7V. Outros dispositivos o utilizam para armazenar "imagens de pré-visualização" que podem ser exibidas em uma TV.

Nos últimos anos, devido ao crescente uso de imagens estereoscópicas, muito esforço tem sido despendido pela comunidade científica no desenvolvimento de algoritmos para compressão de imagens estereoscópicas.

JPEG XT

JPEG XT (ISO / IEC 18477) foi publicado em junho de 2015; estende o formato JPEG básico com suporte para maiores profundidades de bits inteiros (até 16 bits), imagem de alta faixa dinâmica e codificação de ponto flutuante, codificação sem perdas e codificação de canal alfa. As extensões são compatíveis com o formato de arquivo base JPEG / JFIF e imagem compactada com perdas de 8 bits. JPEG XT usa um formato de arquivo extensível baseado em JFIF. Camadas de extensão são usadas para modificar a camada de base JPEG de 8 bits e restaurar a imagem de alta resolução. O software existente é compatível com versões futuras e pode ler o fluxo binário JPEG XT, embora só decodifique a camada base de 8 bits.

Padrões JPEG incompatíveis

O Joint Photography Experts Group também é responsável por alguns outros formatos com o nome JPEG, incluindo JPEG 2000 , JPEG XR e JPEG XS .

JPEG XL

JPEG XL é outro formato com melhor eficiência de compactação e recursos mais modernos em comparação com JPEG. Ele foi projetado para exceder o desempenho de compactação de imagens estáticas mostrado por HEVC HM, Daala e WebP e , ao contrário dos esforços anteriores que tentaram substituir o JPEG, para fornecer transporte de recompressão mais eficiente e sem perdas e opção de armazenamento para imagens JPEG tradicionais. O formato não é diretamente compatível com decodificadores JPEG: uma etapa de transcodificação deve ser realizada para restaurar o fluxo de bits JPEG tradicional.

Implementações

Uma implementação muito importante de um codec JPEG foi a biblioteca de programação livre libjpeg do Independent JPEG Group. Foi publicado pela primeira vez em 1991 e foi a chave para o sucesso do padrão. Versões recentes introduzem extensões proprietárias que quebraram a compatibilidade ABI com versões anteriores . Em muitos projetos de software proeminentes, libjpeg foi substituído por libjpeg-turbo , que oferece maior desempenho, compatibilidade SIMD e compatibilidade retroativa com as versões libjpeg originais.

Em março de 2017, o Google lançou o projeto de código aberto Guetzli , que troca um tempo de codificação muito maior por arquivos de tamanho menor (semelhante ao que o Zopfli faz para PNG e outros formatos de dados sem perdas).

O ISO / IEC Joint Photography Experts Group mantém uma implementação de software de referência que pode codificar as extensões JPEG (ISO / IEC 10918-1 e 18477-1) e JPEG XT (ISO / IEC 18477 Partes 2 e 6-9), bem como JPEG-LS (ISO / IEC 14495).

Veja também

Referências

links externos