Peut-on detecter qu'une image a subi un codage JPEG?

Module MTI

Dau-Khoî Nguyen
Matthieu Roger

Signets:

Preliminaire
Qu'est-ce que JPEG fait de particulier?
L'impact de la quantification de la DCT sur l'entropie d'une image
Exploitation de la diminution de l'entropie de l'image
JPEG ou un travail par blocs
Les details glissants


Preliminaire:

Notre role etait ici de determiner s'il etait possible d'extraire des donnees significatives d'une image bitmap, pour savoir si elle avait pu etre codee en JPEG.
Dans un premier temps, nous nous sommes donc attache a comprendre l'action du codage jpeg dans ses grandes lignes. En voici un resume.

Illustration


1. Qu'est-ce que JPEG fait de particulier?

Nous avons donc essaye de trouver des traces de ces traitements dans nos images tests.  Bien entendu, nous n'avons pas traite le cas des images JPEG lossless ou bien de qualites subjectives telles qu'elles nous paraissaient sans perte. Nous avons donc force la compression jusqu'a obtenir des images degradees desquelles nous avons pu  extraire des caracteres significatifs.
Remarquons que l'on peut aussi considerer le codage JPEG comme un filtrage de l'image (DCT et quantification) suivi d'un codage entropique (lecture zigzag + DPCM & RLE + Huffman).
A propos des outils et de la methodologie: non avons utilise xv, qui permet de fixer le facteur de qualite du codage JPEG. Ce facteur, compris entre 1 et 100%, divise la table des pas de quantification utilises apres la DCT. Il ne s'agit donc pas du taux de compression, meme si ces deux indicateurs evoluent de la meme facon.

Illustration


2. L'impact de la quantification de la DCT sur l'entropie d'une image

Si l'on concoit le codage JPEG comme un filtrage de l'image suivi d'un codage entropique, on peut donc considerer un codage JPEG Lossless comme notre reference pour une image non abimee. Dans la plupart des cas (c'est-a-dire en dehors des contre-exemples soigneusement fabriques), un codage JPEG Baseline autorisera un meilleur taux de compression qu'un codage Lossless. Comme nous considerons le codage JPEG comme un filtrage, nous pouvons alors en deduire que ce filtrage diminue l'entropie de l'image. En effet, un JPEG Baseline va faire un filtrage via la quantification de la DCT qui sera suivi en fait d'un codage entropique JPEG Lossless (en fait de la fin, a peu de choses pres).
Donc sous-quantifier la DCT diminue l'entropie de l'image.
Illustration


3. Exploitation de la diminution de l'entropie de l'image

Comment traduire le diminution de l'entropie d'une image? L'entropie caracterise la quantite d'information contenue dans l'image. Cela signifie donc que l'image transporte moins d'information. C'est-a-dire que si l'on decouvre partiellement une image JPEG, on devinera mieux ce qui est cache qu'avec la meme image avant qu'elle ait ete codee. Cela signifie qu'on a augmente d'une certaine maniere l'autocorrelation des pixels. De quelle maniere s'en rendre compte?
A part faire une longue recherche pour voir de quelle maniere exacte on renforce l'intercorrelation des pixels en quantifiant les coefficients de la DCT appliquee a une image, on est oblige de faire appel a des outils statistiques existants.
On peut ainsi esperer voir apparaitre des artefacts sur l'histogramme de l'image. On constate en effet une sorte de hachage de l'histogramme qu'on pourrait rapprocher des pics qui apparaissent sur un histogramme lors de la sous-quantification d'une image.

Illustration


4. JPEG ou un travail par blocs

Le codage JPEG s'effectue sur des blocs. Il est donc legitime de rechercher ces blocs dans l'image decodee, a travers des ruptures de continuite. En calculant le gradient de l'image decodee, on voit effectivement apparaitre la structure sous-jacente en blocs, particulierement sur les zones de l'image quasi-uniformes.
Peut-on alors faire appel a un autre outil statistique tel que l'autocorrelation pour extraire ce caractere meme des endroits ou il echappe a l'oeil? Il s'avere decevant et difficilement interpretable pour reconnaitre la structure en blocs.

Illustration


5. Les details glissants

En regardant de plus pres les mats et les drisses de l'image des bateaux, nous avons pu constater des phenomenes de retournements locaux agissant bloc par bloc. Une explication intuitive voudrait qu'il s'agisse de l'introduction de dephasages du fait de la sous-quantification des coefficients de la DCT. Cela agirait principalement sur les hautes frequences qui correspondent aux coefficients de la DCT les plus touches... Nous avons illustre ce phenomene sur un detail des cheveux de l'image bien connue "tifany". Sur l'image originale bitmap, le contour du cheveu de tifany se decoupe homogenement.
En revanche, sur l'image compressee avec un facteur de qualite de 15%, une structure de blocs 8x8 de detache subjectivement, mais surtout des details discontinus en niveaux de gris apparaissent dans des coins, comme a l'endroit indique par la fleche "detail glissant".
Sans rentrer dans un calcul de DCT puis de quantification, ce phenomene peut s'expliquer dans ces zones par la presence de hautes frequences dans l'image originale. La DCT puis la quantification ont pour effet a des fins de compression d'eliminer donc d'introduire des erreurs sur les coefficients du coin inferieur droit correspondant aux hautes frequences. Plus on applique un facteur de qualite bas, comme c'est le cas ici a 15%, plus forte est l'erreur sur ces coefficients. Or dans le cas du bloc de ce detail, ce coefficient n'est pas negligeable. Pour le pixel du coin superieur gauche du bloc, lors de la DCT inverse, ce coefficient devrait avoir un role de compensation par rapport aux coefficents des composantes continues, role qui par compression a ete supprime. La consequence est que ledit pixel prend alors un niveau de gris plus proche du niveau de la composante continue qu'il ne devrait avoir en realite, ce qui ici a pour effet de faire apparaitre ce "detail glissant" correspondant a une reaaparition de haute frequence.

Illustration