Info

La pregunta está cerrada. Vuélvala a abrir para editarla o responderla.

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

1 visualización (últimos 30 días)
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

Respuestas (0)

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by