3.2.1 程序与调试
clear all;
clc;
start_time=cputime;
% 读取水印图像 %
I=imread('mark.jpg');
%I=rgb2gray(I);
I=double(I)/255;
I=round(I);
%显示水印图像%
figure(1);
imshow(I),title('水印图像')
dimI=size(I);
rm=dimI(1);cm=dimI(2);
% 以下生成水印信息 %
mark=I;
alpha=20,
k1=randn(1,8);
k2=randn(1,8);
a0=imread('xie.jpg');
psnr_cover=double(a0);
figure(2);
imshow(a0,[]),title('原始图像');
a0=rgb2gray(a0);
[r,c]=size(a0);
figure(3);
imshow(a0,[]),title('灰度图像');
cda0=blkproc(a0,[8,8],'dct2'); %分块处理图片
% 嵌入 %
cda1=cda0; % cda1 = 256_256
for i=1:dimI(1) % i=1:32
for j=1:dimI(2) % j=1:32
x=(i-1)*8;y=(j-1)*8;
if mark(i,j)==1
k=k1;
else
k=k2;
end
cda1(x+1,y+8)=cda0(x+1,y+8)+alpha*k(1);
cda1(x+2,y+7)=cda0(x+2,y+7)+alpha*k(2);
cda1(x+3,y+6)=cda0(x+3,y+6)+alpha*k(3);
cda1(x+4,y+5)=cda0(x+4,y+5)+alpha*k(4);
cda1(x+5,y+4)=cda0(x+5,y+4)+alpha*k(5);
cda1(x+6,y+3)=cda0(x+6,y+3)+alpha*k(6);
cda1(x+7,y+2)=cda0(x+7,y+2)+alpha*k(7);
cda1(x+8,y+1)=cda0(x+8,y+1)+alpha*k(8);
end
end
% 嵌入水印后图像 %
a1=blkproc(cda1,[8,8],'idct2'); %分块处理图片
a_1=uint8(a1);
imwrite(a_1,'withmark.jpg','jpg');
figure(4);
imshow(a1,[]),title('嵌入水印后的图像');
disp('嵌入水印处理时间');
3.3.1 程序与调试
M1=imread('withmark.jpg'); %读取含水印的图像
psnr_watermarked=M1;
dca1=blkproc(M1,[8,8],'dct2'); %分块处理
p=zeros(1,8);
for i=1:dimI(1)
for j=1:dimI(2) % j=1:32
x=(i-1)*8;y=(j-1)*8;
p(1)=dca1(x+1,y+8);
p(2)=dca1(x+2,y+7);
p(3)=dca1(x+3,y+6);
p(4)=dca1(x+4,y+5);
p(5)=dca1(x+5,y+4);
p(6)=dca1(x+6,y+3);
p(7)=dca1(x+7,y+2);
p(8)=dca1(x+8,y+1);
%sd1=sum(sum(p.*k1))/sqrt(sum(sum(p.^2)));
%sd2=sum(sum(p.*k2))/sqrt(sum(sum(p.^2)));
%if sd1>sd2
if corr2(p,k1)>corr2(p,k2),warning off MATLAB:divideByZero;
mark1(i,j)=1;
else
mark1(i,j)=0;
end
end
end
figure(3);
subplot(1,3,2);
imwrite(mark1,'getmark.jpg','jpg');
imshow(mark1,[]),title('提取的水印图像');
I=imread('mark.jpg'); % 读取原始水印图像 %
%I=rgb2gray(I);
I=double(I)/255;
I=round(I);
subplot(1,3,3);
imshow(I),title('原始水印图像');
3.4数字水印的抗攻击实验
3.4.1 噪声攻击
clear all;
clc;
start_time=cputime;
% 读取水印图像 %
I=imread('mark.jpg');
%I=rgb2gray(I);
I=double(I)/255;
I=round(I);
%显示水印图像%
figure(1);
imshow(I),title('水印图像')
dimI=size(I);
rm=dimI(1);cm=dimI(2);
% 以下生成水印信息 %
mark=I;
alpha=20,
k1=randn(1,8);
k2=randn(1,8);
a0=imread('xie.jpg');
psnr_cover=double(a0);
figure(2);
imshow(a0,[]),title('原始图像');
a0=rgb2gray(a0);
[r,c]=size(a0);
figure(3);
imshow(a0,[]),title('灰度图像');
cda0=blkproc(a0,[8,8],'dct2'); %分块处理图片
% 嵌入 %
cda1=cda0; % cda1 = 256_256
for i=1:dimI(1) % i=1:32
for j=1:dimI(2) % j=1:32
x=(i-1)*8;y=(j-1)*8;
if mark(i,j)==1
k=k1;
else
k=k2;
end
cda1(x+1,y+8)=cda0(x+1,y+8)+alpha*k(1);
cda1(x+2,y+7)=cda0(x+2,y+7)+alpha*k(2);
cda1(x+3,y+6)=cda0(x+3,y+6)+alpha*k(3);
cda1(x+4,y+5)=cda0(x+4,y+5)+alpha*k(4);
cda1(x+5,y+4)=cda0(x+5,y+4)+alpha*k(5);
cda1(x+6,y+3)=cda0(x+6,y+3)+alpha*k(6);
cda1(x+7,y+2)=cda0(x+7,y+2)+alpha*k(7);
cda1(x+8,y+1)=cda0(x+8,y+1)+alpha*k(8);
end
end
% 嵌入水印后图像 %
a1=blkproc(cda1,[8,8],'idct2'); %分块处理图片
a_1=uint8(a1);
imwrite(a_1,'withmark.jpg','jpg');
figure(4);
imshow(a1,[]),title('嵌入水印后的图像');
disp('嵌入水印处理时间');
%加噪音%
A1=imread('withmark.jpg'); %读取含水印的图像
Wimage2=a1;
noise0=20*randn(size(Wimage2));
Wimage2=Wimage2+noise0; %加入噪声
figure(3);
subplot(1,3,1);
imshow(Wimage2,[]);
title('加入白噪声后图像');
M1=Wimage2;
M_1=uint8(M1);
imwrite(M_1,'whitenoise.jpg','jpg'); %生成已加入噪声的图片
%水印提取%
M1=imread('whitenoise.jpg'); %读取含水印的图像
psnr_watermarked=M1;
dca1=blkproc(M1,[8,8],'dct2'); %分块处理
p=zeros(1,8);
for i=1:dimI(1)
for j=1:dimI(2) % j=1:32
x=(i-1)*8;y=(j-1)*8;
p(1)=dca1(x+1,y+8);
p(2)=dca1(x+2,y+7);
p(3)=dca1(x+3,y+6);
p(4)=dca1(x+4,y+5);
p(5)=dca1(x+5,y+4);
p(6)=dca1(x+6,y+3);
p(7)=dca1(x+7,y+2);
p(8)=dca1(x+8,y+1);
%sd1=sum(sum(p.*k1))/sqrt(sum(sum(p.^2)));
%sd2=sum(sum(p.*k2))/sqrt(sum(sum(p.^2)));
%if sd1>sd2
if corr2(p,k1)>corr2(p,k2),warning off MATLAB:divideByZero;
mark1(i,j)=1;
else
mark1(i,j)=0;
end
end
end
figure(3);
subplot(1,3,2);
imwrite(mark1,'getwhitenoise.jpg','jpg');
imshow(mark1,[]),title('提取的水印图像');
I=imread('mark.jpg'); % 读取原始水印图像 %
%I=rgb2gray(I);
I=double(I)/255;
I=round(I);
subplot(1,3,3);
imshow(I),title('原始水印图像');
3.4.2 剪切攻击
clear all;
clc;
start_time=cputime;
% 读取水印图像 %
I=imread('mark.jpg');
%I=rgb2gray(I);
I=double(I)/255;
I=round(I);
%显示水印图像%
figure(1);
imshow(I),title('水印图像')
dimI=size(I);
rm=dimI(1);cm=dimI(2);
% 以下生成水印信息 %
mark=I;
alpha=20,
k1=randn(1,8);
k2=randn(1,8);
a0=imread('xie.jpg');
psnr_cover=double(a0);
figure(2);
imshow(a0,[]),title('原始图像');
a0=rgb2gray(a0);
[r,c]=size(a0);
figure(3);
imshow(a0,[]),title('灰度图像');
cda0=blkproc(a0,[8,8],'dct2'); %分块处理图片
% 嵌入 %
cda1=cda0; % cda1 = 256_256
for i=1:dimI(1) % i=1:32
for j=1:dimI(2) % j=1:32
x=(i-1)*8;y=(j-1)*8;
if mark(i,j)==1
k=k1;
else
k=k2;
end
cda1(x+1,y+8)=cda0(x+1,y+8)+alpha*k(1);
cda1(x+2,y+7)=cda0(x+2,y+7)+alpha*k(2);
cda1(x+3,y+6)=cda0(x+3,y+6)+alpha*k(3);
cda1(x+4,y+5)=cda0(x+4,y+5)+alpha*k(4);
cda1(x+5,y+4)=cda0(x+5,y+4)+alpha*k(5);
cda1(x+6,y+3)=cda0(x+6,y+3)+alpha*k(6);
cda1(x+7,y+2)=cda0(x+7,y+2)+alpha*k(7);
cda1(x+8,y+1)=cda0(x+8,y+1)+alpha*k(8);
end
end
% 嵌入水印后图像 %
a1=blkproc(cda1,[8,8],'idct2'); %分块处理图片
a_1=uint8(a1);
imwrite(a_1,'withmark.jpg','jpg');
figure(4);
imshow(a1,[]),title('嵌入水印后的图像');
disp('嵌入水印处理时间');
%加噪音%
a1=imread('withmark.jpg'); %读取含水印的图像
WImage4=a1;
WImage4(1:64,1:128)=255;
figure(5);
subplot(1,3,1);
imshow( WImage4,[]);
title('部分剪切后图像');
M1= WImage4;
imwrite(M1,'cutpart.jpg','jpg'); %生成已剪切后的图片
%水印提取%
M1=imread('cutpart.jpg'); %读取含水印的图像
psnr_watermarked=M1;
dca1=blkproc(M1,[8,8],'dct2'); %分块处理
p=zeros(1,8);
for i=1:dimI(1)
for j=1:dimI(2) % j=1:32
x=(i-1)*8;y=(j-1)*8;
p(1)=dca1(x+1,y+8);
p(2)=dca1(x+2,y+7);
p(3)=dca1(x+3,y+6);
p(4)=dca1(x+4,y+5);
p(5)=dca1(x+5,y+4);
p(6)=dca1(x+6,y+3);
p(7)=dca1(x+7,y+2);
p(8)=dca1(x+8,y+1);
%sd1=sum(sum(p.*k1))/sqrt(sum(sum(p.^2)));
%sd2=sum(sum(p.*k2))/sqrt(sum(sum(p.^2)));
%if sd1>sd2
if corr2(p,k1)>corr2(p,k2),warning off MATLAB:divideByZero;
mark1(i,j)=1;
else
mark1(i,j)=0;
end
end
end
figure(5);
subplot(1,3,2);
imwrite(mark1,'cutpart.jpg','jpg');
imshow(mark1,[]),title('提取的水印图像');
I=imread('mark.jpg'); % 读取原始水印图像 %
%I=rgb2gray(I);
I=double(I)/255;
I=round(I);
subplot(1,3,3);
imshow(I),title('原始水印图像')
3.4.3 滤波攻击
clear all;
clc;
start_time=cputime;
% 读取水印图像 %
I=imread('mark.jpg');
%I=rgb2gray(I);
I=double(I)/255;
I=round(I);
%显示水印图像%
figure(1);
imshow(I),title('水印图像')
dimI=size(I);
rm=dimI(1);cm=dimI(2);
% 以下生成水印信息 %
mark=I;
alpha=40,
k1=randn(1,8);
k2=randn(1,8);
DCT.zip_印章_图像篡改_图像篡改取证_简单的水印嵌入、提取、检测_车牌数字
版权申诉
198 浏览量
2022-09-23
04:21:23
上传
评论
收藏 2KB ZIP 举报
weixin_42653672
- 粉丝: 93
- 资源: 1万+
最新资源
- 猫咪和汤58.apk
- 浏览器.apk
- 基于matlab实现是一个matlab中的power system 中搭建的一个模型
- 基于JSP毕业设计-教学管理系统(源代码+论文).zip
- 基于JSP毕业设计-家政管理系统-毕业设计.zip
- 基于Python实现淘宝商品评论采集(含逆向)源代码
- 基于matlab实现多目标进化算法NSGAⅡ&Matlab讲解.rar
- 基于matlab实现多车辆车辆路径问题,用遗传算法编程,保证可用.rar
- 基于matlab实现多层极限学习机实现手写体识别,准确率超过99%.rar
- 基于matlab实现电力系统最优潮流程序,可以应用于电力市场下的最优潮流计算 适合电力系统专业的同仁使用.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈