Clear Filters
Clear Filters

Info

This question is closed. Reopen it to edit or answer.

i have problems when i try to detect watermark after attacks with lsb with lsb crypted by a key,please give me any idea to get the presence of watermark

2 views (last 30 days)
function varargout=dewatermarkimg(varargin) % Cette fonction effectue l'opération d'extraction d'un filigrane % Type d'image, insérée à travers la fonction watermark_img. % Accepter moins un paramètre d'entrée et retourne un seul paramètre % Sortie (précisément l'image). Peut accepter une touche numérique % Également utilisé lors de l'étape de watermarking. % = Img_log dewatermark_img (img_w, clé);
if length(varargin)==0 % Contrôler le nombre de paramètres transmis en entrée return elseif length(varargin)==2 %Si un deuxième paramètre est spécifié: rand('seed',varargin{2}); %Fixe la graine du rand p=randperm(32); %Je crée un vecteur d'indices pour les 32 premiers bits à lire end im_w=varargin{1}(:); %J'acquiers le premier paramètre d'entrée et de le mettre dans un vecteur de colonne dim_l=0; %Je crée une variable qui va mettre la taille du filigrane dim3_b=0; %Je crée une variable de soutien qui tiendra la troisième dimension du bit de filigrane
% Commencez à lire l'en-tête (taille du filigrane) for j=1:2 %Pour chacune des deux premières dimensions for i=1:15 %Pour chaque bit de la dimension j-ième index=(j-1)*15 +i; %Calculer l'indice linéaire pour les pixels à lire if length(varargin)==2 % contrôler si vous utilisez une clé dim_b(i)=bitget(im_w(p(index)),1); %acquière le bit i-ième dimension de la j-ième p récupérer de l'indice pseudo-aléatoire else dim_b(i)=bitget(im_w(index),1); %Sinon Utilisent l'indice linéaire end end dim_l(j)=bin2dec(num2str(dim_b)); %Convertir en décimal à la dimension j-ième
%Acquisition du bit j-ième de la troisième dimension
if length(varargin)==2 %De contrôle si vous utilisez une clé:
dim3_b(j)=bitget(im_w(p(30+j)),1); %J'acquiers le bit j-ème de la troisième dimension de p récupérer de l'indice pseudo-aléatoire
else
dim3_b(j)=bitget(im_w(30+j),1); %Sinon Utilise l'indice linéaire
end
end
%FIN lecture de l'en-tête (taille du filigrane)
dim_l(3)=bin2dec(num2str(dim3_b)); %Convertir en décimal la troisième dimension
len=prod(dim_l)+4; %Taille (en octets) du filigrane, y compris l'en-tête de 4 octets im_log(prod(dim_l))=0; %Je crée un conteneur pour len-4 pixels du filigrane k=4; % k=4 (32 bits déjà lu!) if length(varargin)==2 %De contrôle si vous utilisez une clé: p=randperm(prod(dim_l)*8)+32; %Calculer les indices pseudo-aléatoires pour des pixels ultérieurs end
%COMMENCER lecture de l'image réelle while k<len, %Fin quand lire tous les pixels de l'image marqué k=k+1; %Mise à jour de k (+1 pixels) for j=1:8 %Pour chaque bit (k-4) pixels -ème du filigrane index=(k-1)*8 + j; %Calculer l'indice linéaire pour les pixels à lire if length(varargin)==2 %contrôle si vous utilisez une clé: b=bitget(im_w(p(index-32)),1); %J'acquiers le bit j-ème du pixel à lire, la récupération de la p indice de pseudo-aléatoire else b=bitget(im_w(index),1); %Utilisent Sinon l'indice linéaire end
if b==1 %Si le bit acquis est égal à 1
im_log(k-4)=bitset(im_log(k-4),j); %met le bit j-ième pixel k-ème du filigrane (k-4).
end
end
end
%FIN image réelle lecture et son
im_log=uint8(im_log); %Converté valeurs im_log en tout
varargout{1}=reshape(im_log,dim_l(1),dim_l(2),dim_l(3)); %Reconstruire image tableaux filigrane
end

Answers (0)

This question is closed.

Products

Community Treasure Hunt

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

Start Hunting!