JPEG
JPEG (JAY-peg) é um método comumente usado de compressão com perdas para imagens digitais, particularmente para aquelas imagens produzidas por fotografia digital. O grau de compactação pode ser ajustado, permitindo uma compensação selecionável entre tamanho de armazenamento e qualidade de imagem. JPEG normalmente atinge compressão 10:1 com pouca perda perceptível na qualidade da imagem. Desde a sua introdução em 1992, o JPEG tem sido o padrão de compressão de imagem mais usado no mundo e o formato de imagem digital mais usado, com vários bilhões de imagens JPEG produzidas todos os dias a partir de 2015.
O termo "JPEG" é um acrônimo para o Joint Photographic Experts Group, que criou o padrão em 1992. O 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 imagens fotográficas; 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 chamadas simplesmente de JPEG.
O tipo de mídia MIME para JPEG é image/jpeg, exceto em versões mais antigas do Internet Explorer, que fornecem um tipo MIME de image/pjpeg ao carregar 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 para uma proporção de 1:1. Em 2000, o grupo JPEG introduziu um formato destinado a ser um sucessor, o JPEG 2000, mas não conseguiu substituir o JPEG original como padrão de imagem dominante.
História
Fundo
A especificação JPEG original publicada em 1992 implementa processos de vários documentos de pesquisa e patentes anteriores citados pelo CCITT (agora ITU-T) e Joint Photographic Experts Group.
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
- EUA Patente 4,652,856 – 4 de fevereiro de 1986 – Kottappuram M. A. Mohiuddin e Jorma J. Rissanen – Multiplication-free multi-alfabet código aritmético
- EUA Patente 4,905,297 – 27 de fevereiro de 1990 – G. Langdon, J.L. Mitchell, W.B. Pennebaker e Jorma J. Rissanen – Sistema de codificação aritmética e decodificador
- EUA Patente 4,935,882 – 19 de junho de 1990 – W.B. Pennebaker e J.L. 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 outras três patentes da IBM. Outras empresas citadas como detentoras de patentes incluem AT&T (duas patentes) e Canon Inc. Patente 4.698.672, registrada pela Compression Labs' Wen-Hsiung Chen e Daniel J. Klenke em outubro de 1986. A patente descreve um algoritmo de compressão de imagem baseado em DCT e mais tarde seria motivo de controvérsia em 2002 (consulte Controvérsia de patente abaixo). No entanto, a especificação JPEG citou dois trabalhos 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. A "Junta" significava ISO TC97 WG8 e CCITT SGVIII. Fundado em 1986, o grupo desenvolveu o padrão JPEG no final dos anos 80. O grupo publicou o padrão JPEG em 1992.
Em 1987, ISO TC 97 tornou-se ISO/IEC JTC 1 e, em 1992, CCITT tornou-se ITU-T. Atualmente no lado JTC1, o JPEG é um dos dois subgrupos do Comitê Técnico Conjunto ISO/IEC 1, Subcomitê 29, Grupo de Trabalho 1 (ISO/IEC JTC 1/SC 29/WG 1) – intitulado como Codificação de fotos 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 novamente 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 nomeados como Tecnologia da informação - Compressão digital e codificação de imagens estáticas de tom contínuo. A ISO/IEC 10918 consiste nas seguintes partes:
Parte | Norma ISO/IEC | ITU-T Rec. | Primeira data de lançamento público | Última alteração | 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) | Nov 11, 1994 | Teste de conformidade | Regras e verificações para conformidade de software (para 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 a Formato de arquivo de troca de imagem (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 compressã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 foi o formato de arquivo de facto para imagens codificadas pelo padrão JPEG. Em 2009, o Comitê JPEG estabeleceu formalmente um Grupo Ad Hoc para padronizar JFIF como JPEG Parte 5. | |
Parte 6 | ISO/IEC 10918-6:2013 | T.872 (06/12) | Junho 2012 | Aplicação para sistemas de impressão | Especifica um subconjunto de recursos e ferramentas de aplicação para o intercâmbio de imagens codificadas de acordo com o ISO/IEC 10918-1 para impressão. | |
Parte 7 | ISO/IEC 10918-7:2021 | T.873 (06/21) | Maio 2019 | Junho 2021 | Software de referência | Fornece implementações de referência do sistema de codificação de núcleo JPEG |
Ecma International TR/98 especifica o Formato de Intercâmbio de Arquivos JPEG (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 valer os direitos de patente sobre a tecnologia JPEG, decorrentes de uma patente registrada em 27 de outubro de 1986 e concedida em 6 de outubro de 1987: U.S. Patente 4.698.672 da Compression Labs' Wen-Hsiung Chen e Daniel J. Klenke. Embora a Forgent não fosse proprietária da Compression Labs na época, Chen mais tarde vendeu a Compression Labs para a Forgent, antes de Chen trabalhar para a Cisco. Isso levou Forgent a adquirir a propriedade da patente. O anúncio da Forgent em 2002 criou um furor que lembrava o da Unisys. tenta reivindicar seus direitos sobre o padrão de compressão de imagens GIF.
O comitê JPEG investigou as reivindicações de patente em 2002 e considerou que elas foram invalidadas pelo estado da técnica, uma visão compartilhada por vários especialistas.
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 novos pagamentos de licenças. Em julho do mesmo ano, um consórcio de 21 grandes empresas de informática entrou com uma ação reconvencional, com o objetivo de invalidar a patente. Além disso, a Microsoft abriu 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 no estado da técnica. O USPTO também descobriu que Forgent sabia sobre o estado da técnica, mas evitou intencionalmente contar ao Escritório de Patentes. Isso torna altamente improvável que qualquer apelo para restabelecer a patente seja bem-sucedido.
Forgent também possui uma patente semelhante concedida pelo Escritório Europeu de Patentes em 1994, embora não esteja claro o quão executável é.
Em 27 de outubro de 2006, o prazo de 20 anos da patente dos EUA parece ter expirado e, em novembro de 2006, a Forgent concordou em abandonar a imposição de reivindicações de patente 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 pagamento de taxas de licença, e eles garantiram 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 violada pelo download de imagens JPEG em um site ou por meio de e-mail. Se não for invalidada, esta patente pode ser aplicada a qualquer site que exiba imagens JPEG. A patente estava sob reexame pelo Escritório de Marcas e Patentes dos Estados Unidos de 2000 a 2007; em julho de 2007, o Escritório de Patentes revogou todas as reivindicações originais da patente, mas descobriu que uma reivindicação adicional proposta pela Global Patent Holdings (reivindicação 17) era válida. A Global Patent Holdings 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 arquivados em Chicago, Illinois, a Global Patent Holdings processou 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 & Clube. Um quinto processo foi aberto contra a Global Patent Holdings em Nevada. Essa ação foi movida pela Zappos.com, Inc., que supostamente foi ameaçada pela Global Patent Holdings, e buscou uma declaração judicial de que a patente '341 é inválida e não violada.
Global Patent Holdings também usou a patente '341 para processar ou ameaçar críticos francos de amplas patentes de software, incluindo Gregory Aharonian e o operador anônimo de um blog conhecido como "Patent Troll Tracker.& #34; Em 21 de dezembro de 2007, o advogado de patentes Vernon Francissen, de Chicago, solicitou ao U.S. Patent and Trademark Office que reexaminasse a única reivindicação restante da patente '341 com base no novo estado da arte.
Em 5 de março de 2008, o U.S. Patent and Trademark Office concordou em reexaminar a patente '341, descobrindo que o novo estado da técnica levantava novas questões substanciais sobre a validade da patente. À luz do reexame, os infratores acusados em quatro dos cinco processos pendentes apresentaram moções para suspender (suspender) seus casos até a conclusão da revisão da patente '341 do Escritório de Marcas e Patentes dos EUA. Em 23 de abril de 2008, um juiz que preside 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 do Escritório" do segundo reexame, declarando a reivindicação inválida com base em dezenove fundamentos separados. Em 24 de novembro de 2009, foi emitido um Certificado de Reexame cancelando todas as reivindicações.
A partir de 2011 e continuando até o 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 dos U.S. Patente 4.813.056. Princeton alega 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 anterior" desta patente. (De acordo com as leis de patentes dos EUA, o proprietário de uma patente pode processar por "violação anterior" até seis anos antes da abertura de uma ação judicial, então Princeton poderia teoricamente continuar 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 compressão JPEG funciona melhor em fotografias e pinturas de cenas realistas com variações suaves de tom e cor. Para uso na web, onde reduzir a quantidade de dados usados para uma imagem é importante para uma apresentação responsiva, os benefícios de compactação do JPEG tornam o JPEG 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, PNG ou um formato de imagem bruta. O padrão JPEG inclui um modo de codificação sem perdas, mas esse modo não é compatível com a maioria dos produtos.
Como o uso típico de JPEG é um método de compactação com perdas, que reduz a fidelidade da imagem, ele é inadequado para a reprodução exata de dados de imagens (como alguns aplicativos de imagens científicas e médicas e certos trabalhos técnicos de processamento de imagens).
O JPEG também não é adequado para arquivos que passarão por várias edições, pois parte da qualidade da imagem é perdida toda vez que a imagem é compactada novamente, principalmente se a imagem for cortada ou deslocada ou se os parâmetros de codificação forem alterados - consulte perda de geração digital para 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
O JPEG usa uma forma de compactação com perdas baseada na transformada discreta de cosseno (DCT). Essa 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 vagamente baseado no sistema psicovisual humano descarta informações de alta frequência, ou seja, transições nítidas de intensidade e matiz de cor. No domínio da transformação, o processo de redução da informação é chamado de 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 escala menor, e o domínio de transformação é uma representação conveniente da imagem porque os coeficientes de alta frequência, que contribuem menos ao quadro geral do que outros coeficientes, são valores caracteristicamente pequenos com alta compressibilidade. Os coeficientes quantizados são então sequenciados e empacotados 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 compactaçã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 integrados (como o miniDV, que usa um esquema de compactação DCT semelhante), os parâmetros são pré-selecionados e fixados 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. Existe um modo sem perdas opcional definido no padrão JPEG. No entanto, esse modo não é amplamente suportado em produtos.
Há também um formato JPEG progressivo entrelaçado, no qual os dados são compactados em várias passagens de detalhes progressivamente maiores. 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 após o download completo.
Também existem muitos aplicativos de imagens médicas, tráfego e câmeras que criam e processam imagens JPEG de 12 bits em tons de cinza e coloridas. O formato JPEG de 12 bits está incluído em uma parte estendida da especificação JPEG. O codec libjpeg suporta JPEG de 12 bits e existe até uma versão de alto desempenho.
Edição sem perdas
Várias alterações em uma imagem JPEG podem ser executadas sem perdas (ou seja, sem recompressão e perda de qualidade associada), desde que o tamanho da imagem seja um múltiplo de 1 bloco MCU (Minimum Coded Unit) (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 exigem a instalação do plugin JPG_TRANSFORM.
- FastStone Image Viewer usando "Lossless Crop to File" e "JPEG Lossless Rotate".
- XnViewMP usando "Transformações sem perdas JPEG".
- ACD Ver suporta rotação sem perdas (mas não corte sem perdas) com sua opção "Força operações JPEG sem perdas".
Os blocos podem ser girados em incrementos de 90 graus, virados 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 fazer isso. Isto limita as possíveis operações de corte sem perda e também evita inversões e rotações de uma imagem cujo canto inferior ou direito não se encontre no limite de um bloco para todos os canais (porque o bordo terminaria no topo ou na esquerda, onde - conforme mencionado - um limite de bloco é obrigatório).
As rotações em que a imagem não é um múltiplo de 8 ou 16, cujo valor depende da subamostragem de croma, não são sem perdas. A rotação dessa imagem faz com que os blocos sejam recalculados, o que resulta em perda de qualidade.
Ao usar o corte sem perdas, se o lado inferior ou direito da região de corte não estiver no limite de um bloco, o restante dos dados dos blocos parcialmente usados ainda estará presente no arquivo cortado e poderá ser recuperado. Também é possível transformar entre os formatos baseline e progressivo sem perda de qualidade, já que 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, este "puro" formato de arquivo raramente é usado, principalmente devido à dificuldade de programar codificadores e decodificadores que implementam totalmente todos os aspectos do padrão e devido a certas deficiências do padrão:
- Definição de espaço de cor
- Registo de subamostramento componente
- definição de relação de aspecto pixel.
Várias normas adicionais evoluíram para resolver 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 intercambiável (Exif) e perfis de cores ICC. Ambos os formatos usam o layout real de bytes JIF, consistindo em diferentes marcadores, mas, além disso, empregam um dos pontos de extensão do padrão JIF, ou seja, os marcadores de aplicativos: 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, de certa forma, o JFIF é uma versão simplificada do padrão JIF na medida em que especifica certas restrições (como não permitir todos os diferentes modos de codificação), enquanto, de outras maneiras, é uma extensão do JIF devido aos metadados adicionados. A documentação para o padrão JFIF original declara:
JPEG O formato de troca de arquivos é um formato de arquivo mínimo que permite que bitstreams 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 qualquer formato de arquivo específico da aplicação. Nem deve, com o único propósito deste formato simplificado é permitir a troca de imagens compactadas JPEG.
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 estão, na verdade, criando arquivos no formato Exif, o formato que a indústria de câmeras padronizou para 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 maneira quase compatível; o padrão JFIF é interpretado de forma um tanto flexível.
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 mais antigo, enquanto os leitores mais novos também decodificam o segmento Exif seguinte, sendo menos rigorosos quanto à exigência de que apareça primeiro.
Extensões de nome de arquivo JPEG
As extensões de nome de arquivo mais comuns para arquivos que usam compactação JPEG são .jpg
e .jpeg
, embora .jpe
, .jfif
e .jif
também são usados. Também é possível que os dados JPEG sejam incorporados em outros tipos de arquivo - arquivos codificados em 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 cores
Muitos arquivos JPEG incorporam um perfil de cores ICC (espaço de cores). Os perfis de cores comumente usados incluem sRGB e Adobe RGB. Como esses espaços de cores usam uma transformação não linear, a faixa dinâmica de um arquivo JPEG de 8 bits é de cerca de 11 paradas; ver curva gama.
Se a imagem não especificar as informações do perfil de cores (não marcado), o espaço de cores será considerado sRGB para fins de exibição em páginas da web.
Sintaxe e estrutura
Uma imagem JPEG consiste em uma sequência de segmentos, cada um começando com um marcador, cada um 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 depois baixo), indicando o comprimento dos dados de carga específicos do marcador que 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 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 marcadores são anexados 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, para 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 byte stuffing (consulte a seção de especificação JPEG F.1.2.3), é aplicada apenas aos dados codificados por entropia, não aos dados de carga útil do marcador. Observe, no entanto, que os dados codificados por entropia possuem alguns marcadores próprios; especificamente os marcadores Reset (0xD0 a 0xD7), que são usados para isolar blocos independentes de dados codificados por entropia para permitir a decodificação paralela, e os codificadores são livres para inserir esses marcadores Reset em intervalos regulares (embora nem todos os codificadores façam isso).
Nome curto | Bytes | Carga de carga | Nome | Comentários |
---|---|---|---|---|
SO | 0xFF, 0xD8 | nenhum | Início da imagem | |
SOFO | 0xFF, 0xC0 | tamanho variável | Start Of Frame (baseline DCT) | Indica que este é um JPEG baseado na linha de base DCT, e especifica a largura, altura, número de componentes e subamostra de componentes (por exemplo, 4:2:0). |
SOF2 | 0xFF, 0xC2 | tamanho variável | Início do Quadro (DCT progressivo) | Indica que este é um JPEG baseado em DCT progressivo e especifica a largura, altura, número de componentes e subamostra 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 quantificação. |
DRI | 0xFF, 0xDD | 4 bytes | Definir Intervalo de Reinício | Especifica o intervalo entre RSTn marcadores, em unidades mínimas codificadas (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 digitalização | Começa uma varredura top-to-bottom da imagem. Em imagens DCT JPEG de linha de base, geralmente há uma única varredura. Imagens DCT JPEG progressivas geralmente contêm várias varreduras. Este marcador especifica qual fatia de dados que irá conter, e é imediatamente seguido por dados codificados por entropia. |
RSTn | 0xFF, 0xDn (n=0..7) | nenhum | Reinicie | Inserindo cada R macroblocos, onde R é o intervalo de reinício definido por um marcador DRI. Não usado se não houvesse marcador DRI. Os baixos três bits do ciclo de código do marcador no valor de 0 a 7. |
APPn | 0xFF, 0xEn | tamanho variável | Específico da aplicação | Por exemplo, um arquivo Exif JPEG usa um marcador APP1 para armazenar metadados, estabelecido em uma estrutura baseada de perto no TIFF. |
COMUNICAÇÃO | 0xFF, 0xFE | tamanho variável | Comentário | Contém um comentário de texto. |
EOI | 0xFF, 0xD9 | nenhum | Fim da imagem |
Existem outros marcadores Start Of Frame que introduzem outros tipos de codificações JPEG.
Uma vez que vários fornecedores podem usar o mesmo tipo de marcador APPn, 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 string de identificação.
Em um marcador de reinicialização, as variáveis preditoras bloco a bloco são redefinidas e o fluxo de bits é sincronizado com um limite de byte. Marcadores de reinicialização fornecem meios para 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 os marcadores de reinício podem ser decodificadas independentemente, essas execuções podem ser decodificadas em paralelo.
Exemplo de codec JPEG
Embora um arquivo JPEG possa ser codificado de várias maneiras, geralmente é feito com codificação JFIF. O processo de codificação consiste em várias etapas:
- A representação das cores na imagem é convertida de RGB a Y′CBCR, consistindo de um componente luma (Y'), representando brilho e dois componentes de croma, (CB e CR), representando a cor. Este passo é às vezes ignorado.
- A resolução dos dados do croma é reduzida, geralmente por um fator de 2 ou 3. Isso reflete o fato de que o olho é menos sensível aos detalhes de cor fina do que aos detalhes de brilho finos.
- A imagem é dividida em blocos de 8×8 pixels, e para cada bloco, cada um dos Y, CBe CR os dados são submetidos à discreta transformação cosina (DCT). Um DCT é semelhante a uma transformação Fourier no sentido de que produz um tipo de espectro de frequência espacial.
- As amplitudes dos componentes de frequência são quantificadas. A visão humana é muito mais sensível às pequenas variações de cor ou brilho sobre grandes áreas do que à força 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 um ajuste de qualidade excessivamente baixo é usado, os componentes de alta frequência são descartados completamente.
- Os dados resultantes para todos os blocos 8×8 são mais compactados com um algoritmo sem perdas, uma variante da codificação Huffman.
O processo de decodificação inverte essas etapas, exceto a quantização porque é irreversível. No restante desta seção, os processos de codificação e decodificação são descritos com mais detalhes.
Codificação
Muitas das opções no padrão JPEG não são comumente usadas e, como 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). Essa 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 (por padrão sRGB, mas outros espaços de cores são possíveis) em um espaço de cores diferente chamado Y′CBCR (ou, informalmente, YCbCr). Tem três componentes Y', CB e CR: o Y' componente representa o brilho de um pixel, e os componentes CB e CR representam a crominância (dividida em componentes azul e vermelho). Este é basicamente o mesmo espaço de cores usado pela televisão digital em cores, bem como pelo vídeo digital, incluindo DVDs de vídeo. A conversão do espaço de cores Y′CBCR permite maior compactação sem um efeito significativo na qualidade da imagem perceptual (ou maior qualidade da imagem perceptual para a mesma compactação). A compressão é mais eficiente porque a informação de brilho, que é mais importante para a eventual qualidade perceptual da imagem, fica confinada 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 específica para Y′CBCR é especificada no padrão JFIF e deve ser realizada para que o arquivo JPEG resultante tenha compatibilidade máxima. No entanto, algumas implementações de JPEG na "qualidade mais alta" não aplique esta etapa e, em vez disso, mantenha as informações de cores no modelo de cores RGB, onde a imagem é armazenada em canais separados para os componentes de brilho vermelho, verde e azul. Isso resulta em compactação menos eficiente e provavelmente não seria usado quando o tamanho do arquivo for especialmente importante.
Redução de resolução
Devido às densidades dos receptores sensíveis à cor e ao brilho no olho humano, os humanos podem ver detalhes consideravelmente mais finos no brilho de uma imagem (o componente Y') do que no matiz e na saturação de cor de uma imagem (os componentes Cb e Cr). Usando esse conhecimento, os codificadores podem ser projetados para compactar imagens com mais eficiência.
A transformação no modelo de cores Y′CBCR permite a próxima etapa usual, que é reduzir a resolução espacial dos componentes Cb e Cr (chamado "downsampling" ou "chroma subsampling"). As proporções nas quais o downsampling normalmente é feito para imagens JPEG são 4:4:4 (sem downsampling), 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 restante do processo de compactação, Y', Cb e Cr são processados separadamente e de maneira muito semelhante.
Divisão de blocos
Após a subamostragem, cada canal deve ser dividido em blocos de 8×8. Dependendo da subamostragem de croma, isso produz blocos de Unidade Mínima Codificada (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 toque ao longo da parte visível da borda; repetir os pixels de borda é uma técnica comum que reduz (mas não necessariamente elimina) tais artefatos, e técnicas de preenchimento de borda mais sofisticadas também podem ser aplicadas.
Transformada discreta de cosseno
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 (DCT) tipo II bidimensional normalizada, consulte a Citação 1 em transformada discreta de cosseno. O DCT às vezes é referido como "tipo II DCT" no contexto de uma família de transformadas como na transformada de cosseno discreta, e o inverso correspondente (IDCT) é denotado como "tipo III DCT".
Como exemplo, uma subimagem de 8 bits de 8 × 8 pode ser:
- Não.52556166706164736359559010985697262596811314410466736358711221541067069676168104126886870796560707768587585716459556165838779696865767894].(em inglês),66&70&64&7363&59&106&70
Antes de computar o DCT do bloco 8×8, seus valores são deslocados de uma faixa positiva para uma centralizada em zero. Para uma imagem de 8 bits, cada entrada no bloco original cai no intervalo Não.0,255][0,255]. O ponto médio do intervalo (neste caso, o valor 128) é subtraído de cada entrada para produzir um intervalo de dados que é centralizado em zero, de modo que o intervalo modificado é Não.- Sim. - Sim. 128,127][127]. Esta etapa reduz os requisitos de gama dinâmica na fase de processamento DCT que se segue.
Esta etapa resulta nos seguintes valores:
- g= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =x⟶ ⟶ ⟶ ⟶ Não.- Sim. - Sim. 76- Sim. - Sim. 73- Sim. - Sim. 67- Sim. - Sim. 62- Sim. - Sim. 58- Sim. - Sim. 67- Sim. - Sim. 64- Sim. - Sim. 55- Sim. - Sim. 65- Sim. - Sim. 69- Sim. - Sim. 73- Sim. - Sim. 38- Sim. - Sim. 19- Sim. - Sim. 43- Sim. - Sim. 59- Sim. - Sim. 56- Sim. - Sim. 66- Sim. - Sim. 69- Sim. - Sim. 60- Sim. - Sim. 1516.- Sim. - Sim. 24.- Sim. - Sim. 62- Sim. - Sim. 55- Sim. - Sim. 65- Sim. - Sim. 70- Sim. - Sim. 57- Sim. - Sim. 626- Sim. - Sim. 22- Sim. - Sim. 58- Sim. - Sim. 59- Sim. - Sim. 61- Sim. - Sim. 67- Sim. - Sim. 60- Sim. - Sim. 24.- Sim. - Sim. 2- Sim. - Sim. 40- Sim. - Sim. 60- Sim. - Sim. 58- Sim. - Sim. 49- Sim. - Sim. 63- Sim. - Sim. 68- Sim. - Sim. 58- Sim. - Sim. 51- Sim. - Sim. 60- Sim. - Sim. 70- Sim. - Sim. 53- Sim. - Sim. 43- Sim. - Sim. 57- Sim. - Sim. 64- Sim. - Sim. 69- Sim. - Sim. 73- Sim. - Sim. 67- Sim. - Sim. 63- Sim. - Sim. 45- Sim. - Sim. 41- Sim. - Sim. 49- Sim. - Sim. 59- Sim. - Sim. 60- Sim. - Sim. 63- Sim. - Sim. 52- Sim. - Sim. 50- Sim. - Sim. 34]↓Sim..Não.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, Bigg downarrow }y.}
O próximo passo é obter a DCT bidimensional, que é dada por:
- Gu,v= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =14α α (u)α α (v)Gerenciamento Gerenciamento x= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =07Gerenciamento Gerenciamento Sim.= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =07gx,Sim.e Não.(2x+1)uD D 16.]e Não.(2Sim.+1)vD D 16.]{displaystyle G_{u,v}={frac {1}{4}}alpha (u)alpha (v)sum _{x=0}^{7}sum _{y=0}^{7}g_{x,y}cos left[{frac {(2x+1)upi }{16}}right]cos left[{frac {2y+1)vpi }{16}}right]}
onde
- uNão. é a frequência espacial, para os inteiros <math alttext="{displaystyle 0leq u0≤ ≤ u<8{displaystyle 0leq u<8}}<img alt=" 0leq u.
- v{displaystyle v} é a frequência espacial vertical, para os inteiros <math alttext="{displaystyle 0leq v0≤ ≤ v<8{displaystyle 0leq v<8}}<img alt=" 0leq v.
- α α (u)= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =(12,seu= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =01,caso contrário{displaystyle alpha (u)={begin{cases}{frac {1}{sqrt {2}}},&{mbox{if }}u=0\1,&{mbox{otherwise}}end{cases}}} é um fator de escala normalizador para fazer a transformação ortonormal
- gx,Sim.{displaystyle g_{x,y}} é o valor do pixel em coordenadas (x,Sim.)(x,y)}
- Gu,v{displaystyle G_{u,v}} é o coeficiente DCT em coordenadas (u,v).(u,v). ?
Se realizarmos esta transformação em nossa matriz acima, obteremos o seguinte (arredondado para os dois dígitos mais próximos após o ponto decimal):
- G= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =u⟶ ⟶ ⟶ ⟶ Não.- Sim. - Sim. 415.38- Sim. - Sim. 30.19- Sim. - Sim. 61.2027.2456.12- Sim. - Sim. 20.10- Sim. - Sim. 2.3904.47- Sim. - Sim. 21.86- Sim. - Sim. 60.7610.2513.15- Sim. - Sim. 7.09- Sim. - Sim. 8.544.88- Sim. - Sim. 46.837.3777.13- Sim. - Sim. 24.56- Sim. - Sim. 28.919.935.42- Sim. - Sim. 5.65- Sim. - Sim. 48.5312.0734.10- Sim. - Sim. 14.76- Sim. - Sim. 10.246.301,831.9512.12.1990- Sim. - Sim. 6.55- Sim. - Sim. 13.20- Sim. - Sim. 3.95- Sim. - Sim. 1,81.75- Sim. - Sim. 2.793.14- Sim. - Sim. 7.732.912.38- Sim. - Sim. 5.94- Sim. - Sim. 2.380,944.301,805- Sim. - Sim. 1.030,180,402- Sim. - Sim. 2.4.2- Sim. - Sim. 0,8- Sim. - Sim. 3.024.12- Sim. - Sim. 0.66- Sim. - Sim. 0,170,14- Sim. - Sim. 1.07- Sim. - Sim. 4.19- Sim. - Sim. 1.17- Sim. - Sim. 0,100,501.68]↓v.Não. 1,79&.19.19.19.19.19.19.19.19. Bigg downarrow }v.}
Observe a entrada do canto superior esquerdo com a magnitude bastante grande. Este é o coeficiente DC (também chamado de componente constante), que define a tonalidade básica para todo o bloco. Os 63 coeficientes restantes são os coeficientes AC (também chamados de componentes alternados). A vantagem da 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 enquanto reduz simultaneamente o tamanho geral dos coeficientes DCT, resultando em um sinal que é fácil de comprimir com eficiência no estágio de entropia.
O DCT aumenta temporariamente a profundidade de bits dos dados, pois 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 nesse ponto; esses valores são normalmente reduzidos para 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, pois normalmente apenas uma parte muito pequena da imagem é armazenada no formato DCT completo em um determinado 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 força 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 inteiro mais próximo. Esta operação de arredondamento é a única operação com perdas em todo o processo (além da subamostragem de croma) se o cálculo DCT for realizado com precisão suficientemente alta. Como resultado disso, normalmente 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 levam 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:
- Q= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =Não.16.1110.16.24.4051611212141926586055141316.24.405769561417.2229 de Março5187806218.223756681091037724.35556481104113924964788710312112010172929598112100.10399].Não. P={begin{bmatrix}16&11&10&16&24&40&51&6112&14&192658&60&5514&1316&24&40&57&69&5614&1722&51&87&806218&2237&68&10
Os coeficientes DCT quantizados são calculados com
- BJJ,k= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =RounD(GJJ,kQJJ,k)paraJJ= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =0,1,2,...... ,7;k= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =0,1,2,...... ,7Não. B_{j,k}=mathrm {round} left({frac {G_{j,k}}{Q_{j,k}}}right){mbox{ para }}j=0,1,2,ldots7;k=0,1,2,ldots7}
Onde? GNão. G. é os coeficientes DCT não-quantizados; QNão. é a matriz de quantificação acima; e BNão. é os coeficientes DCT quantificados.
Usar esta matriz de quantização com a matriz de coeficientes DCT acima resulta em:
- B= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =Não.- Sim. - Sim. 26- Sim. - Sim. 3- Sim. - Sim. 622- Sim. - Sim. 1000- Sim. - Sim. 2- Sim. - Sim. 411000- Sim. - Sim. 315- Sim. - Sim. 1- Sim. - Sim. 1000- Sim. - Sim. 312- Sim. - Sim. 1000010000000000000000000000000000000].&0 &0 &0
Por exemplo, usando −415 (o coeficiente DC) e arredondando para o inteiro mais próximo
- RounD(- Sim. - Sim. 415.3716.)= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =RounD(- Sim. - Sim. 25.96)= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =- Sim. - Sim. 26.{displaystyle mathrm {round} left({frac {-415.37}{16}}right)=mathrm {round} left(-25.96right)=-26.}
Observe que a maioria dos elementos de frequência mais alta do sub-bloco (ou seja, aqueles com uma frequência espacial x ou y maior que 4) são quantizados em zero valores.
Codificação de entropia
A codificação de entropia é uma forma especial de compactação de dados sem perdas. Trata-se de organizar os componentes da imagem em "zigue-zague" ordem empregando 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 suportar o uso de codificação aritmética, que é matematicamente superior à codificação Huffman. No entanto, esse recurso raramente foi usado, pois foi 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 tal diferenciação de predição.
A sequência em zigue-zague para os coeficientes quantizados acima é mostrada abaixo. (O formato mostrado é apenas para facilitar a compreensão/visualização.)
- Não. -3 0 -3 -2 -6 2 -4 1 -3 1 1 5 1 2 - Sim. 1 - Sim. 2 0 0 0 0 0 - Sim. - Sim. 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 Eu...-o bloco é representado por BEu...Não. B_{i}} e as posições dentro de cada bloco são representadas (p,q)(p,q)} Onde? p= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =0,1,...,7Não. e q= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =0,1,...,7- Sim., então qualquer coeficiente na imagem DCT pode ser representado como BEu...(p,q)(p,q)}. Assim, no esquema acima, a ordem de codificação de pixels (para o Eu...-o bloco) é BEu...(0,0)(0,0)}, BEu...(0,1)(0,1)}, BEu...(1,0)- Sim., BEu...(2,0)(2,0)}, BEu...(1,1)- Sim., BEu...(0,2)(0,2)}, BEu...(0,3)(0,3)}, BEu...(1,2)- Sim. e assim por diante.
Este modo de codificação é chamado de baseline sequencial codificação. Baseline JPEG também suporta progressivo codificação. Enquanto a codificação sequencial codifica coeficientes de um único bloco de cada vez (em uma maneira ziguezague), codificação progressiva codifica lote de coeficientes de todos os blocos em uma só vez (chamado de um digitalização), seguido pelo próximo lote de coeficientes de todos os blocos, e assim por diante. Por exemplo, se a imagem é dividida em blocos N 8×8 B0,B1,B2,...,Bn- Sim. - Sim. 1{displaystyle B_{0},B_{1},B_{2},...,B_{n-1}}, então um componente DC de codificação progressiva de 3 latas, BEu...(0,0)(0,0)} para todos os blocos, ou seja, para todos Eu...= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =0,1,2,...,N- Sim. - Sim. 1Não.Na primeira análise. Isto é seguido pela segunda verificação que codifica mais alguns componentes (assumindo mais quatro componentes, eles são BEu...(0,1)(0,1)} para BEu...(1,1)- Sim., ainda de forma ziguezague) coeficientes de todos os blocos (por isso a sequência é: B0(0,1),B0(1,0),B0(2,0),B0(1,1),B1(0,1),B1(1,0),...,BN(2,0),BN(1,1)(0,1),B_{0}(1,0),B_{0}(2,0),B_{0}(1,1),B_{1}(0,1),B_{1}(1,0),...,B_{N}(2,0),B_{N}(1,1)}), seguido por todos os coeficientes permanecidos de todos os blocos na última varredura.
Depois que todos os coeficientes de posição semelhante tiverem 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. Verificou-se que a codificação baseline progressiva JPEG geralmente oferece melhor compactação em comparação com baseline sequencial JPEG devido à capacidade de usar diferentes tabelas de Huffman (veja abaixo) adaptadas para diferentes frequências em cada "digitalização" ou "passar" (que inclui coeficientes de posição semelhante), 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; os codificadores também podem optar por gerar tabelas de Huffman 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 zig-zag começa com uma codificação de comprimento de execução explicada abaixo, onde:
- x é o coeficiente AC não zero, quantificado.
- PRINCIPAIS é o número de zeros que vieram antes deste coeficiente AC não zero.
- SIZE é o número de bits necessários para representar x.
- AMPLITUAÇÃO é a representação de bits x.
A codificação run-length funciona examinando cada coeficiente AC diferente de zero x e determinando quantos zeros vieram antes do anterior Coeficiente CA. Com esta informação, 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.
Isto tem a implicação imediata de Símbolo 1 ser capaz de armazenar apenas informações sobre os primeiros 15 zeros que precedem o coeficiente AC diferente de zero. No entanto, o JPEG define duas palavras de código Huffman especiais. Um é para terminar a sequência prematuramente quando os coeficientes restantes são zero (chamado "Fim-de-Bloco" ou "EOB"), e outro quando a sequência de zeros ultrapassa 15 antes de atingir um coeficiente AC diferente de zero. Nesse caso, onde 16 zeros são encontrados antes de um determinado coeficiente AC diferente de zero, Símbolo 1 é codificado "especialmente" como: (15, 0)(0).
O processo geral continua até "EOB" – denotado por (0, 0) – é atingido.
Com isso em mente, a sequência anterior se torna:
- (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; 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 números pequenos 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 compactação e artefatos
A taxa de compressão resultante pode ser variada conforme a necessidade sendo mais ou menos agressiva nos divisores utilizados na fase de quantização. A compactação dez para um geralmente resulta em uma imagem que não pode ser distinguida a olho nu do original. Uma taxa de compactação de 100:1 geralmente é possível, mas parecerá distintamente artificial em comparação com o original. O nível apropriado de compactação depende do uso a que a imagem será destinada.
Aqueles que usam a World Wide Web podem estar familiarizados com as irregularidades conhecidas como artefatos de compactação que aparecem em imagens JPEG, que podem assumir a forma de ruído em torno de bordas contrastantes (especialmente curvas e cantos) ou "em blocos&# 34; imagens. Isso se deve à etapa de quantização do algoritmo JPEG. Eles são especialmente perceptíveis em 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 referidos como ruído de mosquito, como a "ocupação de borda" e pontos espúrios, que mudam com o tempo, lembram mosquitos que pululam ao redor do objeto.
Esses artefatos podem ser reduzidos escolhendo um nível mais baixo de compactação; eles podem ser completamente evitados salvando 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 compactaçã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 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 perdida |
---|---|---|
Original | ||
Processado por Detector de borda de canny |
Alguns programas permitem que o usuário varie a quantidade pela qual os blocos individuais são compactados. A compactação mais forte é aplicada às áreas da imagem que mostram menos artefatos. Desta forma é possível reduzir manualmente o tamanho do arquivo JPEG com menor 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 compressão com perdas. (As informações são perdidas na quantização e no arredondamento dos números de ponto flutuante.) Mesmo que a matriz de quantização seja 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 ao contrário.
Pegando a matriz de coeficientes DCT (depois de adicionar a diferença do coeficiente DC de volta)
- Não.- Sim. - Sim. 26- Sim. - Sim. 3- Sim. - Sim. 622- Sim. - Sim. 1000- Sim. - Sim. 2- Sim. - Sim. 411000- Sim. - Sim. 315- Sim. - Sim. 1- Sim. - Sim. 1000- Sim. - Sim. 312- Sim. - Sim. 1000010000000000000000000000000000000]&0 &0
e tomando o produto entrada por entrada com a matriz de quantização acima resulta em
- Não.- Sim. - Sim. 416- Sim. - Sim. 33- Sim. - Sim. 603248- Sim. - Sim. 40000- Sim. - Sim. 24.- Sim. - Sim. 561926000- Sim. - Sim. 421380- Sim. - Sim. 24.- Sim. - Sim. 40000- Sim. - Sim. 4217.44- Sim. - Sim. 29 de Março000018.0000000000000000000000000000000]&0 &0
que se assemelha muito à matriz de coeficiente DCT original para a parte superior esquerda.
O próximo passo é pegar a DCT inversa bidimensional (uma DCT 2D tipo III), que é dada por:
fx,Sim.= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =14Gerenciamento Gerenciamento u= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =07Gerenciamento Gerenciamento v= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =07α α (u)α α (v)Fu,ve Não.(2x+1)uD D 16.]e Não.(2Sim.+1)vD D 16.]Não. f_{x,y}={frac {1}{4}}sum _{u=0}^{7}sum _{v=0}^{7}alpha (u)alpha (v)F_{u,v}cos left[{frac {2x+1)upi }{16}}right]cos left[{frac {2y+1)vpi }{16}}right]}
onde
- x{displaystyle x} é a linha de pixels, para os inteiros <math alttext="{displaystyle 0leq x0≤ ≤ x<8{displaystyle 0leq x<8}}<img alt=" 0leq x.
- Sim.- Sim. é a coluna de pixel, para os inteiros <math alttext="{displaystyle 0leq y0≤ ≤ Sim.<8{displaystyle 0leq y<8}}<img alt=" 0leq y.
- α α (u)(u)} é o fator de escala de normalização definido anteriormente, para os inteiros <math alttext="{displaystyle 0leq u0≤ ≤ u<8{displaystyle 0leq u<8}}<img alt=" 0leq u.
- Fu,v{displaystyle F_{u,v}} é o coeficiente DCT aproximado em coordenadas (u,v).(u,v). ?
- fx,Sim.{displaystyle f_{x,y}} é o valor de pixel reconstruído em coordenadas (x,Sim.)(x,y)}
Arredondar a saída para valores inteiros (já que o original tinha valores inteiros) resulta em uma imagem com valores (ainda deslocados para baixo em 128)
- Não.- Sim. - Sim. 66- Sim. - Sim. 63- Sim. - Sim. 71- Sim. - Sim. 68- Sim. - Sim. 56- Sim. - Sim. 65- Sim. - Sim. 68- Sim. - Sim. 46.- Sim. - Sim. 71- Sim. - Sim. 73- Sim. - Sim. 72- Sim. - Sim. 46.- Sim. - Sim. 20.- Sim. - Sim. 41- Sim. - Sim. 66- Sim. - Sim. 57- Sim. - Sim. 70- Sim. - Sim. 78- Sim. - Sim. 68- Sim. - Sim. 17.20.- Sim. - Sim. 14- Sim. - Sim. 61- Sim. - Sim. 63- Sim. - Sim. 63- Sim. - Sim. 73- Sim. - Sim. 62- Sim. - Sim. 827- Sim. - Sim. 14- Sim. - Sim. 60- Sim. - Sim. 58- Sim. - Sim. 58- Sim. - Sim. 65- Sim. - Sim. 61- Sim. - Sim. 27- Sim. - Sim. 6- Sim. - Sim. 40- Sim. - Sim. 68- Sim. - Sim. 50- Sim. - Sim. 57- Sim. - Sim. 57- Sim. - Sim. 64- Sim. - Sim. 58- Sim. - Sim. 48- Sim. - Sim. 66- Sim. - Sim. 72- Sim. - Sim. 47- Sim. - Sim. 53- Sim. - Sim. 46.- Sim. - Sim. 61- Sim. - Sim. 74- Sim. - Sim. 65- Sim. - Sim. 63- Sim. - Sim. 62- Sim. - Sim. 45- Sim. - Sim. 47- Sim. - Sim. 34- Sim. - Sim. 53- Sim. - Sim. 74- Sim. - Sim. 60- Sim. - Sim. 47- Sim. - Sim. 47- Sim. - Sim. 41],19.
e adicionando 128 a cada entrada
- Não.62655760726360825755568210887627158506011114811467656555661201551146870706367101122886078717164708062568175826754636566838194755468818187].(em inglês),8&68,66&19.
Esta é a subimagem descomprimida. Em geral, o processo de descompressão pode produzir valores fora da faixa de entrada original Não.0,255][0,255]. Se isso ocorrer, o decodificador precisa cortar os valores de saída para mantê-los dentro desse intervalo para evitar o excesso ao armazenar a imagem descomprimida com a profundidade de bit original.
A subimagem descompactada pode ser comparada com a subimagem original (veja também as imagens à direita) tomando os resultados da diferença (original − descompactado) nos seguintes valores de erro:
- Não.- Sim. - Sim. 10.- Sim. - Sim. 10.46- Sim. - Sim. 2- Sim. - Sim. 24- Sim. - Sim. 964- Sim. - Sim. 181- Sim. - Sim. 2714982- Sim. - Sim. 4- Sim. - Sim. 10.- Sim. - Sim. 18- Sim. - Sim. 2352- Sim. - Sim. 1- Sim. - Sim. 82- Sim. - Sim. 1- Sim. - Sim. 3- Sim. - Sim. 213408- Sim. - Sim. 88- Sim. - Sim. 6- Sim. - Sim. 4- Sim. - Sim. 0- Sim. - Sim. 362- Sim. - Sim. 610.- Sim. - Sim. 11- Sim. - Sim. 35- Sim. - Sim. 8- Sim. - Sim. 4- Sim. - Sim. 1- Sim. - Sim. 06- Sim. - Sim. 15- Sim. - Sim. 614- Sim. - Sim. 3- Sim. - Sim. 5- Sim. - Sim. 37],,,,,,,, &,,,,,,,,,,,,,,, &,,,,,, &,,,,,,,,,, &,,,
com um erro absoluto médio de cerca de 5 valores por pixels (i.e., 164Gerenciamento Gerenciamento x= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =07Gerenciamento Gerenciamento Sim.= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =07|e(x,Sim.)|= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =4.8750{displaystyle {frac {1}{64}}sum _{x=0}^{7}sum _{y=0}^{7}|e(x,y)|=4.8750}).
O erro é mais perceptível no canto inferior esquerdo, onde o pixel inferior esquerdo fica mais escuro do que o pixel imediatamente à direita.
Precisão necessária
A precisão de implementação necessária de um codec JPEG é definida implicitamente por meio dos requisitos formulados para conformidade com o padrão JPEG. Esses requisitos são especificados na Recomendação ITU.T T.83 | ISO/IEC 10918-2. Ao contrário dos padrões MPEG e muitos padrões JPEG posteriores, o documento acima define as precisões de implementação necessárias para a codificação e o processo de decodificação de um codec JPEG por meio de um erro máximo tolerável do DCT direto e inverso no domínio DCT conforme determinado pelo teste de referência fluxos. Por exemplo, a saída de uma implementação de decodificador não deve exceder um erro de uma unidade de quantização no domínio DCT quando aplicada aos fluxos de códigos de teste de referência fornecidos como parte do padrão acima. Embora incomum e diferente de muitos outros padrões mais modernos, ITU.T T.83 | ISO/IEC 10918-2 não formula limites de erro no domínio da imagem.
Efeitos da compactação JPEG
Os artefatos de compactação JPEG se misturam bem em fotografias com texturas não uniformes detalhadas, permitindo taxas de compactação mais altas. Observe como uma taxa de compactaçã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 ser primeiro 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 menor qualidade) para preservar a precisão do plano de luminância com mais bits de informação.
Exemplos de fotos
Para obter informações, a imagem 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ção JPEG internos e alguns metadados. Para imagens da mais alta qualidade (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 (uma informação de cor de qualidade Q=100 comparável requer cerca de 25% mais bits codificados). A imagem de qualidade mais alta abaixo (Q=100) é codificada em nove bits por pixel colorido, a imagem de qualidade média (Q=25) usa um bit por pixel colorido. Para a maioria das aplicações, o fator de qualidade não deve ficar abaixo de 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 bit por pixel e exibe cores muito ruins. Isso é útil quando a imagem será exibida em um tamanho significativamente reduzido. Um método para criar melhores matrizes de quantização para uma determinada qualidade de imagem usando PSNR em vez do fator Q é descrito em Minguillón & Pujol (2001).
A foto de qualidade média usa apenas 4,3% do espaço de armazenamento necessário para a imagem não compactada, mas apresenta 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. Veja o artigo sobre a teoria da taxa de distorção para uma explicação matemática deste efeito de limiar. Uma limitação particular do JPEG a esse 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 mais suave da qualidade à 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.
Compressão adicional sem perdas
De 2004 a 2008, surgiram novas pesquisas sobre maneiras de comprimir 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 padrão de compactação de uso geral não podem compactar significativamente os arquivos JPEG.
Normalmente, esses esquemas aproveitam as melhorias do esquema ingênuo para codificar coeficientes DCT, que não leva em conta:
- 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 assemelham-se a uma versão de downscale da imagem original multiplicada por um fator de escala. Os esquemas bem conhecidos para codificação sem perdas de imagens contínuas de tons podem ser aplicados, alcançando uma compressão um pouco melhor do que o Huffman codificado DPCM usado em JPEG.
Algumas opções padrão, mas raramente usadas, já existem no JPEG para melhorar a eficiência da codificação de 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 uma distribuição significativamente diferente). Os métodos modernos melhoraram essas técnicas ao reordenar os coeficientes para agrupar coeficientes de maior magnitude; usando coeficientes e blocos adjacentes para prever novos valores de coeficiente; 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 subseqüentes 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% 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 "Redução de redundância aprimorada para arquivos JPEG"
Formatos derivados para 3D estereoscópico
JPEG estereoscópico
JPS é uma imagem JPEG estereoscópica usada para criar efeitos 3D a partir de imagens 2D. Contém duas imagens estáticas, uma para o olho esquerdo e outra para o olho direito; codificadas como duas imagens lado a lado em um único arquivo JPG. JPEG Estereoscópico (JPS, extension.jps) é um formato baseado em JPEG para imagens estereoscópicas. Ele possui uma variedade 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 no lado vesgo (ou seja, quadro esquerdo na metade direita da imagem e vice-versa). disposição ao lado. Esse formato de arquivo pode ser visualizado como JPEG sem nenhum software especial ou pode ser processado para renderização em outros modos.
Formato multi-imagem JPEG
O Formato Multi-Imagem JPEG (MPO, extension.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 marcador JPEG APP2 para descrição da imagem. Vários dispositivos o utilizam para armazenar imagens 3D, como Fujifilm FinePix Real 3D W1, HTC Evo 3D, JVC GY-HMZ1U AVCHD/MVC extension camcorder, Nintendo 3DS, Panasonic Lumix DMC-TZ20, DMC-TZ30, DMC-TZ60, DMC- TS4 (FT4) e Sony DSC-HX7V. Outros dispositivos o utilizam para armazenar "visualizar imagens" que podem ser exibidos 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.
Implementações
Uma implementação muito importante de um codec JPEG é a biblioteca de programação gratuita libjpeg do Independent JPEG Group. Foi publicado pela primeira vez em 1991 e foi fundamental para o sucesso do padrão. Esta biblioteca ou um derivado direto dela é usado em inúmeras aplicações. Versões recentes introduziram extensões proprietárias, quebrando a compatibilidade ABI com versões anteriores e que não são cobertas pelo padrão ITU|ISO/IEC.
Em março de 2017, o Google lançou o projeto de código aberto Guetzli, que troca um tempo de codificação muito mais longo por um tamanho de arquivo menor (semelhante ao que o Zopfli faz para PNG e outros formatos de dados sem perdas).
ITU|ISO/IEC formalizou implementações de referência JPEG na Recomendação ITU-T T.873 | ISO/IEC 10918-7 em 2021.
O ISO/IEC Joint Photography Experts Group mantém uma das duas implementações de software de referência que podem codificar extensões JPEG base (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).
Uma segunda implementação de referência é libJPEG-turbo, que é um derivado da implementação JPEG do Independent JPEG Group ajustado para alto desempenho e conformidade com o padrão JPEG.
JPEG XT
JPEG XT (ISO/IEC 18477) foi publicado em junho de 2015; ele estende o formato JPEG básico com suporte para profundidades de bits inteiras mais altas (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 base JPEG de 8 bits e restaurar a imagem de alta resolução. O software existente é compatível com versões anteriores e pode ler o fluxo binário JPEG XT, embora decodifique apenas a camada básica de 8 bits.
JPEG XL
Desde agosto de 2017, JTC1/SC29/WG1 emitiu uma série de rascunhos de propostas sobre JPEG XL – o padrão de compactação de imagem de próxima geração com eficiência de compactação substancialmente melhor (melhoria de 60%) em comparação com JPEG. Espera-se que o padrão exceda 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 tentam substituir o JPEG, forneça uma opção de armazenamento e transporte de recompressão mais eficiente e sem perdas para imagens JPEG tradicionais. Os principais requisitos incluem suporte para imagens de resolução muito alta (pelo menos 40 MP), 8–10 bits por componente, codificação de cores RGB/YCbCr/ICtCp, imagens animadas, codificação de canal alfa, Rec. 709 espaço de cores (sRGB) e função gama (potência 2,4), Rec. 2100 ampla gama de cores (Rec. 2020) e funções de transferência de alta faixa dinâmica (PQ e HLG) e compactação de alta qualidade de imagens sintéticas, como fontes de bitmap e gradientes. O padrão também deve oferecer profundidades de bits mais altas (número inteiro de 12 a 16 bits e ponto flutuante), espaços de cores adicionais e funções de transferência (como Log C de Arri), imagens de visualização incorporadas, codificação de canal alfa sem perdas, codificação de região de imagem e baixo custo. codificação de complexidade. Quaisquer tecnologias patenteadas seriam licenciadas sem royalties. As propostas foram submetidas até setembro de 2018, levando a um rascunho do comitê em julho de 2019, com formato de arquivo e sistema de codificação central formalmente padronizados em 13 de outubro de 2021 e 30 de março de 2022, respectivamente.
Contenido relacionado
Atari 7800
Veículo de combate blindado
Kamov Ka-50