Effacer les filtres
Effacer les filtres

i have this partie of code of watermarking image using LSB i need understand how its done to watermark this image nd thanks

2 vues (au cours des 30 derniers jours)
function [Img_w,str] =watermark_img (img, img_logo); % Cette fonction insère un filigrane d'image dans une autre % l'image passée comme un argument d'entrée. E 'peut également spécifier % une touche numérique entre les arguments d'entrée. % Abbilgatoire au moins deux paramètres d'entrée: % Img_w, str] = watermark_img (img, img_logo); % Retourne l'image filigrané "de img_w" et une chaîne facultative d'erreur "Str". Accepte l'image d'entrée à laquelle vous le feriez % watermarking et de l'image (logo) à insérer. Et 'possible d'ajouter un % troisième paramètre d'entrée qui représente la clé numérique: % watermark_img (img, img_logo, clé); key=123; %Si un troisième paramètre est spécifié: rand('seed',key); %fixer la semence du rand. p=randperm(32); %Je crée un vecteur d'indices pour les 32 premiers pixels à modifier img=imread('Lenna.png'); %J'acquérir l'image àmarquer. img_logo=imread('logo1.png'); %J'acquiers l'image représentant le filigrane dim=size(img_logo); %Je reçois la taille du filigrane if prod(size(img)) >= (prod(dim)*8) %Contrôle si img est suffisante pour contenir img_logo len=prod(dim); %le filigrane comprend 4 octets de la taille de l'en-tête (en octets) im_w=img_logo(:); % Metter l'image du filigrane dans un vecteur de colonne unique im=img(:); % Metter l'image à marquer, dans un vecteur de colonne unique im=bitand(im,uint8(ones(length(im),1)*254)); %Met à 0 les bits les moins significatifs de im % COMMENCER tête d'entrée (taille du filigrane) %Fin de l'insertion dans l'en-tête d'entrée d'extrémité (taille du filigrane) k=0; (32 pixels ont changé!) %Contrôle si vous utilisez une clé: p=randperm(length(im_w)*8); %Calculer %Commencez à saisir l'image réelle while k<len, %Fin quand vous atteignez toute la longueur len k=k+1; %Mettre à jour k (+1 pixels) for j=1:8 %Pour chaque bit du pixel k-ième index=(k-1)*8 + j; % Calcul de l'indice linéaire des pixels à changer b=bitget(im_w(k-4),j); %Je reçois les pixels à partir du bit j-ème d'image à marquer if(b==1) %Si elle est égale à 1 im(p(index-32))=bitset(im(p(index-32)),1); %Si vous récupérez de la p indice de pseudo-aléatoire remplir le bit le moins significatif. end end %FIN entrant l'image réelle [x,y,z]=size(img); % Je reçois la taille de l'image à marquer Img_w=reshape(im,x,y,z); %Riscostruire la matrice d'image marquer. str='WATERMARK HIDDEN SUCCEFULLY!'; %Je ne rends aucune erreur else %Si la taille de l'image ne soit pas suffisant pour contenir le filigrane: str='l image conteneur insufficiente à contenir la marque'; %Retour une erreur end end
  1 commentaire
Image Analyst
Image Analyst le 31 Mai 2016
Well I think it must work very well since it says so: "WATERMARK HIDDEN SUCCEFULLY!" How it's done, you can determine by looking at the code. It looks like there are even a few comments in there to help you follow the code. I'm not sure what else to say.

Connectez-vous pour commenter.

Réponses (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by