MATLAB 脆弱水印提取函数 - wm_extr
function rw = wm_extr(J) % 此函数为提取过程 % 输入:J为水印嵌入的图像; % 输出:rw为提取的水印
%% % 一层小波分解 [LL,LH,HL,HH] = dwt2(J,'haar'); %=======计算avr_LH====== [m,n] = size(LH); avr_LH = 0;
%=======计算avr_HL====== [m0,n0] = size(HL); avr_HL = 0;
% 判断嵌入的子带 if avr_LH <= avr_HL num = 0; loca = LH; else num = 1; loca = HL; end %% % 提取水印 if num == 0 rw = wm_extr_type1(loca); % 写出提取子函数 else rw = wm_extr_type0(loca); % 写出提取子函数 end
其中 wm_extr_type1(loca) 程序如下
function rw = wm_extr_type1(loca)
% 脆弱水印中 LH 子带提取水印的代码
[mm,nn] = size(loca);
index = 1;
% 取出 2*2 的块
for k = 1:2:mm-1
for kk = 1:2:nn-1f
tem = loca(k:k+1,kk:kk+1);
a11 = tem(1,1);
a12 = tem(1,2);
a21 = tem(2,1);
a22 = tem(2,2);
%-------a12+a22 >= a11+a21 则水印为 0,否则为 1-------
if a12 + a22 >= a11 + a21
rw(index) = 0;
else
rw(index) = 1;
end
index = index + 1;
end
end
end
给出 wm_extr_type0(loca); 的程序
function rw = wm_extr_type0(loca)
% 脆弱水印中 HL 子带提取水印的代码
[mm,nn] = size(loca);
index = 1;
% 取出 2*2 的块
for k = 1:2:mm-1
for kk = 1:2:nn-1
tem = loca(k:k+1,kk:kk+1);
a11 = tem(1,1);
a12 = tem(1,2);
a21 = tem(2,1);
a22 = tem(2,2);
%-------a12+a21 >= a11+a22 则水印为 0,否则为 1-------
if a12 + a21 >= a11 + a22
rw(index) = 0;
else
rw(index) = 1;
end
index = index + 1;
end
end
end
原文地址: https://www.cveoy.top/t/topic/jpxA 著作权归作者所有。请勿转载和采集!