IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Images Discussion :

Cacher une image dans une autre: technique du LSB [Débutant]


Sujet :

Images

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 14
    Par défaut Cacher une image dans une autre: technique du LSB
    Salut à tous,

    Après plusieurs heures passé sans en voir le bout du tunnel je requière un petit peu d'aide.

    Voilà je dois faire un programme en 4 grande étapes :
    - cacher une image pixeliser dans une image couleur et la decoder.
    -cacher une image en gray dans une image couleur et la decoder.
    -cacher une image en couleur dans une image en couleur.
    -cacher un son dans une image.

    Toute en utilisant la technique du LSB c'est a dire remplacer le bit de poid faible pour que lors de l'affichage cela ne ce remarque pas.

    Après avoir fait un bout de chaque partie (:s) je bloque souvent sur la partie decodage.
    Un probleme que je ne comprend pas est lors de mon script CodageNoirBlanc une erreur m'indiquant 'Binary string may consist only of characters 0 and 1' or je suis sur de n'avoir que des 0 et des 1.

    Codage noir et blanc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    imgporteuse=imread('Koala.bmp');
    imgpixel=imread('test.bmp');
    Rchat=imgpixel(:,:,1);
    Rchat_pixel=Rchat>128;%pixelise l'image blanc si <128 et noir si sup
    Rchat_colonne=Rchat(:);%ecrit l'image en une seule colonne
    imgporteuse_Bin=dec2bin(imgporteuse(:));%converti l'image porteuse en matrice binaire
    imgporteuse_Bin(1:length(Rchat_colonne),8)=Rchat_colonne;% remplace le bit de poid faible par l'image pixeliser
    imgporteuse_Dec=bin2dec(imgporteuse_Bin);

    Pour ma partie coder une image couleur dans une image en couleur j'ai fini le partie cryptage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    imgporteuse=imread('Koala.bmp');% Lecture image porteuse
    imgcache=imread('test.bmp');% Lecture image cachée
    imgcache_bin=dec2bin(imgcache);
    imgcache_bin_colonne=imgcache_bin(:);
    imgporteuse_bin=dec2bin(imgporteuse);
    imgporteuse_bin(1:size(imgcache_bin_colonne),8)=imgcache_bin_colonne;
    imgporteuse_Dec=bin2dec(imgporteuse_bin);
    img_porteuse=reshape(imgporteuse_Dec,size(imgporteuse));
    afficheimage=uint8(img_porteuse);
    figure;subplot(1,2,1);imshow(afficheimage);
    imwrite(uint8(afficheimage),'Cryptecouleur.jpg','jpeg','Quality',100);
    L'astuce ici est de derouler une premiere fois l'image a cacher de la convertire en binaire et de la derouler une deuxieme fois pour avoir une seule colonne et pouvoir la remplacer par les LSB. l'inconvenient est que l'image porteuse doit obligatoirement etre 8 fois plus grande que l'image cache.

    Pour mon code de decodage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    img=imread('Cryptecouleur.jpg');
    Matrice1=img(:);
    Matrice1=dec2bin(Matrice1);
    Matrice2=Matrice1(1:(20*22*3*8),8);%L*l*P*8bit c'est a dire la taille de la colonne de l'image a decrypter
    Matrice2=reshape(Matrice2,(20*22*3),8);
    Matrice2=bin2dec(Matrice2);
    Matrice2=reshape(Matrice2,20,22,3);
    Matrice2=uint8(Matrice2);
    imshow(Matrice2);
     
     
     
    %crypte=imread('Cryptecouleur.jpg');% Lecture image porteuse
    %colonne_crypte=crypte(:);
    %colonne_crypte_huit=dec2bin(colonne_crypte,8);
    %imgcache=colonne_crypte_huit(1:(55296),8);
    %imagecache_droite=reshape(imgcache,[],8);
    %imagecache_dec=bin2dec(imagecache_droite);
    %imagecrypte=reshape(imagecache_dec,48,48,3);
    %imshow(uint8(imagecrypte));
     
     
     
     
     
     
     
     
    %orange=imread('chat.jpg');% Lecture image cachée
    %chat_Colonne_Dec=chat(:);
    %chat_Colonne_Bin=dec2bin(chat_Colonne_Dec,8);
    %crypte=chat_Colonne_Bin(1:(50*59*3*8),8);
    %image_crypte_binaire=reshape(crypte,[],8);
    %image_crypte=(bin2dec(image_crypte_binaire));
    %image=reshape(image_crypte,50,59,3);
    %afficheimage=uint8(image);
    %imshow(afficheimage);
    On peut voir mes très nombreux essai en commentaire car je bloque et sa m’énerve donc je recommence a zéro sa fait une bonne 10ene d'heure que je bloque.

    Si vous avez des question n'hésitez pas à les poser.

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Bonjour,

    pour l'image pixelisée, je pense que tu as une erreur à la ligne 5, tu devrais mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rchat_colonne=Rchat_pixel(:);
    Pour ton image couleur, même en mettant la qualité à 100, imwrite effectue une compression donc les valeurs des pixels changent : il faut choisir l'option lossless (sans perte) du jpeg :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imwrite(uint8(afficheimage),'Cryptecouleur.jpg','jpeg','Mode','lossless');
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 14
    Par défaut
    Merci pour tes réponses.
    J'ai fait les deux changements que tu proposais mais le problème dans le 1er scripte c'est que j'obtiens un non sens (pour ma part)

    Voici le message :
    ??? Error using ==> bin2dec at 54
    Binary string may consist only of characters 0 and 1
    
    Error in ==> CNB at 8
    imgporteuse_Dec=bin2dec(imgporteuse_Bin);
    alors que ma varibale imgporteuse_Bin n'est composer que de 0 et de 1.

    Sinon pour mon script couleur jobtiens toujours une image difforme et space ^^. je ne vois aps d'où peut venir mon erreur j'ai beau me refaire le programme dans ma tête, les etapes sont logique pour moi.
    Peut-être le reshape qui ne s'effectue pas comme il devrait.

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Citation Envoyé par plopo Voir le message
    Merci pour tes réponses.
    J'ai fait les deux changements que tu proposais mais le problème dans le 1er scripte c'est que j'obtiens un non sens (pour ma part)

    Voici le message :
    ??? Error using ==> bin2dec at 54
    Binary string may consist only of characters 0 and 1
    
    Error in ==> CNB at 8
    imgporteuse_Dec=bin2dec(imgporteuse_Bin);
    alors que ma varibale imgporteuse_Bin n'est composer que de 0 et de 1.
    Peux-tu nous montrer le code qui génère cette erreur?

    Citation Envoyé par plopo Voir le message
    Sinon pour mon script couleur jobtiens toujours une image difforme et space ^^. je ne vois aps d'où peut venir mon erreur j'ai beau me refaire le programme dans ma tête, les etapes sont logique pour moi.
    Peut-être le reshape qui ne s'effectue pas comme il devrait.
    C'est bizarre, j'avais testé sur un exemple, et ton code semblait fonctionner.
    Première chose à vérifier : est-ce que afficheimage (avant enregistrement donc) et img (après enregistrement et ré-ouverture) contiennent exactement les mêmes valeurs? Si oui, alors c'est peut-être le reshape, quelles sont les dimensions de tes images? Peux-tu aussi remettre le code que tu utilises?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 14
    Par défaut
    J'utilise deux images, une porteuse de 500*375 et une image a cache de 40*46.
    http://imageshack.us/g/196/koalae.png/

    Si j'ai bien compris je devrais mettre if afficheimage==img disp('Condition is true') pour tester si l'image enregistrer lors du cryptage est bien egale a l'image lu lors du decryptage.

    Voici le résultat du decryptage :




    J'ai l'impression d'avoir le bon ton en terme de couleur donc il sagirait d'un problème avec le reshape pour moi ;p.

    Pour le code du pixeliser j'ai sa :



    On aperçoit bien que la variable est de type char et composer de 0 et de 1 uniquement non ?

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Citation Envoyé par plopo Voir le message
    Si j'ai bien compris je devrais mettre if afficheimage==img disp('Condition is true') pour tester si l'image enregistrer lors du cryptage est bien egale a l'image lu lors du decryptage.
    Oui, ou tu peux utiliser isequal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if isequal(afficheimage,img)
        disp('Condition is true')
    end
    Citation Envoyé par plopo Voir le message
    J'ai l'impression d'avoir le bon ton en terme de couleur donc il sagirait d'un problème avec le reshape pour moi ;p.
    Oui c'est sûrement cela mais il faudrait que tu nous montres le code car ce ne sont pas les mêmes dimensions que celles utilisées dans ton code au-dessus.
    Je mettrai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Matrice2=Matrice1(1:46*40*3*8,8);
    Matrice2=reshape(Matrice2,46*40*3,8);
    Matrice2=bin2dec(Matrice2);
    Matrice2=reshape(Matrice2,46,40,3);
    Citation Envoyé par plopo Voir le message
    Pour le code du pixeliser j'ai sa :



    On aperçoit bien que la variable est de type char et composer de 0 et de 1 uniquement non ?
    imgporteuse_Bin est un tableau de caractères, tu lui rentres des valeurs au format uint8. MATLAB fait une conversion mais ce n'est pas celle que tu envisages (voir doc char). Il faut convertir tes données avec num2str par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imgporteuse_Bin(1:length(colonne_pixel),8)=num2str(colonne_pixel);
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Manipulation d'images : intégrer une image dans une image
    Par noscollections dans le forum VB.NET
    Réponses: 2
    Dernier message: 17/10/2014, 11h51
  2. Mettre une Image dans une Image
    Par shadowhocine dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 19/12/2006, 18h40
  3. Réponses: 3
    Dernier message: 30/10/2006, 11h21
  4. Insérer une légende dans une image avec une police plus petite
    Par Paulinho dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 3
    Dernier message: 29/04/2006, 14h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo