Durante anos, acreditei que recomprimir arquivos JPEG várias vezes degradaria gradualmente sua qualidade até que se tornassem uma bagunça irreconhecível, como faz fotocópias de fotocópias. Intuitivamente, isso faz sentido porque o JPEG é um formato com perdas. Também existem outras perguntas e respostas que afirmam que é assim:
Que qualidade de imagem é perdida ao salvar novamente uma imagem JPEG no MS Paint?
Simplesmente abrir e fechar um arquivo JPEG diminui a qualidade da imagem?
No entanto, também li que recomprimir JPEGs no mesmo nível de qualidade não prejudicará a qualidade da imagem. Isso contraria a degradação gradual descrita em outro lugar.
O que tecnicamente acontece quando um JPEG é recomprimido? O que está sendo perdido e como? A imagem realmente se transformará na bagunça nevada que costumava aparecer na televisão? E os vídeos que mostram imagens que desmoronam após serem recomprimidas várias vezes?
(Por favor, não apenas acenar com a mão e apelar para o conceito geral de perda.)
(Esta pergunta, e as respostas que ela atraiu até agora, concentram-se nos fatores técnicos (configurações específicas e manipulações de imagem) que causam ou impedem a degradação da imagem quando um arquivo JPEG é recomprimido várias vezes.)
fonte
Respostas:
Quase todas as perdas na qualidade da imagem ocorrem na primeira vez que uma imagem é compactada como JPEG. Independentemente de quantas vezes um JPEG é recomprimido com as mesmas configurações , as perdas geracionais são limitadas ao erro de arredondamento.
Os limites do MCU permanecem intactos (8x8 blocos).
A subamostragem de croma está desativada.
DQT constante (mesma configuração de qualidade).
No entanto, os erros de arredondamento podem ser grandes para cada iteração em que os critérios acima não são atendidos e é prudente manter backups de todos os arquivos originais.
O algoritmo de compactação JPEG
Converter espaço de cores. Se desejar, reduza a informação da cor (subamostra de croma) (Perda) . Se não for reduzida, a perda de informações é o resultado de um erro de arredondamento .
Segmentação. Divida cada canal em blocos 8x8 (MCU = Unidade de codificação mínima). (Sem perdas)
Nota: Se a subamostragem de croma estiver ativada, as MCUs poderão ser efetivamente 16x8, 8x16 ou 16x16, em termos da imagem original. No entanto, os MCUs ainda são todos os blocos 8x8.
Transformação discreta de cosseno (DCT) em cada MCU. A perda de informações é o resultado de um erro de arredondamento .
Quantização. O valor em cada célula do MCU é dividido por um número especificado em uma tabela de quantização (DQT). Os valores são arredondados para baixo, muitos dos quais se tornarão zero. Essa é a parte com perdas primária do algoritmo.
Digitalização em zigue-zague. Reorganize os valores em cada MCU em uma sequência de números seguindo um padrão em zigue-zague. Os zeros que ocorreram durante a quantização serão agrupados. (Sem perdas)
DPCM = Modulação por código de pulso diferencial. Converta as seqüências numéricas em um formato mais fácil de compactar. (Sem perdas)
RLE = Execução de codificação de comprimento. Zeros consecutivos são compactados. (Sem perdas)
Codificação de Entropia / Huffman. (Sem perdas)
Recomprimindo JPEGs
Observe que a redução da amostragem dos canais de cores e a quantização são as únicas etapas intencionalmente com perdas . Deixando de lado o erro de arredondamento por enquanto, todas as outras etapas são sem perdas. Depois que a quantização ocorre, a reversão e a repetição da etapa fornecem resultados idênticos. Em outras palavras, a re-quantização (com o mesmo DQT) é sem perdas .
Em princípio, é possível criar um algoritmo de reamostragem sem perdas após a primeira passagem. No entanto, com a implementação no ImageMagick, as cores podem mudar drasticamente antes que o estado estacionário seja atingido, como visto na imagem desta.
Dadas as condições ideais, recomprimir um JPEG com as mesmas configurações de qualidade resultaria exatamente no mesmo JPEG. Em outras palavras, recomprimir JPEGs é potencialmente sem perdas . Na prática, recomprimir JPEGs não é sem perdas, mas está sujeito a, e limitado por, erro de arredondamento. Embora os erros de arredondamento geralmente acabem convergindo para zero , para que a mesma imagem seja recriada, a subamostragem de croma pode resultar em alterações significativas de cor.
Demonstração (mesma configuração de qualidade)
Eu escrevi o seguinte
bash
script, que usa o ImageMagick para recomprimir repetidamente um arquivo JPEG em uma determinada configuração de qualidade:Depois de deixá-lo rodar por algumas centenas de iterações, executei
md5sum
os resultados:Podemos ver que, de fato, o erro de arredondamento convergiu para zero e a mesma imagem exata está sendo reproduzida repetidamente .
Repeti isso várias vezes com diferentes imagens e configurações de qualidade. Normalmente, o estado estacionário é atingido, ea exata mesma imagem é reproduzida repetidamente.
E os resultados da @ mattdm ?
Eu tentei replicar os resultados do mattdm usando o Imagemagick no Ubuntu 18.04. O original foi uma conversão bruta para TIFF em Rawtherapee, mas parece não estar mais disponível. Em seu lugar, peguei a versão ampliada e a reduzi ao tamanho original (256x256). Então recompactei repetidamente aos 75 anos até obter convergência. Aqui está o resultado (original, 1, n, diferença):
Meus resultados são diferentes. Sem o original verdadeiro, a razão da diferença é impossível de determinar.
E a montagem de @ ths ?
Recompactei a imagem do canto superior esquerdo da montagem até a convergência em 90. Este é o resultado (original, 1, n, diferença):
Depois de ativar a subamostragem de croma, as cores mudam quando o estado estacionário é atingido.
Alterando entre um pequeno número de configurações
Modificando a variável
q2
, a configuração de qualidade pode ser limitada a um conjunto de valores distribuídos uniformemente.Para um pequeno número de opções de configuração, o equilíbrio pode eventualmente ser alcançado , o que é visto quando os valores de md5 começam a se repetir. Parece que quanto maior o conjunto, mais tempo demora e pior a imagem se torna, antes que o equilíbrio possa ser alcançado.
O que parece acontecer em equilíbrio é que o coeficiente de DCT antes da quantização deve ser divisível para todos (ou a maioria) dos valores quânticos. Por exemplo, se alternar entre dois DQTs em que o coeficiente DCT é dividido alternadamente por 3 e 5, o equilíbrio será alcançado quando o coeficiente DCT for divisível por 15. Isso explica por que a queda na qualidade é muito maior que a diferença entre as configurações originais.
Alterando entre um número maior de configurações
O Bisonho não fica feliz quando
q2
muda assim:Para fazer um vídeo, use
ffmpeg
:Observar as primeiras 9999 iterações é quase como assistir a água ferver. Pode querer dobrar a velocidade de reprodução. Aqui está o Eeyore após 11999 iterações:
E se os limites do MCU mudarem?
Se as alterações ocorrerem um número limitado de vezes, é provável que a recompressão repetida atinja o estado estacionário. Se ocorrerem alterações a cada iteração, a imagem provavelmente será degradada de maneira semelhante a quando o DQT for alterado.
E a edição?
O efeito de recomprimir após a edição depende da edição específica realizada. Por exemplo, salvar na mesma configuração de qualidade após reduzir os artefatos JPEG reintroduziria os mesmos artefatos. No entanto, a aplicação de uma alteração localizada, como um pincel de recuperação, não afetaria áreas que não foram tocadas.
A maior queda na qualidade da imagem ocorre na primeira vez que o arquivo é compactado em uma determinada configuração de qualidade. A recompressão subsequente com a mesma configuração não deve introduzir nenhuma alteração maior que o erro de arredondamento. Portanto, eu esperaria que os ciclos de edição e salvamento em uma determinada configuração de qualidade parecessem com qualquer outra imagem salva com a mesma configuração de qualidade (desde que os limites do MCU permaneçam intactos e a subamostragem de croma esteja desativada ).
E esses vídeos?
Implementação JPEG com defeito? ( Salvar novamente 500 vezes com o Photoshop em 10/12 ) .
Alterando configurações de qualidade. (A maioria dos vídeos.)
Rompendo os limites do MCU. (Recorte ou rotação )
Outras manobras que reduzem a qualidade da imagem ou interferem no algoritmo JPEG?
Posso sobrescrever meus originais com JPEGs recomprimidos?
É prudente manter backups de todos os arquivos originais, mas se você substituir acidentalmente um, o dano provavelmente será limitado. Também seria bom trabalhar em JPEG com a subamostragem de croma desativada.
O JPEG não pode ser usado para imagens que usam mais de 8 bits por cor.
fonte
A perda de recompressão é real, especialmente quando se trabalha com níveis mais altos de compactação JPEG.
Em teoria, se você salvar novamente os arquivos JPEG com exatamente os mesmos parâmetros e alinhar sua colheita a 8 × 8 blocos, a degradação deverá ser mínima. No entanto, se você estiver usando um alto nível de compactação, verá mais perdas, porque os artefatos introduzidos pela compactação inicial são alterações permanentes na imagem e também serão recomprimidos, causando mais artefatos.
Se você salvar novamente com um baixo nível de compactação (alta qualidade, como "100" no Gimp ou 11 ou 12 no Photoshop), será difícil notar qualquer artefato adicionado recentemente. Ele não vai fazer a imagem qualquer melhor , mas não significativamente pior. No entanto, ele vai introduzir mudanças em toda a imagem.
Como um teste rápido, usei o ImageMagick para recomprimir uma imagem JPEG repetidamente a 75%. As amostras abaixo são carregadas como arquivos PNG para evitar recompressão ainda maior e tiveram seu tamanho duplicado quando converti para PNG para tornar o efeito mais óbvio. (Os originais usados no teste não foram duplicados.) Acontece que, após oito reamostragens, o efeito convergiu para um resultado perfeitamente estável, onde a recompressão novamente resulta em um arquivo idêntico bit a bit.
Aqui está o original não compactado:
Aqui está o resultado de 75% de JPEG:
E aqui está o que foi salvo novamente:
Esse segundo salvamento causa uma grande quantidade de degradação adicional!
E aqui está a imagem convergente final (8ª passagem):
Novamente, as cores são definitivamente ainda mais diferentes , incluindo alguns padrões de cores falsas, e os artefatos em blocos saltam mais. O algoritmo converge, mas para uma versão significativamente degradada. Então não faça isso.
Mas aqui está a mesma coisa com um nível de qualidade de 99%, após 9 passes (o ponto em que converge para que outros passes sejam idênticos):
Aqui, a diferença mal se registra. (Quero dizer isso literalmente; compare-os pixel por pixel com a versão não compactada e o desvio é apenas um ruído aleatório muito pequeno.) Então, e se eu voltar para a primeira imagem de 75% e depois salvar novamente em 99%? Bem, isso (depois de apenas uma vez):
Salvar com alta qualidade é definitivamente visivelmente melhor do que salvar novamente com os mesmos parâmetros, para minha surpresa. Mas há uma nova degradação óbvia em torno do aparamento rosa e dos olhos. Com a versão reciclada das mesmas configurações, os artefatos JPEG estão sendo exagerados a cada recompressão. Com a baixa resolução e a baixa qualidade que escolhi, isso acaba sendo pior do que recomprimir tudo de maneira diferente.
Nesses vídeos: encontrei este como um dos principais hits do Google. Observe que ele diz na descrição:
Ênfase adicionada - isso explica por que não há convergência, porque, em vez de salvar com as mesmas configurações ou com qualidade super alta, configurações aleatórias são usadas a cada vez .
O segundo vídeo que encontrei diz:
Então, novamente, algo foi feito para manter os erros acumulados.
De qualquer forma, para a edição prática de fotos , vale a pena mencionar que economizar 75% uma vez é muito pior do que salvar em 99% um milhão de vezes . No meu exemplo de exemplo, os artefatos a 75% são tão óbvios que a degradação adicional é como despejar água no oceano. Se você salvar em um nível alto o suficiente para que esses artefatos não sejam realmente visíveis, salvar novamente com as configurações originais é uma boa estratégia. Obviamente, se você continuar trabalhando sempre com originais não compactados, estará melhor.
Se, por algum motivo, você precisar (ou preferir fortemente) simplesmente trabalhar com JPEG, configure sua câmera para salvar na mais alta qualidade possível , mesmo que você não note a diferença nos arquivos iniciais. Consulte Vale a pena usar a configuração de qualidade JPEG Premium da Pentax? para saber mais sobre isso - não necessariamente específico da Pentax.
fonte
A recompressão tem um efeito mensurável na qualidade da imagem e esse efeito é muito mais pronunciado ao alterar as taxas de compactação.
Como uma rápida verificação aqui, alguns valores do SSIM para operações executadas em uma imagem de teste contendo uma combinação de recursos de linha e recursos contínuos. Selecionei o JPG95, porque foi isso que me ensinaram a usar na escola Ad-photo e o JPG83, porque isso é comum entre os provedores de conteúdo digital.
Portanto, a quantidade de semelhança estrutural perdida para salvar novamente na mesma compactação 10 vezes é 1/10 da perda, poupando-a na qualidade da tiff. No entanto, a perda de qualidade ao alterar a compactação JPG mesmo uma vez é a mesma que a qualidade perdida ao salvar a imagem de Tiff para JPG.
Vou executar este teste mais algumas maneiras e atualizar.
Metodologia : No ImageJ:
NOTA: muitas pessoas que olham os valores do SSIM pela primeira vez os leem como porcentagens e assumem que a diferença é pequena. Isto não é necessariamente verdade. Os valores do SSIM devem ser comparados entre si e não considerados uma variação de 1.
fonte
Nada como alguma experimentação. O seguinte script bash (escrito no Linux, pode funcionar no OSX se você tiver o ImageMagick ):
step000.jpg
)O resultado é que:
Obviamente, tudo isso pressupõe que o JPEG seja salvo pelo mesmo software com os mesmos parâmetros de cada vez.
Por enquanto, não mostrarei os resultados, prefiro permitir que você experimente suas próprias imagens. Com comentários suficientes, vou adicionar uma amostra.
fonte