• Aucun résultat trouvé

Lors de la compression JPEG2000, chaque sous-bande contenant les coefficients d’ondelettes quantifiés est découpée en entités rectangulaires appelées code-blocks. Chacun de ces code-blocks est alors codé indépendamment des autres au moyen d’un algorithme appelé EBCOT (Embedded Block Coding with Optimal Truncation). Chaque code-block est codé plan de bits par plan de bits, en commençant par les bits de poids les plus forts. Tous ces plans de bits sont codés par trois passes de codage successives. Durant la phase de contrôle taux, également appelée allocation de débit, on associe au flux binaire obtenu pour chacune des passes de codage, un point de tronca- ture. L’algorithme de contrôle de taux se charge de trouver, dans le flux binaire correspondant à chaque code-block, le point de troncature optimal permettant d’atteindre le débit spécifié dans les paramètres de codage. Les passes de codage sont ensuite regroupées en paquets qui sont ajoutés au flux de données final ou code-stream. Nous devons donc prendre en compte cette troncature du flux binaire afin qu’il n’y ait pas de dégradation du message caché.

5.3.1 La méthode de dissimulation de données proposée

Notre stratégie de dissimulation de données s’appuie sur les principes de la QIM (Quantiza- tion Index Modulation) [Chen et al. 01] et sur l’utilisation d’un treillis. C’est une technique basée quantification utilisant la quantification TCQ pour insérer des données cachées. Le principe géné- ral est le suivant : nous disposons d’une séquence de quantificateurs. Le choix des quantificateurs est déterminé en fonction des données à dissimuler. Les échantillons du signal hôte sont alors quantifiés à l’aide des quantificateurs sélectionnés.

Il y a deux arcs sortant par état. Sur la figure 5.3, pour chaque état, l’arc en gras est étiqueté par D0 ou D1 et l’autre arc est étiqueté par D2 ou D3. Pour insérer le bit 0 nous utilisons le

quantificateur D0ou D1, et pour insérer le bit 1 nous utilisons le quantificateur D2ou D3. Cette

sélection revient à choisir les arcs empruntés lors de la traversée du treillis. Ainsi, on supprime les arcs étiquetés par D2 ou D3 lorsque l’on insère un 0 et on supprime les arcs étiquetés par D0 ou

FIGURE5.3 – Les principes de la QIM appliqués aux quantificateurs d’union de JPEG2000.

d’ondelettes sont quantifiés en lançant l’algorithme de Viterbi sur ce treillis élagué. Le chemin de coût minimal représenté par une séquence binaire est alors équivalent au message caché.

Lorsqu’on l’intègre cette approche dans le schéma de codage de JPEG2000, l’étape de contrôle de taux doit être prise en compte. En effet, la perte partielle du chemin dans le treillis signifie que les données cachées ne seront pas correctement extraites durant la phase de décompression. Sans mesure adéquate, c’est ce qui se produit puisqu’un certain nombre de bits de poids faible des indices de quantification sont supprimés après la phase de contrôle de taux.

Nous proposons donc d’insérer l’information cachée seulement dans les coefficients qui ont le plus de chance de survivre à la phase de contrôle de taux. Ces coefficients sont appelés coefficients sélectionnés. En pratique, cela revient à insérer (et donc élaguer le treillis) uniquement au niveau des transitions correspondant à ces coefficients sélectionnés. En outre, pour être sûr que le plan de bits LSB restera inchangé après le contôle de taux, celui-ci est déplacé de sa position initiale vers un plan de bits supérieur.

Le message binaire à cacher est noté m ∈ {0, 1}|m|. Dans le but de sécuriser le message,

nous le mélangeons de manière pseudo-aléatoire. Le tatouage se fait indépendamment au niveau de chaque code-block. Pour chaque code-block, le treillis est élagué seulement pour les transi- tions correspondant aux coefficients d’ondelettes sélectionnés. L’étape de quantification produit la séquence d’indices de quantification ˜x donnée par :

˜

x[i] = QDj(x[i]) (5.1)

où QDj est la fonction de quantification et Dj, j ∈ {0, 1, 2, 3} est le quantificateur utilisé pour quantifier x[i]. Le quantificateur est sélectionné suivant le bit à cacher.

Lors de la décompression JPEG2000, le message caché est extrait durant l’étape de quanti- fication inverse. Plus précisément, l’algorithme examine sur le chemin optimal, les arcs associés aux coefficients sélectionnés. Si l’arc est étiqueté par D0ou D1, le bit 0 est extrait, sinon le bit 1

est extrait. Pour chaque code-block, les valeurs de reconstruction ˆx sont obtenues de la manière suivante :

ˆ

x[i] = ¯Q−1D

j(˜x[i]) (5.2)

où ¯Q−1 est la fonction de quantification inverse. Notons qu’il n’est pas nécessaire de générer les valeurs dé-quantifiées pour extraire le message caché.

5.3.2 Le schéma conjoint JPEG2000 et dissimulation de données

FIGURE 5.4 – Schéma de fonctionnement du système conjoint codage JPEG2000/dissimulation de données.

Le schéma de fonctionnement de notre système de compression JPEG2000/dissimulation de données conjoint est illustré sur la figure. 5.4. L’image subit des opérations de pré-traitements (décalage des données et transformée couleur). Celle-ci est ensuite décomposée à l’aide de la transformée en ondelettes discrète. Les coefficients inclus dans le processus de dissimulation de données sont ceux des sous-bandes de détails HL, LH et HH de tous les niveaux de résolution excepté le premier niveau. Le critère de sélection utilisé dans la sélection des coefficients est détaillé dans la sous-section suivante. Le nombre de coefficients sélectionnés permet de déterminer la quantité d’information à cacher. Les données sont cachées durant le processus de quantification. Ensuite vient l’étape de codage entropique, suivie de la phase de contrôle de taux qui arrange les flux de chaque code-block sous la forme de couches de qualité afin de former le flux binaire JPEG2000.

Suivant le contenu de l’image et le débit cible, certains coefficients embarquant des bits des données cachées seront tronqués lors de la phase d’optimisation débit-distorsion. Afin que l’ex- traction soit correcte, une opération de vérification est lancée après l’étape de contrôle de taux afin de tester s’il n’y a pas eu de perte d’information. Ce processus consiste à effectuer les opé- rations de décodage entropique et d’extraction des données cachées. Si l’information cachée n’a pas été correctement récupérée, l’étape de selection des coefficients d’ondelettes est ré-itérée. Le critère de sélection est modifié pour chaque code-block où les données cachées sont érronées, et ce, de manière à exclure les coefficients sélectionnés qui ont été touchés par la phase de contrôle de taux. Nous sélectionnons moins de coefficients sélectionnés que lors de la précédente itération. Les étapes de quantification TCQ, EBCOT, contrôle de taux et vérification sont répétées à chaque fois que le critère de sélection est modifié, et ce, jusqu’a ce qu’il ait une insertion puis une ex- traction sans erreurs. Le payload est déterminé par le nombre de coefficients sélectionnés. Nous aurons donc un payload pour chaque débit binaire : les payloads obtenus à bas débit seront plus petits que ceux obtenus à haut débit.

Pour réaliser l’extraction des données cachées, le flux binaire est décodé à l’aide du décodeur EBCOT puis le message caché est extrait durant la quantification inverse. Seuls les coefficients sélectionnés lors de la quantification embarquent un bit. L’image décodée est obtenue après l’ap- plication de la transformée en ondelettes inverse et les opérations de post-traitements.

5.3.3 La sélection des coefficients

Comme nous l’avons expliqué en section 5.3.1, le bit de poids faible d’un indice TCQ sélec- tionné permet de déduire le quantificateur utilisé et également un bit du message. Un indice TCQ ˜

xpeut être représenté en représentation binaire de la manière suivante : ˜

x = s˜xL−1L−2....˜x1x˜0 (5.3)

où s est le signe, ˜xL−1le bit de poids le plus fort (MSB) et ˜x0est le bit de poids le plus faible (LSB)

de ˜x. L est le nombre de bits nécéssaires pour représenter tous les indices de quantification dans le code-block. Le calcul du seuil de sélection τ pour chaque code-block permet de sélectionner une séquence de coefficients significatifs S. En supposant qu’il y a L plans de bits dans le code-block courant C, τ est calculée de la manière suivante :

τ =bα × Lc (5.4)

où α est un paramètre réel compris entre 0 et 1 initialisé avec une valeur prédéfinie pour chaque sous-bande. Le tableau 5.1 donne les valeurs de α pour certains débits cible. La sélection des coef- ficients inclus dans le processus de dissimulation de données est effectuée de la manière suivante : si dlog2(|˜x[i]| + 1)e > τ, alors ˜x[i]∈ S (5.5)

où dlog2(|˜x[i]| + 1)e est le nombre de bits utilisés pour représenter l’indice ˜x du iiemecoefficient

d’ondelette du code-block C. Nous sélectionnons donc les coéfficients d’ondelettes dont les in- dices TCQ possèdent un nombre de plans de bits supérieur à τ. Dans le cas où la phase de contrôle de taux provoque une dégradation du message caché, la valeur de τ est incrémentée pour itérer une nouvelle sélection des coefficients et une nouvelle insertion. Afin d’être sûr que le chemin ne sera

Niveau de résolution Sous-bande Débit binaire (bpp) α

2.5 0.20 3 1 1.6 0.33 0.2 0.50 2.5 0.33 4 2 1.6 0.33 0.2 0.75

TABLE5.1 – Valeurs initiales de α pour quelques débits binaires.

pas partiellement perdu après la phase de contrôle de taux, surtout à bas débit, nous proposons de déplacer le plan de bits LSB des indices TCQ des coefficients sélectionnés vers la position L − 2 (équation 5.3). Le seuil de sélection τ pour chaque code-block peut être stocké dans l’entête du fi- chier JPEG2000. De cette manière, nous sommes capables, durant la décompression JPEG2000, de retrouver les positions des indices TCQ correspondant aux coefficients sélectionnés. Nous n’avons donc pas besoin de sauvegarder ces positions dans un fichier et de les transmettre comme infor- mation adjacente au décodeur. Notons que le coût additionel est négligeable par rapport au coût de l’image. Pour un débit de 0.2 bpp, un code-block de taille 64 × 64, et L = 8, le ratio entre le coût de codage du seuil et le coût de codage moyen du code-block est 3