资源简介
关于MATLAB数字水印的实验代码,课程设计可以用,可以运行。
代码片段和文件信息
clear all;
clc;
start_time=cputime;%;%计算cpu所用时间,当前的时间赋值给star_time
%%%%%%%%%%%%读取水印图像%%%%%%%%%%%
I=imread(‘nupt.bmp‘);
%%%%%%%%%%%%显示水印图像%%%%%%%%%%%
figure(1);
subplot(231);
imshow(I)title(‘水印图像‘)
dimI=size(I);%I的大小宽*高
rm=dimI(1);cm=dimI(2);%rm为宽,cm为高
%%%%%%%%%%以下生成水印信息%%%%%%%%%
mark=I;%把I赋值给mark
alpha=15%表示幅值设置在当前坐标轴上设置对象的透明度属性15表示半透明
k1=randn(18);%产生1行8列的随机数
k2=randn(18);
a0=imread(‘yuanyuan.bmp‘);
a0=rgb2gray(a0);%将图形的颜色变成灰色,把彩图转换为灰色
psnr_cover=double(a0);%大于256会失真,a0转为双精度不会失真
subplot(232)imshow(a0[])title(‘载体图像‘);%绘制子图2x3的第二个,以及图像及标题
[rc]=size(a0);%获得a0的维数
cda0=blkproc(a0[88]‘dct2‘);%对a0分成8*8的块并进行二维离散余弦变换
%把它分成64*64个8*8小块是为了dct2变换后,每一个中频都集中在对角线上(纸上红色线),如果直接不分再dct2后
%中频不分就在大的384*384图像像素的对角线部分,但是对着一部分进行水印嵌入修改后(由不同的k值改),
%中间不分的确会变,但是肉眼看不出来,只有化成64个小块对中间对角线变换后这么多像素才能被识别。
%%%%%%%%%%%%%%%%%%进行DCT变换并嵌入水印%%%%%%%%%%
cda1=cda0;%cda1 = 384_384
for i=1:rm %i=1:64
for j=1:cm %j=1:64
x=(i-1)*8;y=(j-1)*8;
if mark(ij)==1%如果水印图片的此块没有字(白为1黑为0)则采用第一个随机矩阵
k=k1;
else
k=k2;
end
cda1(x+1y+8)=cda0(x+1y+8)+alpha*k(1);%对每一个8*8的小块的对角线像素的二位余弦dct值进行变换
cda1(x+2y+7)=cda0(x+2y+7)+alpha*k(2);%低频在左下角 高频在右上角
cda1(x+3y+6)=cda0(x+3y+6)+alpha*k(3);%从左上到右下dct的绝对值是依次递减的
cda1(x+4y+5)=cda0(x+4y+5)+alpha*k(4);
cda1(x+5y+4)=cda0(x+5y+4)+alpha*k(5);
cda1(x+6y+3)=cda0(x+6y+3)+alpha*k(6);
cda1(x+7y+2)=cda0(x+7y+2)+alpha*k(7);
cda1(x+8y+1)=cda0(x+8y+1)+alpha*k(8);
end
end
%%%%%进行DCT反变换得到嵌入水印后图像%%%%%%%%%%%%%%
a1=blkproc(cda1[88]‘idct2‘);%a1为对经过水印嵌入后的图像进行二维dct反变换
a_1=uint8(a1);%将a1转化为uint8格式
imwrite(a_1‘withmark.bmp‘‘bmp‘);%写入嵌入后的图片
subplot(233)imshow(a1[])title(‘嵌入水印后的图像‘);
disp(‘嵌入水印处理时间‘);
embed_time=cputime-start_time%运行时间
%%%%%% 攻击实验测试鲁棒性 %%%%%%%%%%%
disp(‘对嵌入水印的图像的攻击实验,请输入选择项:‘);%disp是输出函数
disp(‘1--添加白噪声‘);
disp(‘2--高斯低通滤波‘);
disp(‘3--JPEG压缩‘);
disp(‘4--图像剪切‘);
disp(‘5--旋转10度‘);
disp(‘6--直接检测水印‘);
disp(‘其他--不攻击‘);
d=input(‘请输入选择(1-6):‘);
start_time=cputime;
figure(1);
switch d
case 6
subplot(234);
imshow(a1[]);
title(‘未受攻击的含水印图像‘);
M1=a1;
case 1 %加入白噪声
WImage2=a1;
noise0=20*randn(size(WImage2));
WImage2=WImage2+noise0;
subplot(234);
imshow(WImage2[]);
title(‘加入白噪声后图像‘);
M1=WImage2;
M_1=uint8(M1);%无符号取整
imwrite(M_1‘whitenoise.bmp‘‘bmp‘);
case 2 %高斯低通滤波
WImage3=a1;
H=fspeci
- 上一篇:多尺度熵matlab代码
- 下一篇:基于频率采样法FIR带通滤波器设计
相关资源
- 图像数字水印
- 基于DWT的数字水印算法的MatLab实现
- 音频数字水印
- 数字水印源代码
- DCT、DWT数字水印技术-matlab代码183640
- 基于GS算法的数字水印
- matlab实现基于DCT数字水印添加以及提
- 基于DCT变换的数字水印算法matlab代码
- 基于matlab的数字水印系统
- LSB 数字水印,matlab源程序,很好的资
- 基于二维DCT的自适应水印算法matlab实
- 各种数字水印的matlab源代码
- 基于小波变换的静态图像数字水印m
- 基于DCT数字水印算法的Matlab实现源代
- 数字水印典型空域算法LSB
- matlab版数字水印算法
- 基于小波变换的数字水印嵌入与提取
- 基于小波变换的数字水印嵌入与提取
- 使用matlab实现的小波变换彩色图像水
- 数字水印 攻击 JPEG压缩 matlab代码
- 基于小波变换的图像数字水印MATLAB代
- audio watermark 各种音频数字水印源代码
- 数字水印参考代码
- 基于小波变换的数字水印算法
- 数字水印的嵌入和提取matlab
- 音频数字水印代码
- 基于DWT的数字水印代码
- DCT、DWT数字水印技术-matlab代码
- 基于LSB的数字水印算法以及matlab实现
- W-SVD 数字水印 matlab代码
评论
共有 条评论