Lors de la création d'un JPEG, comment puis-je minimiser l'occurrence d'artefacts?

10

Il existe 2 principaux facteurs qui semblent conduire à des artefacts numériques lors de la création d'images JPEG: le repliement et la compression.

Exemple:

La conversion d'un PNG contenant des caractères en JPEG ou le placement d'images vectorielles sur une photographie entraînera une pixelisation sur leurs bords. L'anticrénelage crée généralement une sorte de flou autour d'eux, mais si l'image est compressée avec perte , une partie des détails sont également perdus, par conséquent le flou et la pixelisation peuvent devenir moins visibles.

Est-ce la bonne chose à faire? C'est-à-dire qu'une compression sans perte génère une image très détaillée, les artefacts résultant de l'aliasing seront plus visibles, donc un équilibre peut être trouvé en utilisant la bonne compression, tout en compromettant la qualité de l'image.

Éditer

Je viens d'enregistrer ce JPEG dans mspaint (3,46 Ko):

Sans perte

Voici le même JPEG avec une compression maximale (qualité la plus basse, 0,5 Ko):

Avec perte

Voici encore le même JPEG avec une compression de 50% (remarquez la différence de taille, 1,29 Ko):

Demi-pas d'options

La même compression de 50% mais enregistrée en "JPG progressif", a conservé les données EXIF ​​et XMP d'origine et "a essayé d'enregistrer avec la qualité JPG d'origine" (vous pouvez remarquer qu'il n'y a pas de pixels gris autour, 2,96 Ko):

Demi-options

Et enfin la même chose qu'avant avec le sous-échantillonnage chromatique désactivé (même taille de fichier, 2,96 Ko):

Half-no-chroma

Armfoot
la source
1
Juste curieux, quelle est votre raison de vouloir jpg, est-ce la plus petite taille de fichier? Dans le cas où cela aiderait votre situation spécifique, connaissez-vous la compression dxt ou les textures de champ de distance?
Alan Wolfe
1
Je ne sais pas quelle est votre question. Voulez-vous savoir s'il est bon de compresser en JPEG? Voulez-vous savoir quels types d'images compressent bien avec JPEG? Ou, utilisez-vous déjà JPEG et vous souhaitez savoir comment créer vos images afin de minimiser les artefacts causés par JPEG?
Mokosha
@AlanWolfe J'ai rencontré à quelques reprises que je ne pouvais utiliser que JPEG (principalement dans des applications Web), et c'est pourquoi j'avais besoin que ce soit en JPEG. Merci, mais je ne connaissais pas la compression dxt ni les textures de champ de distance, d'après ce que j'ai vu dans wikipedia , les algorithmes dxt sont différents de ceux utilisés en JPEG, voulez-vous dire qu'ils peuvent être utilisés pour créer des JPEG?
Armfoot
@Moshoka merci, c'est plus lié à votre dernière question: comment minimiser "l'impact visuel" apporté par les artefacts dans les images JPEG?
Armfoot
gardez à l'esprit que le mozjpegcompresseur a une astuce spéciale pour produire moins de distorsion sur ce type d'images. (et c'est aussi plus efficace en général que les écrivains jpeg habituels.) L'avez-vous essayé?
Afficher le nom le

Réponses:

9

La compression JPEG implique trois étapes principales:

  1. Sous-échantillonnage de chrominance . L'image est convertie de RVB en espace colorimétrique YCbCr, dans lequel la luma ou la luminosité (Y) est stockée séparément des composantes de chrominance ou de couleur, Cb et Cr. La composante Y est conservée à pleine résolution, mais Cb et Cr sont sous-échantillonnés, généralement à la demi-résolution sur chaque axe. Cela exploite le fait que le système visuel humain est plus sensible aux détails fins de la luminosité que de la couleur.

  2. Quantification de fréquence. Les images Y, Cb et Cr sont converties en une représentation fréquentielle, en les décomposant en blocs 8x8 et en appliquant la transformée en cosinus discrète (une variante de la transformée de Fourier) à chaque bloc. Le résultat est une matrice de nombres qui décrit les amplitudes de différentes fréquences spatiales dans le bloc. Ces nombres peuvent ensuite être quantifiés (arrondis à un nombre choisi de bits de précision). Différents niveaux de quantification sont utilisés pour différentes fréquences, exploitant la sensibilité relativement faible de notre système visuel aux hautes fréquences. C'est là que le paramètre de qualité de l'encodeur JPEG entre en jeu: les qualités inférieures utilisent une quantification plus grossière.

  3. Codage entropique . Les valeurs DCT quantifiées sont transmises via un codeur entropique, qui comprime sans perte le flux binaire en utilisant moins de bits pour représenter les valeurs les plus courantes, un peu comme un fichier zip.

Les étapes 1 et 2 sont les étapes avec perte, et chacune produit son propre type d'artefacts (bien qu'il y ait un certain chevauchement). Le sous-échantillonnage de la chrominance a tendance à estomper les bords nets entre les régions de couleurs différentes. Cela est particulièrement visible dans l'art vectoriel, où des formes aux couleurs vives ramassent des jaggies vicieuses sur leurs bords. La quantification de fréquence estompe les détails fins en général et crée également des artefacts en forme de bloc avec des paramètres de faible qualité, car le DCT est effectué bloc par bloc. Il est particulièrement visible sur le texte.

C'est pourquoi JPEG n'est généralement pas utilisé pour les images contenant des graphiques vectoriels ou du texte - ses algorithmes de compression sont mal adaptés à ces cas, bien qu'ils fonctionnent bien pour les photographies et autres images avec une texture complexe et des bords pas trop nets.

Nathan Reed
la source
Merci beaucoup pour votre explication détaillée Nathan +1. Je comprends que les algorithmes de compression ont leurs limites pour JPEG, mais je voulais juste savoir s'il y avait un bon équilibre de la quantité de compression avec d'autres options (lors de l'enregistrement) qui peuvent rendre les artefacts moins visibles. J'ai édité ma question avec des échantillons.
Armfoot