版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一图像输入与输出基本操作(2学时)
实验二基于DCT域的数字水印技术(2学时)
综合性实验基于傅立叶域变换的数字水印技术(4学时)
实验前预备知识:
数字水印技术是利用数字产品普遍存在的冗余数据与随机性,将水印信息嵌入在数字
产品本身中,从而起到保护数字产品版权或者完整性的一种技术.
现在学术界对数字水印算法的理解都是将一些不易察觉的具有随机特性的数据施入到图像
频域或空域的系数上。从信号处理的角度看,嵌入水印可以看成是在强背景下迭加一个弱信
号,由于人类视觉系统的分辨率受到一定的限制,只要迭加的信号幅度不超过HVS的对比门
限,人眼就无法感觉到信号的存在,所以可以通过对原始图像进行一定调整,在不影响视觉
效果的情况下嵌入一些水印信息.
数字水印系统的一般模型如图1所示:
水印信号M
宿主信号S
密钥K
图1数字水印系统基本模型
水印嵌入器的输入量有三个:水印信号M,宿主信号S和密钥K。
水印信号"是指原始水印(图像或一个数字序列)通过一定的方法经过调制将嵌入到宿
主信号中的数字信号。
宿主信号S是指被嵌入水印的信号(原始信号)。
密钥K则指用于提高水印系统安全性的密码信息,它独立于宿主信号。密钥有私有密钥和公
共密钥之分,前者指攻击者在明确了水印嵌入方法但又不知道密钥的情况下,水印不会被破
坏或盗取;后者是指攻击者对宿主信号(如内容标识、语言字幕等)不感兴趣的情况下,密
钥也就不存在保密性,可以作为公共密钥。
实验一图像输入与输出基本操作
一、实验题目:
图像输入与输出操作
二、实验目的
学习在MATLAB环境下对图像文件的I/O操作,为读取各种格式的图像文件和后续进行图
像处理打下基础.
三、实验内容
利用MATLAB为用户提供的专门函数从图像格式的文件中读/写图像数据、显示图像,以及查
询图像文件的信息。
四、预备知识
熟悉MATLAB开发环境.
五、实验原理
(1)图像文件的读取
利用imread函数可以完成图像文件的读取操作.常用语法格式为:
l=imread('filename','千mt')或I二imread('filename。fmt');
其作用是将文件名用字符串filename表示的、扩展名用字符串fmt(表示图像文
件格式)表示的图像文件中的数据读到矩阵I中。当filename中不包含任何路径信息时,
imread会从当前工作目录中寻找并读取文件。要想读取指定路径中的图像,最简单的方法
就是在fiIename中输入完整的或相对的地址。MATLAB支持多种图像文件格式的读、写和显
示。因此参数千mt常用的可能值有:
4bmp'Windows位图格式
"jpg'or‘Jpeg'联合图像专家组格式
‘tif'or'tiff'标志图像文件格式
'gif'图形交换格式
*pcx'Windows画刷格式
‘png'可移动网络图形格式
'xwd'XWindowDump格式
例如,命令行
i
〉〉l=imread(Ienaojpg');
将JPEG图像lena读入图像矩阵I中.
(2)图像文件的写入(保存)
图1。1.1显示一幅图像文件中的图像
注意事项:该文件名必须带有合法的扩展名(指明文件格式),且该图像文件必须保存在
当前目录下,或在MATLAB默认的目录下。
②添加色带
colorbar函数可以给一个坐标轴对象添加一条色带。如果
该坐标轴对象包含一个图像对象,则添加的色带将指示出该图像中不同颜色的数据值.这对
于了解被显示图像的灰度级特别有用.其调用格式为:
colorbar
实例1-2
〉〉l=imread(Ienaojpg');
〉〉imshow(I);
〉〉coIorbar;
图1.1.2显示图像并加入颜色条
从上图可知,该图像是数据类型为uint8的灰度图像,其灰度级范围从0
-255.
③显示多幅图像
显示多幅图像最简单的方法就是在不同的图形窗口中显示它们。
imshow总是在当前窗口中显示一幅图像,如果用户想连续显示两幅图
像,那么第二幅图像就会替代第一幅图像。为了避免图像在当前窗口
中的覆盖现象,在调用imshow函数显示下一幅图像之前可以使用
figure命令来创建一个新的窗口。例如:
imshov/(11);
figure,imshow(12);
figure,imshow(13);
有时为了便于在多幅图像之间进行比较,需要将这些图像显示在一个图形窗口中。
达到这一目的有两种方法:一种方法是联合使用imshow和subplot函数,但此方法在一个图
形窗口只能有一个调色板;另一种方法是联合使用subimage和subplot函数,此方法可在
一个图形窗口内使用多个调色板.
subplot函数将一个图形窗口划分为多个显示区域,其调用格式如下:
subpIot(m,n,p)
subplot函数将图形窗口划分为m(行)Xn(列)个显示区域,并选择第p个区域作为当
前绘图区。
例1-3用两排显示四幅图像,可以使用以下语句:
〉>I1=imread('lena.bmp');
»I2=imread("gs256obmp*);
>>I3=imread('lena.bmp');
4
〉〉I4=imread(gs256obmp');
)>subpIot(2,2,1),imshow(11);
〉〉subpIot(2,2,2),imshow(12);
〉〉subplot(2,2,3),imshow(13);
〉>subpIot(2,2,4),imshow(14);
图1。1.3在一个图形窗口中显示多幅图像
(4)图像文件信息的查询
imfinf。函数用于查询图像文件的有关信息,详细地显示出图像文件的各种属性。其
语法格式为:
info=imfinfo('filename','fmt')或info=imfinfo(4fiIename,fmtT)
或imfinfofilename。fmt
imfinfo函数获取的图像文件信息依赖于文件类型的不同而不同,但至少应包
含以下内容:
文件名。如果该文件不在当前目录下,还包含该文件的完整路径.
文件格式。
文件格式的版本号。
文件最后一次修改的时间。
文件的大小。以字节为单位。
图像的宽度.
图像的高度。
每个像素所用的比特数。也叫像素深度。
图像类型.即该图像是真彩色图像、索引图像还是灰度图像.
例如,命令行
>>imfinfobubbIes25.jpg
会输出如下信息(注意,在这种情况下,有些域不包含信息):
FiIename:"bubbIes25.jpg'
FiIeModDate:’04-Jan—200312:31:26'
FiIeSize:13849
Format:'jpg'
FormatVersion:
Width:714
Height:682
BitDepth:8
ColorType:'grayscale'
Formatsignature:
Comment:{}
三、实验步骤:
(1)利用imread函数完成对图像文件的读取操作。
(2)利用imwrite函数完成图像的写入(保存)操作。
(3)利用imshow函数显示图像.
(4)利用imfinf。函数查询图像文件的有关信息.
实验二基于DCT域的数字水印技术
离散余弦变换,简称DCT,是一种实数域变换,其变换核为实数的余弦函数,计算速度较快,
是一种近似最佳变换,很适合于做图象压缩和随机信号处理,它对常用的图象压缩有较强
的鲁棒性。
基于DCT域的数字水印算法,一般而言有两种算法.一种是直接对整幅图像进行DCT计算,选
取合适频段的系数,嵌入水印。另一种是,首先将整幅图像分成块,对每一块分别进行DCT
计算,在每一块中选取合适频段的系数,将水印信息分散嵌入到每一块所选取的DCT系数
中。这种方法称为分块DCT,这种方法非常适合于8X8的图像块DCT变换。目前,DCT域的
水印方法大多数是采用分块DCT方法。
二维DCT概述:一般而言,数字图象口,其二维DCT变换用矩阵□表示,其定
义式如下式所示:
S也,l)=-7==ZZc.W0?(/)S(i,j)cos(⑵犷)cos(Q.)勺(4-D
7MxN,-=oj=oZN
二维IDCT定义□如下:
9
S"⑺"zZ&(6C2(/)和」)cost⑵包,8s(Q川)%(4-2)
yJM义Nk=01=02M2N
其中f,kG{0,1,2,...M-1},J,/G{0,1,2,.../V-1},并且
3次=031=0
=1V2G(/)=JV2(4—3)
1"=1,2,..〃一1
我们最常用到的是8X8分块DCT,也就是首先将大小为MXN的图像分成□的非重叠的大小
为8X8的块,然后对每一块作DCT。根据式(47)和式(4-2),8X8DCT的定义如下:
义,。=衅.呼]£s(i,j)cos(⑵cos":?勺(4-4)
22|=0;=01616
8X8IDCT的定义如下:
加££平邛*,叱库卢)cos用#)(4-5)
ET)221616
其中,□并且
3,/=o
『k=0
G(k)=<41&(/)=,也(4-6)
l,k=1,2,...7=2,...7
实验目的:学习使用基于DCT域数字水印嵌入算法和基于DCT域数字水印检
测提取算法.
实验内容和原理:
(1)基于DCT域数字水印嵌入算法:
DCT域的水印嵌入过程,就是首先对宿主图像S进行分块DCT运算,选取出要嵌入的DCT系
数C,并且对宿主图像用HVS模型进行分析,得到感知系数掩蔽模板,用其来控制水印嵌入
强度,再将编码后的水印信号W,用一定方式嵌入到选好的系数中°用嵌入水印的系数替代
原来位置的系数,再进行逆DCT(InverseDiscreteCosineTransform,IDCT)变换,就得
到了含有水印的图像X。DCT域水印系统的水印嵌入过程框图如图1所示:
z
图1DCT域水印嵌入过程方框图
(2)基于DCT域数字水印检测提取算法:
DCT域水印的脸证过程(即包括水印的检测和提取过程),就是将待测图像Y(注意此时的
图像也许已经遭受了图象处理或恶意攻击)进行DCT运算;然后按着嵌入水印时选取的DCT
系数,选取其含有水印的系数,进行水印提取,然后利用相关检测法判断水印是否存在。如
果水印检测器输出结果显示水印存在,则根据需要可以用水印解码器对提取的水印进行解
码,恢复水印.水印检测提取过程如图2
宿主信号s水印信号w
图2DCT域数字水印检测提取框图
实验操作方法与步骤:
(1)水印嵌入步骤如下:
1o将宿主图像□分成8X8的块,每一块都进行DCT变换,得到与宿主图象相同尺寸
的DCT域系数矩阵□.
2o产生两个不相关的伪随机序列,并设定一个密钥key.
3.将每个8X8的DCT系数矩阵,从每一块的中频段取出□个系数口。
4.然后嵌入水印,嵌入规则为当水印图像元素为'0'时,按照式子口(其中alpha为尺
度因子,mark为随机序列,口为原图像的分块DCT系数),将一个随机序列与原始图像块的
幅度谱对应元素进行乘性叠加;为‘1’时,用另一个伪随机序列与幅度谱对应元素进行乘性
叠加。
5.用得到的新的DCT系数对原来位置的DCT系数进行置换。
6o对新的DCT系数矩阵进行DCT逆变换,得到了嵌入水印信号的图像。
(2)水印检测提取步骤如下:
1.对含有水印图像进行8X8的块DCT变换。
对每一块的系数进行“之”字型排列,从我们已知的嵌入位置取出可能含有水
2ODCT
印的系数口,将所有提取出的系数,按顺序组成新的系数序列口。
3o用密钥生成水印信号W〜N(OJ)
4.将含水印的系数序列与水印信号进行相关计算,得到归一化相关系数口。
实验结果及分析:
以下是尺度因子alpha=30时的实脸结果,以及受到各种攻击后所提取到的水印图像及
其与原始水印图像的相关系数□:
图3原始图像和嵌入水印后的图像
此时,aIpha=30
直接提取的图象
图4没有受到攻击的图像及提取到的水印图像
此时相关系数NNC=1
加入白噪声后的图象
图5加入白噪声后的图像、原始水印和提取的水印图像
此时相关系数N,vc=0.99969
图6高斯低通滤波后的图像及提取的水印图像
此时相关系数N,M=0。99058
剪切后的图蒙,
图7剪切后的图像及提取的水印图像
此时相关系数N,M=0。93909
旋转10度后的图象
图8旋转10后的图像及提取的水印图像
此时相关系数/7阳二0。48383
结论:当图像(宿主信息)受到加噪、高斯低通滤波、剪切等攻击后,其可视度、提取的
水印图像与原始水印图像的相似度(都在90%以上)
都是非常令人满意的;当受到旋转攻击后,其提取的水印图像与原始水印图像的相似度
(不足50%)却令人感到失望,不过仍可证明水印信息的存在。
程序参考:
%%%%%%%%%%%%%嵌入算法%%%%%%%%%%%%K%
cIearall;
cIc;
%%%%%%读取水印图像%%%%%%%%
omark二double(imread('muxiaoobmp'))/255;
mo=size(omark,1);
no=size(omark,2);
%%%%%以下生成水印信息%%%%%%
mark二omark;
aIpha=30;
randl=randn(1,8);
rand2=randn(1,8);
%%%%%%读取宿主图像%%%%%%%%
cimage=imread('Iena.bmp');
figure(1);
subpIot(2,3,1),imshow(cimage,[]),ti11e(,原始的宿主图像');
[me,nc]=size(cimage);
cdaO=bIkproc(cimage,[8,8],'dct2*);
蹴%号%%%嵌入水印%%%%%%%%%
cda1=cdaO;
fori=1:mo
forj=1:no
x=(i-1)*8;y=(j-1)*8;
ifmark(i,j)==1
k=rand1;
eIse
k=rand2;
end
cda1(x+1,y+8)=cdaO(x+1,y+8)+aIpha*k(1);
cda1(x+2,y+7)=cdaO(x+2,y+7)+aIpha*k(2);
cda1(x+3,y+6)=cdaO(x+3,y+6)+alpha*k(3);
cda1(x+4,y+5)=cda0(x+4,y+5)+aIpha*k(4);
cda1(x+5,y+4)=cda0(x+5,y+4)+aIphak(5);
cda1(x+6,y+3)=cdaO(x+6,y+3)+aIpha*k(6);
cda1(x+7,y+2)=cdaO(x+7,y+2)+aIpha*k(7);
cda1(x+8,y+1)=cdaO(x+8,y+1)+aIpha*k(8);
end
end
%%%%%%嵌入水印后图象%%%%%%
wimage=bIkproc(cda1,[8,8],'idct2t);
wimage」=uint8(wimage):
imwrite(wimage_1,'withmark.bmp',bmp');
subpIot(2,3,2),imshow(wimage,[1),ti11e(,嵌入水印后图象’)
%%%%%%%%%%%%%%进行攻击测试%%%%%%%%%%%
disp('1--〉加入白噪声');
disp('2-->高斯低通滤波');
disp(‘3—>剪切图像');
disp(44—>旋转攻击');
disp('5——>直接检测')
begin=input('请选择攻击(1—5):')
switchbegin
%%%%%%%加入白噪声%%%%%%%%
case1
Aimagel=wimage;
Wnoise=20,A,randn(size(Aimagel));
Aimagel=Aimagel+Wnoise;
subpIot(2,3,4),imshow(Aimagel,[]),ti11e(,加入白噪声后的图象’);
att=Aimagel;
imwrite(att,'whitenoiseimageobmp');
%%*%%%%高斯低通滤波%%%%%%%
case2
Aimage2=wimage;
H=fspeciaI(*gaussian',[4,4],0o5);
Aimage2=imfiIter(Aimage2,H);
subpIot(2,3,4),imshow(Aimage2,[]),ti11e('高斯低通滤波后的图象’);
att=Aimage2;
imwrite(att,'gaussianimage,bmp')
%%%%%%%%剪切攻击%%%%%%%%
case3
Aimage3=wimage;
Aimage3(1:128,1:128)=256;
subpIot(2,3,4),imshow(Aifnage3,[]),ti11e('剪切后的图象');
att=Aimage3;
imwritc(att,'cutpartimage,bmp');
%%^%%%*旋转攻击%%%%%%%%
case4
Aimage4=wimage;
Aimage4=imrotate(Aimage4,10,'bilinear'crop');
Aimage_4=mat2gray(Aimage4);
subpIot(2,3,4),imshow(Aimage_4,[]),titIe('旋转10度后的图象’);
att=Aimage_4;
imwrite(att,'rotatedimage<>bmp');
%%%%%%%没有受到攻击%%%%%%%
case5
subpIot(2,3,4),imshow(wimage,[]),title('直接提取的图像’);
att=wimage;
imwrite(att,'directimage,bmp*);
end
%%%%%%%%%%%%%提取水印%%%%%%%%%%%%%%
tmark_O=att;
tmark_O=bIkproc(tmark_0,[8,8],'dct2');
pass二zeros(1,8):
fori=1:mo
forj=1:no
x=(i—1)*8;y=(j-1)*8;
pass(1)=tmark_0(x+1,y+8);
pass(2)=tmark_0(x+2,y+7);
pass(3)=tmark_0(x+3,y+6);
pass(4)=tmark_0(x+4,y+5);
pass(5)=tmark_0(x+5,y+4);
pass(6)=tmark_0(x-6,y+3);
pass(7)=tmark_0(x+7,y+2);
pass(8)=tmark_0(x+8,y+1);
if(corr2(pass,randl)>corr2(pass,rand2))
tmark_1(i,j)=1;
tmark_1(i,j)=0;
end
end
end
%%%%%%%%%%计算NC(归一化相关系数)%%%%%%%%
g_mark=doubIe(tmark_1);
o_mark=doubIe(omark);
[m,n]=size(g_mark);
nc_0=0;
nc_1=0;
nc_2=0;
fori=1:m
forj=1:n
nc_0=nc_0+g_mark(i,j)o_mark(i,j);
nc_1=nc_1+o_mark(i,j)*o_mark(i,j);
nc_2=nc_2+g_mark(i,j)*g_mark(i,j):
end
end
NC=nc_O/sqrt(nc_1*nc_2);
%%%%%%显示提取水印%%%%%%%%
subpIot(2,3,5),imshow(?muxiao.bmp,title('原始水印图像’);
subpIot(2,3,6),imshow(tnark_1,[]);
name='提取得水印图像’;
title(strcat(num2str(name),'NC二',num2str(NO));
综合设计性实验基于傅立叶域变换的数字水印技术
实验目的:学习使用基于傅立叶域的数字水印嵌入算法和基于DCT域数字
水印检测提取算法。
实验内容和原理:
傅立叶变换(FourierTransform)是线性系统分析的一个有力工具,是研究信号的频谱
方法,它架起了时域和频域之间的桥梁。使我们能够定量分析诸如数字化系统、采样点、电
子放大器、卷积滤波器、噪声等的作用,把傅立叶变换的理论同其物理解释相结合,将大大有
助于解决大多数图象处理问题.
Fourier分析理论十分完善,既可以处理连续信号也可以处理离散信号。计
算机只能处理离散信号,且在数字图象处理中,输入图像和输出图像通常都是
二维的,一般表示成二维数字矩阵,因此这里直接讨论二维离散傅立叶变换
(DFT)和二维快速傅立叶变换(FFT)o
(1)二维离散傅立叶变换DFT(DiscreteFourierTransform)
二维离散傅立叶变换对定义式如下:
N-lM-\(竺+把)
R”,u)=£Z/(X,>),"'=0,1,2…,M—1。=0,1,2…,N-1(1-1)
y=0X=0
IN-l.W-li2;r(竺+竺)
/(X,y)=—yyF(w,vk'MN,x=(),l,2,…,M-l;u=(),l,2,…,N-l(1-2)
MN七U
二维离散傅立叶变换的傅立叶谱、相位、功率谱分别如下:
傅立叶谱:口(1—3)
相位:□(1-4)
功率谱:□(1-5)
式子(1—1)可以分离为:
NT_心丁,时-1一泮
忻("J)|=Ze"x£/(x,y)eM(1——6)
y=0x=0
式子(1-2)可以分离为:
]汩j—vv11gJ—ut.、
e,x—(1—7)
NF\_M
由上两式可知,二维傅立叶变换可由连续两次一维傅立叶变换得到,从而将二维DFT
分解为水平和垂直两部分运算,上式中方括号中的项表示在图像的行上计算的DFT,方括号
外边的求和则实现结果数组在列上的DFT,这种分解使我们可以用一维FFT来快速实现二维
DFTo
(2)二维快速傅立叶变换FFT(FastFourierTransform)
FFT的基本思想是:
令序列□的长度□为口,如果不满足,在尾部补零,没有任何影响。按n奇偶把□分解为两
个N/2点的子序列:
©=0,1,2,…,(N/2);(1-8)
力](〃2)=f(2〃z+1),〃2=0J,2「..,(N/2);(1-9)
那么
F(k)=工/(〃)/*"+(170)
〃为偶数〃为奇数
将(1-8)和(1-9)式代入上式得:
N.21,N.2^,
I-1J-'
22
F(k)=£g、(m)e+h](ni)e(1—11)
/W=0.71=0
上式右边的两部分恰好是长度(周期)为N/2的□的傅立叶变换口,所以:
-jhkN
F(k)=Gi(k)+cNg(Q,k=0,i,2,…(彳-1)(1-12)
N厂AN,、
F(k+-)=G}(lc)-eN”|(火),攵=0,1,2一・,(5-1)(1-13)
这样一个长度为N的DFT就分解为两个长度为N/2的DFT,然后进行N/2次复数的蝶式
运算,再运用分解-递归思想,分解□次,每一次均有N/2个蝶式运算,所以FFT的时间复杂
度为口。
FFT在图像运用中的思想是,先将原图像进行转置,按行对转置后的图像矩阵做一维
FFT,将此变换所得的中间矩阵再转置,再按对转置后的中间矩阵做一维FFT,最后得到的就
是二维FFT.
实验操作方法与步骤:
(1)嵌入算法的步骤如下:
1o将宿主图像/a,/),(i=L2,…心j=l,2,..N)分成8X8的块,每一块都进行DFT变换,得
到与宿主图象相同尺寸的DFT域图象系数矩阵/内,力。
2o产生两个不相关的伪随机序列,并设定一个密钥key。
3.将每个8义8的DFT系数矩阵,从每一块的中频段取出□个系数口。
4.由于DFT域的幅度谱具有对称性,为了水印嵌入后保持这种对称性,也为了确保恢复
图像像素值为实数,嵌入水印时采用对称嵌入。嵌入规则为当水印图像元素为'0'时,按
照式子□(其中alfa为尺度因子,mark为随机序列,□为原图像的分块DFT系数),将一个
随机序列与原始图像块的幅度谱对应元素进行乘性叠加;为时,用另一个伪随机序列与
幅度谱对应元素进行乘性叠加。
5o用得到的新的DFT系数对原来位置的DFT系数进行置换。
6.对每一图像块进行DFT逆变换,得到含水印图像.
(2)提取算法步躲如下:
1o将宿主图像□分成8X8的块,每一块都进行DFT变换,得到与宿主图像相同尺寸的
DFT域图象系数矩阵口。
2.对每一块的DFT系数进行“之”字型排列,从我们已知的嵌入位置取出可能含有水印
的系数口,将所有提取出的系数,按顺序组成新的系数序列□.
3o计算嵌入水印图像块的幅度谱与两个伪随机序列的相关性,假设嵌入的水印图像矩
阵为'0'时叠加的是随机序列A,为'「时叠加的是随机序列B,则提取时如果嵌入水印幅
度谱与随机序列A的相关性大于其B的相关性,那么这个位置嵌入的是水印图像矩阵'0'
元素.按这个规则即可提取出水印图像。
4o将含水印的系数序列与水印信号进行相关计算,得到归一化相关系数□.
实验结果与分析:
以下是尺度因子alpha=260时的实验结果,以及受到各种攻击后所提取到的水印图像
及其与原始水印图像的相关系数□:
原始的宿主图像嵌入水印后的图像
图1原始图像与嵌入水印后的图像
直接提取的图象
图2没有受到攻击的图像和直接提取的水印图像
此时相关系数N%二1
加入白噪声后的图象
图3加入白噪声后的图像、原始水印图像及提取的水印图像
此时相关系数NNC=96566
高斯低通漉波后的图争
图4高斯低通滤波后的图像及提取的水印图像
此时相关系数N.c=0.97311
剪切后的图象
图5剪切后的图像及提取的水印图像
此时相关系数N阳=0。96907
旋转10度后的图象
图6旋转后的图像及提取的水印图像
此时相关系数=0.91301
结论:由于DFT域对全局性的旋转、平移和缩放变换具有不变性的特点,基于DFT域的数字
水印技术要比基于DCT域的数字水印技术的鲁棒性要强的多,特别是对于旋转攻击,前者
的优势更加突出!
程序参考:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%嵌入水印算法%%%%%%%%%%%%%%
clearall;
cIc;
%%%%%%读取水印图象%%%%%%%
omark=double(imread('muxiaoobmp'))/255;
mo=size(omark,1);
no=size(omark,2);
%%%%%以下生成水印信息%/%%%%
mark=omark;
aIpha=200;
R1=randn(1,8);
randl=round(R1);
R2=randn(1,8);
rand2=round(R2);
%%%%%%%读取宿主图像%%%%%%%
cimage=imread('Ienaobmp*);
figure(1);
subpIot(2,3,1),imshow(cimage,口),ti11e('原始的宿主图像');
[me,nc]=size(cimage);
cimage=doubIe(cimage);
fftO=bIkproc(cimage,[8,8]fft2');
%%%%%%%嵌入水印%%%%%%%%%
fft_abs=abs(fftO);
fft_angIe=angIe(fftO);
fft1=fft_abs;
forii=1:mo
forjj=1:no
x=(ii—1)*8;y二(jj-1)*8;
ifmark(ii,jj)==1
k=rand1;
eIse
k=rand2;
end
fft1(x+1,y+8)=fft_abs(x+1,y+8)+aIpha*k(1);
fft1(x+2,y+7)=fft_abs(x+2,y+7)+aIpha*k(2);
fft1(x+3,y+6)=fft_abs(x+3,y+6)+aIpha*k(3);
fft1(x+4,y+5)=fft_abs(x+4,y+5)+aIpha*k(4);
fft1(x+5,y+4)=fft_abs(x+5,y+4)+alpha*k(5);
fft1(x+6,y+3)=fft_abs(x+6,y+3)+alpha*k(6);
fft1(x+7,y+2)=fft_abs(x+7,y+2)+aIpha*k⑺;
fft1(x+8,y+1)=fft_abs(x+8,y+1)+alpha*k(8);
end
end
fft_abs_O=fft1;
fft_abs_1=(fft_abs_O.*exp(i*fft_angIe));
wimage_O=bIkproc(fft_abs_1,[8,8],'ifft2,);
wimage=abs(wimage_0);
%%%%%%显示嵌入水印图象%%%%%
wimage_1=uint8(wimage);
imwrite(wimage_1,'withmarkobmp','bmp');
subpIot(2,3,2),imshow(wimage,[]),ti11e('嵌入水印后的图象’);
%%%%%%%%%%%%%进行各种攻击%%%%%%%%%%%%
disp(>1--->加入白噪声,);
disp('2——>高斯低通滤波’);
disp('3-->剪切图像');
disp('4—>旋转图象');
disp('5——>直接检测’);
begin二input('请选择攻击(1—5)');
switchbegin
%%%%%%%%加入白噪声%%%%%%%%
case1
Aimagel=wimage;
Wnoise=12*randn(size(Aimagel));
Aimagel=Aimagel+Wnoise;
subpIot(2,3,4),imshow(Aimagel,[]),ti11e('加入白噪声后的图象');
att=Aimagel;
imwrite(att,'whitenoiseimage,bmp');
%%%%%%高斯低通滤波%%%%%%%%
case2
Aimage2=wimage;
H=fspeciaI('gaussian*,[4,4],0o6);
Aimage2=imfiIter(Aimage2,H);
subpIot(2,3,4),imshow(Aimage2,[]),ti11e('高斯低通滤波后的图象’);
att=Aimage2;
imwrite(att,'gaussianimage,bmp')
%%%%%%%剪切攻击%%%%%%%%%
case3
Aimage3=wimage;
Aimage3(1:128,1:128)=256;
subpIot(2,3,4),imshow(Aimage3,[]),ti11e('剪切后的图象’);
att=Aimage3;
imwrite(att,'cutpartimage,bmp*);
%%%%%%%旋转攻击%%%%%%%%%
case4
Aimage4=wimage;
Aimage4=imrotate(Aimage4,10,'biIinear",'cropf;
Aimage_4=mat2gray(Aimage4);
subpIot(2,3,4),imshow(Aimage_4,[]),title('旋转10度后的图象‘);
att=Aimage_4;
imwrite(att,'rotatedimage.bmp');
%%%%%%%没有受到攻击%%%%%%%
case5
subpIot(2,3,4),imshow(wimage,[]),title('直接提取的图象’);
att=wimage;
imwrite(att,Jdirectimage.bmp');
end
%%%%%%%%%%%%%%%提取水印
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江省宁波市2026年八年级下学期数学月考试卷附答案
- AI赋能京剧传承:板式唱腔智能分析与应用
- 2026年自动化的智慧化转变与未来探讨
- 有机物中的共价键课件2025-2026学年高二下学期化学人教版选择性必修3
- 河北衡水中学2026届高三下学期综合素质评价三物理试卷+答案
- 真溶液食品保质期分析
- 伙伴真诚守诺保证承诺书3篇
- 慈善公益资金合规使用承诺函(7篇)
- 电梯安全管理与维护指南
- 企业品牌宣传与市场推广方案
- 小学动感中队活动方案
- 猪群周转培训课件
- 肺癌营养支持治疗
- 施工协调费协议书
- 皮肤生理学试题及答案
- 汽修厂应急预案
- 公司绩效考核方案制度范本
- 《资治通鉴》与为将之道知到课后答案智慧树章节测试答案2025年春武警指挥学院
- 配电柜拆除施工方案
- 银行客户满意度调查手册
- 2024年邮储银行综合柜员(中级)理论考试题库及答案
评论
0/150
提交评论