Ao criar um JPEG, como posso minimizar a ocorrência de artefatos?

10

Existem 2 fatores principais que parecem levar a artefatos digitais ao criar imagens JPEG: Alias ​​e Compactação.

Exemplo:

Converter um PNG com caracteres em JPEG ou colocar imagens vetoriais em uma fotografia resultará em pixelização nas bordas. O antialiasing geralmente cria um tipo de desfoque em torno deles, mas se a imagem é compactada com perda , parte dos detalhes também é perdida; portanto, o desfoque e a pixelização podem se tornar menos perceptíveis.

Esta é a coisa certa a fazer? Ou seja, como uma compactação sem perdas gera uma imagem altamente detalhada, os artefatos resultantes do aliasing serão mais perceptíveis; portanto, um equilíbrio pode ser encontrado usando a compactação correta, embora comprometendo a qualidade da imagem.

Editar

Acabei de salvar este JPEG no mspaint (3,46 KB):

Sem perdas

Aqui está o mesmo JPEG com compactação máxima (qualidade mais baixa, 0,5 KB):

Com perdas

Aqui está o mesmo JPEG com 50% de compactação (observe a diferença de tamanho, 1,29 KB):

Meia sem opções

A mesma compactação de 50%, mas salva como "JPG progressivo", manteve os dados EXIF ​​e XMP originais e "tentou salvar com qualidade JPG original" (você pode notar que não existem pixels cinza em torno de 2,96 KB):

Meias opções

E finalmente o mesmo de antes com a subamostragem de croma desativada (mesmo tamanho de arquivo, 2,96 KB):

Metade-sem-croma

Armfoot
fonte
1
Apenas curioso, qual é o seu motivo para querer jpg, é o tamanho menor do arquivo? Caso isso ajude a sua situação específica, você conhece as texturas de compressão dxt ou de campo de distância?
Alan Wolfe
1
Não está claro para mim qual é a sua pergunta. Deseja saber se é bom compactar usando JPEG? Deseja saber que tipos de imagens são compactados bem com JPEG? Ou você já está usando JPEG e gostaria de saber como criar suas imagens para minimizar os artefatos causados ​​pelo JPEG?
Mokosha
@AlanWolfe Encontrei algumas ocasiões em que eu só conseguia usar JPEG (principalmente em aplicativos da web), e é por isso que eu precisava que fosse em JPEG. Obrigado, mas eu não estava familiarizado com a compressão dxt nem com as texturas dos campos de distância. Pelo que vi na wikipedia , os algoritmos dxt são diferentes dos usados ​​no JPEG, você quer dizer que eles podem ser usados ​​para criar JPEGs?
Armfoot
@Moshoka obrigado, está mais relacionado à sua última pergunta: como minimizar o "impacto visual" causado pelos artefatos nas imagens JPEG?
Armfoot
lembre-se de que o mozjpegcompressor possui um truque especial para produzir menos distorção nesses tipos de imagens. (e é mais eficiente em geral do que os escritores jpeg comuns também.) você tentou?
Exibir nome

Respostas:

9

A compactação JPEG envolve três etapas principais:

  1. Subamostragem de croma . A imagem é convertida de RGB para o espaço de cor YCbCr, em que a luminância ou brilho (Y) é armazenada separadamente dos croma componentes ou de cor, Cr e Cb. O componente Y é mantido em resolução total, mas Cb e Cr são redimensionados, geralmente para meia resolução em cada eixo. Isso explora o fato de que o sistema visual humano é mais sensível a pequenos detalhes de brilho do que de cores.

  2. Quantização de frequência. As imagens Y, Cb e Cr são convertidas em uma representação de frequência, dividindo-as em blocos 8x8 e aplicando a transformada discreta de cosseno (uma variante da transformação de Fourier) a cada bloco. O resultado é uma matriz de números que descreve as amplitudes de diferentes frequências espaciais no bloco. Esses números podem ser quantizados (arredondados para um número escolhido de bits de precisão). Diferentes níveis de quantização são usados ​​para diferentes frequências, explorando a sensibilidade relativamente baixa do nosso sistema visual a altas frequências. É aqui que a configuração de qualidade do codificador JPEG entra em jogo: qualidades mais baixas usam quantização mais grossa.

  3. Codificação de entropia . Os valores DCT quantificados são passados ​​através de um codificador de entropia, que comprime sem perdas o fluxo de bits usando menos bits para representar os valores mais comuns, como um arquivo zip.

As etapas 1 e 2 são as com perda e cada uma produz seu próprio tipo de artefato (embora exista alguma sobreposição). A subamostragem de croma tende a desfocar as bordas afiadas entre regiões de cores diferentes. Isso é particularmente visível na arte vetorial, onde formas de cores vivas captam dentinhos cruéis em torno de suas bordas. A quantização de frequência desfoca detalhes finos em geral e também cria artefatos em forma de bloco em configurações de baixa qualidade, porque o DCT é feito bloco a bloco. É particularmente visível no texto.

É por isso que o JPEG geralmente não é usado para imagens que contenham gráficos vetoriais ou texto - seus algoritmos de compactação são pouco adequados para esses casos, embora funcionem bem para fotografias e outras imagens com textura complexa e bordas não muito nítidas.

Nathan Reed
fonte
Muito obrigado pela sua explicação detalhada Nathan +1. Entendo que os algoritmos de compactação têm suas limitações para JPEG, mas eu só queria descobrir se há um equilíbrio certo entre a quantidade de compactação e outras opções (ao salvá-la) que podem tornar os artefatos menos perceptíveis. Eu editei minha pergunta com amostras.
precisa saber é o seguinte