clear all; close all;clc;
I=double(imread('lena.bmp'));
[H,W]=size(I);
h=8;w=8;
block_size=8;
n=h*w;
K=(H/h)*(W/w);
M=[1 -1 1 -1 1 -1 1 -1;
1 -1 1 -1 1 -1 1 -1;
1 -1 1 -1 1 -1 1 -1;
1 -1 1 -1 1 -1 1 -1;
1 -1 1 -1 1 -1 1 -1;
1 -1 1 -1 1 -1 1 -1;
1 -1 1 -1 1 -1 1 -1;
1 -1 1 -1 1 -1 1 -1;
];
%% Calculate the distribution of Alpha of image 'Lena' %%
B=mat2cell(I,ones(H/h,1)*block_size,ones(W/w,1)*block_size);
B=reshape(B,1,(H/h)*(W/w));
for k=1:(H/h)*(W/w)
for m = 1:h
for n = 1:w
B{k}(m,n)=M(m,n)* B{k}(m,n);
end
end
end
Alpha=cellfun(@sum,cellfun(@sum,B,'UniformOutput',false));
k=size(Alpha);
figure
minv = min(Alpha);
maxv = max(Alpha);
num = maxv-minv + 1;
tmp = minv;
for i = 1:num
numv(i,1) = tmp;
numv(i,2) =length(find(Alpha == tmp));
tmp = tmp + 1;
end
plot(numv(:,1),numv(:,2)),title('The distribution of Alpha of image');
%% Calculate the distribution of Alpha of Shifted image 'Lena' %%
T=128;
G=64;
Beta1=ceil((T+2*G)*2/(h*w));
for k=1:(H/h)*(W/w)
for i = 1:h
for j = 1:w
if and (Alpha(k)>T, mod(i+j,2)==0)
S1{k}(i,j)=B{k}(i,j)+Beta1;
else if and (Alpha(k)<-T, mod(i+j,2)~=0)
S1{k}(i,j)=B{k}(i,j)-Beta1;
else S1{k}(i,j)=B{k}(i,j);
end
end
end
end
end
Alpha_s=cellfun(@sum,cellfun(@sum,S1,'UniformOutput',false));
figure,
minv = min(Alpha_s);
maxv = max(Alpha_s);
num = maxv-minv + 1;
tmp = minv;
for i = 1:num
numv(i,1) = tmp;
numv(i,2) =length(find(Alpha_s == tmp));
tmp = tmp + 1;
end
plot(numv(:,1),numv(:,2)),title('The distribution of Alpha of Shifted image');
%% data bits %%
X = randperm(floor(H/h)*floor(W/w)+1);
WM_bits = zeros(1, floor(H/h)*floor(W/w)+1);
wm_cnt = 1;
for i = 1:H/h
for j = 1:W/w
WM_bits(wm_cnt) = mod(X(H/h*(i-1)+j),2);
wm_cnt = wm_cnt + 1;
end
end
%% Embedding %%
Beta2=ceil((T+G)*2/(h*w));
wm_cnt = 1;
for k=1:(H/h)*(W/w)
wwm = WM_bits(wm_cnt);
wm_cnt = wm_cnt + 1;
for i = 1:h
for j = 1:w
%% Alpha_s(k)=[-T,T],data embeded
if (Alpha_s(k)>=-T && Alpha_s(k)<=T)
% bit 0 to be embedded ,the block remains intact
if wwm==0
S{k}(i,j)=S1{k}(i,j);
elseif wwm==1
if ((Alpha_s(k)>=0 && Alpha_s(k)<=T) && mod(i+j,2)==0)
S{k}(i,j)=S1{k}(i,j)+Beta2;
elseif ((Alpha_s(k)>=-T && Alpha_s(k)<0) && mod(i+j,2)~=0)
S{k}(i,j)=S1{k}(i,j)-Beta2;
else
S{k}(i,j)=S1{k}(i,j);
end
end
%% Alpha_s(k)~=[-T,T],No data embeded
else
if (Alpha_s(k)<-T || Alpha_s(k)>T)
S{k}(i,j)=S1{k}(i,j);
end
end
end
end
end
Alpha_E=cellfun(@sum,cellfun(@sum,S,'UniformOutput',false));
figure,
minv = min(Alpha_E);
maxv = max(Alpha_E);
num = maxv-minv + 1;
tmp = minv;
for i = 1:num
numv(i,1) = tmp;
numv(i,2) =length(find(Alpha_E == tmp));
tmp = tmp + 1;
end
plot(numv(:,1),numv(:,2)),title('The distribution of Alpha of Embeded image');
%% Extration %%
Ori_bits = zeros(1, floor(H/h)*floor(W/w));
wm_cnt = 1;
for k=1:(H/h)*(W/w)
wwm = WM_bits(wm_cnt);
wm_cnt = wm_cnt + 1;
for i = 1:h
for j = 1:w
if (Alpha_E(k)>=-T && Alpha_E(k)<=T)
wwm==0;
Ori_bits(wm_cnt)= wwm;
R{k}(i,j)=S{k}(i,j);
elseif ((Alpha_E(k)>=-(2*T+G) && Alpha_E(k)<-T)||(Alpha_E(k)>T && Alpha_E(k)<=(2*T+G)))
wwm==1;
Ori_bits(wm_cnt)= wwm;
if ( (Alpha_E(k)>T && Alpha_E(k)<=(2*T+G)) && mod(i+j,2)==0)
R{k}(i,j)=S{k}(i,j)-Beta2;
elseif ((Alpha_E(k)>=-(2*T+G) && Alpha_E(k)<-T) && mod(i+j,2)~=0)
R{k}(i,j)=S{k}(i,j)+Beta2;
end
end
if (Alpha_E(k)>(2*T+G)&& mod(i+j,2)==0)
R{k}(i,j)=S{k}(i,j)-Beta1;
elseif (Alpha_E(k)<(-2*T+G)&& mod(i+j,2)~=0)
R{k}(i,j)=S{k}(i,j)+Beta1;
else
R{k}(i,j)=S{k}(i,j);
end
end
end
end
Alpha_R=cellfun(@sum,cellfun(@sum,R,'UniformOutput',false));
figure,
minv = min(Alpha_R);
maxv = max(Alpha_R);
num = maxv-minv + 1;
tmp = minv;
for i = 1:num
numv(i,1) = tmp;
numv(i,2) =length(find(Alpha_R == tmp));
tmp = tmp + 1;
end
plot(numv(:,1),numv(:,2)),title('The distribution of Alpha of Original image');
% clear all; close all;clc;
% I=double(imread('lena.bmp'));
% [H,W]=size(I);
% sb_x =8;sb_y=8;
% Rnum=floor(H/sb_x);
% Cnum=floor(W/sb_y);
% M=[1 -1 1 -1 1 -1 1 -1;
% 1 -1 1 -1 1 -1 1 -1;
% 1 -1 1 -1 1 -1 1 -1;
% 1 -1 1 -1 1 -1 1 -1;
% 1 -1 1 -1 1 -1 1 -1;
% 1 -1 1 -1 1 -1 1 -1;
% 1 -1 1 -1 1 -1 1 -1;
% 1 -1 1 -1 1 -1 1 -1;
% ];
% T=128;
% G=64;
% Beta1=ceil((T+2*G)*2/(sb_x*sb_y));
% for ri = 1 : Rnum
% for cj = 1 : Cnum
% sb = I(((ri - 1) * sb_x + 1) : ri * sb_x, ((cj - 1) * sb_y + 1) : cj * sb_y);
% Alpha = sum(sum(sb));
% wm_sb = zeros(size(sb));
% for i = 1: sb_x
% for j = 1: sb_y
% if (Alpha>T&& mod(i+j,2)==0)
% wm_sb(i,j) = sb(i,j)+Beta1;
% elseif (Alpha<-T&&mod(i+j,2)~=0)
% wm_sb(i,j) = sb(i,j) - Beta1;
% else
% wm_sb(i,j) = sb(i,j);
% end
% end
% end
% wm_I(((ri - 1) * sb_x + 1) : ri * sb_x, ((cj - 1) * sb_y + 1) : cj * sb_y) = wm_sb;
% end
% end
robust watermaking.rar_Robust watermaking_watermaking_图像分块_鲁棒 水印
版权申诉
74 浏览量
2022-07-15
08:08:29
上传
评论
收藏 1KB RAR 举报
Kinonoyomeo
- 粉丝: 76
- 资源: 1万+
最新资源
- 基于Python+OpenCV对多张图片进行全景图像拼接,消除鬼影,消除裂缝+源代码+文档说明+界面截图(高分课程设计)
- 基于C++实现的全景图像拼接源码(课程设计)
- 基于SIFT特征点提取和RASIC算法实现全景图像拼接python源码+文档说明+界面截图+详细注释(95分以上课程大作业)
- 基于matlab实现眼部判别的疲劳检测系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的异常姿势识别系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 隐藏文件展示工具,用来展示被病毒隐藏的文件
- 基于Matlab的图像分割系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB指纹门禁GUI设计源码+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的仪表指数识别系统霍夫曼变换+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB 的霍夫曼变换答题卡识别带GUI界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈