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.