资源简介
基于DCT域的鲁棒水印实现,有多种攻击测试,鲁棒性很好。
代码片段和文件信息
%基于DTC域的鲁棒水印实现
clear all;
k=20; %设置水印强度
blocksize=8;
midband=[00011110;
00111100;
01111000;
11110000;
11100000;
11000000;
10000000;
00000000];
message=double(imread(‘12.bmp‘));
%Laplacian算子
%h=[-1 -1 -1
% -1 8 -1
% -1 -1 -1];
%G=abs(imfilter(Ih));
%figureimshow(G[])title(‘Laplacian Operator‘);
%message=double(graythresh(I));%先转换成灰色然后自动设置二值化的阀值并转换成双精度数组
Mm=size(message1);
Nm=size(message2);
n=Mm*Nm;
message=round(reshape(message1n));
cover_object=double(imread(‘lena512.bmp‘));
Mc=size(cover_object1); Nc=size(cover_object2);
c=Mc/8;d=Nc/8;m=c*d;
%计算宿主图像的每一块方差
xx=1;
for j=1:c
for i=1:d
pjhd(xx)=1/64*sum(sum(cover_object((1+(j-1)*8):j*8(1+(i-1)*8):i*8)));
fc(xx)=1/64*sum(sum((cover_object((1+(j-1)*8):j*8(1+(i-1)*8):i*8)- pjhd(xx)).^2));
xx=xx+1;
end
end
A=sort(fc);B=A((c*d-n+1):c*d);
%将水印信息嵌入到方差最大的前n块
fc_o=ones(1c*d);
for g=1:n
for h=1:c*d
if B(g)==fc(h)
fc_o(h)=message(g);
h=c*d;
end
end
end
message_vector=fc_o;
watermarked_image=cover_object;
%设置MATLAB随机数生成器状态J,作为系统秘钥K
rand(‘state‘7);
%根据当前的随机数生成器状态J,生成0,1的伪随机序列
pn_sequence_zero=round(rand(1sum(sum(midband))));
%嵌入水印
x=1;y=1;
for(kk=1:m)
%分块DCT变换
dct_block=dct2(cover_object(y:y+blocksize-1x:x+blocksize-1));
%纹理大(方差最大的前n块)并被标注水印信息为0的块在其DCT中频系数嵌入伪随机序
ss=1;
if (message_vector(kk)==0)
for ii=1:blocksize
for jj=1:blocksize
if(midband(jjii)==1)
dct_block(jjii)=dct_block(jjii)+k*pn_sequence_zero(ss);
ss=ss+1;
end
end
end
end
%分块DCT反变换
watermarked_image(y:y+blocksize-1x:x+blocksize-1)=idct2(dct_block);
%换行
if(x+blocksize)>=Nc
x=1;y=y+blocksize;
else
x=x+blocksize;
end
end
watermarked_image_int=uint8(watermarked_image); %将其转换成8为无符号整形数据
%生成并输出嵌入水印后的图像
imwrite(watermarked_image_int‘dct2_watermarked.bmp‘‘bmp‘); %图像数据写入dct2中保存为bmp格式
%显示峰值信噪比
xsz=255*255*Mc*Nc/sum(sum((cover_object-watermarked_image).^2));
psnr=10*log10(xsz);
figure
imshow(‘12.bmp‘);%水印图像
title(‘水印‘)
figure
imshow(‘lena512.bmp‘);%显示原来图像
title(‘原图‘);
figure
imshow(watermarked_image_int[]);%显示嵌入水印后的图像
title(‘嵌入后图像‘);
%加椒盐噪声攻击测试
J1=imnoise(watermarked_image_int‘salt & pepper‘0.01);
imwrite(J1‘JiaoYan.bmp‘‘bmp‘);
figure
imshow(J1[]);
title(‘加椒盐噪声后的图像‘);
%对嵌入水印的图像进行压缩处理
imwrite(watermarked_image_int‘JPEGyasuo.jpg‘‘jpeg‘‘quality‘40);
J=imread(‘JPEGyasuo.jpg‘);
figure
imshow(J[]);
title(‘压缩后的水印图像‘);
%进行贴图攻击
watermarked_image_int(250:400300:500)=watermarked_image_int(209:359289:48
- 上一篇:单脉冲和差测角方法的MATLAB实现
- 下一篇:NSGA-III多目标进化算法
相关资源
- 单脉冲和差测角方法的MATLAB实现
- 短时傅里叶变换,画出时间频率图L
- 多进制MASK MPSK MFSK MQAM matlab仿真程序
- 数字图像处理——Matlab
- MATLAB对于永磁同步电机的仿真,本科
- matlab gui程序设计 学生成绩管理系统
- 使用不同去隔行方法进行隔行变逐行
- 基于法向量的点云数据精简算法matl
- 灰度均值MATLAB源程序
- 基于线性Bregman迭代的矩阵补全MATLAB代
- matlab如何调用marchingcubes算法
- 惯导-GPS组合导航程序
- paperRaw域CFA模式下的去噪MATLAB code
-
船舶航向PID控制的Simuli
nk仿真 - 基于matlab的车牌分割
- 基于matlab的电话号码识别程序
- DLT算法的MATLAB实现
- 滑模变结构控制MATLAB仿真.zip
- 详细的螺旋桨matlab模型
- ADRC自抗扰控制仿真模型.rar
- 用于图像分割的自适应扩散流活动轮
- 心电信号汉宁窗滤波、中值滤波、数
- 制冷机仿真
- 自适应中值滤波MATLAB
- matlab obj_write
- matlab RGB 色彩空间模型
-
基于Matlab-Simuli
nk的永磁同步电机( - NEDC工况预测
-
MATLAB/simuli
nk模型的仿真 - 基于MATLAB的SAD模板匹配算法
评论
共有 条评论