Borrar filtros
Borrar filtros

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

2 visualizaciones (últimos 30 días)
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 comentario
Image Analyst
Image Analyst el 31 de Mayo de 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.

Iniciar sesión para comentar.

Respuestas (0)

Community Treasure Hunt

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

Start Hunting!

Translated by