Signature par modulation d'amplitude sur les images couleurs


Cette méthode à été proposée en 1998 par Martin Kutter.
Elle repose essentiellement sur des arguments statistiques.
Nous travaillons ici sur des images en couleurs (Rouge, Vert, Bleu). Nous savons que le but du marquage est (entre autre) d'être invisible pour l'oeil humain. C'est pour cette raison que nous allons appliquer la signature uniquement sur la composante bleue de l'image, car c'est au bleu que l'oeil est le moins sensible.
De plus nous utilisons un générateur pseudo aléatoire pour nous générer une succession de positions au sein de l'image à marquer I. Ces positions représentent les positions ou vont avoir lieu les marquages, et servent donc en l'occurence de clef secrète K pour retrouver la signature. Pour chacun des pixels de la clef (situés en i,j) on applique la transformation suivante:

Blue(i,j)=Blue(i,j)+(2*s-1)*L(i,j)*q

Avec:
L(i,j)=0.299*Red(i,j)+0.587*Green(i,j)+0.114*Blue(i,j) (c'est la luminance !!!)
s : le bit à coder.
q : une constante qui représente la force du marquage.

Pour retrouver le bit qui a été marqué, nous avons besoin de prédire la valeur du pixel d'origine. Pour cela nous partons du principe bien connu que la valeur d'un pixel dépend de celle de ses voisins. Ici nous nous limitons à une interpolation linéaire avec ses plus proches voisins. Ainsi, on interpole la valeur du pixel en faisant tout simplement la moyenne des 4 pixels (on se limite toujours à la composante bleue) situés comme indiqué sur l'image suivante:



On mesure alors le différence entre la valeur du pixel courant et celle du pixel interpolé, et si cette dernière est trop importante, on peut considerer que le pixel à été marqué.
Bien que cela marche souvent, il est nécessaire d'augmenter les performances de cet algorithme. C'est pour cela que l'on tatoue le même bit à plusieurs endroits. C'est l'ensemble des positions de marquage de ce bit qui va jouer le role de clef secrète K. Notre but, est de ne plus être tributaire de facteur comme la taille de l'image. Pour cela, on définit une valeur de densité de marquage variant de 0 à 1, qui va donner la probabilité pour que l'on marque un pixel. Ainsi, pour chaque pixel on ragarde aléatoirement si l'on doit marquer le pixel ou non. Si la densité vaut 0 alors aucun pixel ne sera marqué et inversement si la densité vaut 1, tous les pixels seront marqués. On parcours ensuite l'image en zig-zag pour s'affranchir de la taille de celle-ci.
On fait la somme des différences des pixels trouvés avec ceux interpolés, et l'on renormalise cela (n'est ce pas sebastien ????) par le nombre de pixels de l'image en cours (qui peut alors être différent de celui de l'image d'origine) multiplié par la densité de pixels à marquer. En fait ce produit correspond au nombre moyen de pixels marqués en tenant compte de la densité de probabilité de marquage. C'est ce résultat qui va nous dire si l'image à été marquée ou non.