《《物联网信息安全》实验指导书.docx》由会员分享,可在线阅读,更多相关《《物联网信息安全》实验指导书.docx(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验一图象输入与输出基本操作(2学时)实验二基于DCT域的数字水印技术(2学时)综合性实验基于傅立叶域变换的数字水印技术(4学时)实验前豫备知识:数字水印技术是利用数字产品普遍存在的冗余数据与随机性,将水印信息嵌 入在数字产品本身中,从而起到保护数字产品版权或者完整性的一种技术。现在学术界对数字水印算法的理解都是将一些不易察觉的具有随机特性的数 据嵌入到图象频域或者空域的系数上。从信号处理的角度看,嵌入水印可以看成 是在强背景下迭加一个弱信号,由于人类视觉系统的分辨率受到一定的限制,只 要迭加的信号幅度不超过HVS的对照门限,人眼就无法感觉到信号的存在,所 以可以通过对原始图象进行一定调整,在
2、不影响视觉效果的情况下嵌入一些水印 信息。数字水印系统的普通模型如图1所示:图1数字水印系统基本模型水印嵌入器的输入量有三个:水印信号M,宿主信号S和密钥K.水印信号M是指原始水印(图象或者一个数字序列)通过一定的方法经过调 制 将嵌入到宿主信号中的数字信号。宿主信号S是指被嵌入水印的信号(原始信号).密钥K则指用于提高水印系统安全性的密码信息,它独立于宿主信号.密钥有 私有密钥和公共密钥之分,前者指攻击者在明确了水印嵌入方法但又不知道密钥 的情况下,水印不会被破坏或者盗取;后者是指攻击者对宿主信号(如内容标识、 语言字幕等)不感兴趣的情况下,密钥也就不存在保密性,可以作为公共密钥。实验一 图
3、象输入与输出基本操作一、实验题目:图象输入与输出操作二、实验目的学习在MATLAB环境下对图象文件的I/O操作,为读取各种格式的图象文件 和后续进行图象处理打下基础.三、实验内容利用MATLAB为用户提供的专门函数从图象格式的文件中读/写图象数据、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;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 );
4、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); endend% %嵌入水印后图象%wimage=blkproc(cda1 ,8,8 ;idct2,);wimage_ 1 =uint8(wimage );imwrite ( wimage_ 1 , fwithmark.bmp, , bmp);subplot(2,3,2) , imshow(wimage, ) , title (嵌入水印后图象);% % %进行攻击测试 % % %disp( 1加入白噪声);disp(
5、2高斯低通滤波);disp( 3剪切图象);disp ( 4-旋转攻击);disp (节直接检测)begin=input(请选择攻击(1 - 5):)switch begin% %加入白噪声% %Aimage1=wimage ;Wnoise=20 *randn ( size (Aimagel );Aimagel =Aimage1 +Wnoise;subplot(2 ,3,4) ,imshow(Aimage1 , ) , title(加入白噪声后的图象); att=Aimage1 ;imwrite(att/ whitenoiseimage, bmp)% %高斯低通滤波% % % % %Aimag
6、e2=wimage ;H=fspecial Cgaussian, 4 , 4,0.5 );Aimage2=imfilter(Aimage25H);subplot(2 ,3,4), imshow (Aimage2 , 口 ) , title (高斯低通滤波后的图象);att=Aimage2;imwrite(att , *gaussianimage。bmp)% 剪切攻击% % %Aimage3=wimage ;Aimage3 ( 1 : 128,1 : 128) =256;subplot (2,3 , 4),imshow(Aimage35口 ) , title (剪切后的图象); att=Aima
7、ge3;imwrite ( att,cutpartimage 。bmp)% % %旋转攻击 % %Aimage4=wimage ;Aimage4=imrotate(Aimage4,10, bilinear , crop);Aimage_4=mat2gray(Aimage4);subplot (2 , 3,4) ,imshow(Aimage_4 , ) , title (旋转 10 度后的图象); att=Aimage_4;imwrite ( att/rotatedimage.bmp,);% % %没有受到攻击% %subplot(2,3,4),imshow(wimage , ),title(直
8、接提取的图象);att=wimage;imwrite(att ,directimage.bmp);end% % % 提取水印 % %tmark_O=att;tmark_0=blkproc (tmark_0 , 8,8, dct2);pass=zeros(1 , 8);for i=1 :mofor j=1 :nox= (i1) *8 ; y= (j1) *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
9、(5) =tmark_0(x+5,y+4 );pass(6) =tmark_0(x+6 , y+3);pass (7) =tmark_O (x+7 , y+2);pass(8) =tmark_0(x+8 , y+1);if ( corr2 (pass,rand1 ) corr2(pass ,rand2) tmark_1(i , j) =1;elsetmark_ 1(iJ)=0;endendend% % 计算NC (归一化相关系数) % % %g_mark=double(tmark_ 1);o_mark=double ( omark);m,n=size (g_mark);nc_0=0;nc_ 1
10、 =0 ;nc_2=0;for i=1 : mfor j=1:nnc_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_24-g_mark(i,j) * g_mark (i , j);endendNC=nc_0/sqrt(nc_ 1 *nc_2);%显示提取水印% %subplot(2,3 ,5)jmshowC muxiao o bmp) ,title(,原始水印图象);subplot (2,3,6) ,imshow(tmark_ 1 ,);name=提取得水印图象;t
11、itle(strcat (num2str(name) , NC=, num2str (NC);综合设计性实验基于傅立叶域变换的数字水印技术实验目的:学习使用基于傅立叶域的数字水印嵌入算法和基于DCT域数字水印 检测提取算法。实验内容和原理:傅立叶变换(Fourier Transform)是线性系统分析的一个有力工具,是研究信 号的频谱方法,它架起了时域和频域之间的桥梁.使我们能够定量分析诸如数字化 系统、采样点、电子放大器、卷积滤波器、噪声等的作用,把傅立叶变换的理论同 其物理解释相结合,将大大有助于解决大多数图象处理问题。Fourier分析理论十分完善,既可以处理连续信号也可以处理离散信号。
12、计 算机只能处理离散信号,且在数字图象处理中,输入图象和输出图象通常都是 二维的,普通表示成二维数字矩阵,因此这里直接讨论二维离散傅立叶变换(DFT) 和二维快速傅立叶变换(FFT) .(1)二维离散傅立叶变换 DFT ( Discrete Fourier Transfoim)二维离散傅立叶变换对定义式如下:(1 1)(1-2 )二维离散傅立叶变换的傅立叶谱、相位、功率谱分别如下:傅立叶谱:(1-3 )相位:(1 4)功率谱:(1 5)式子(1T)可以分离为:(1 6)式子(12)可以分离为:(1 7)由上两式可知,二维傅立叶变换可由连续两次一维傅立叶变换得到,从而将 二维DFT分解为水平和垂
13、直两部份运算,上式中方括号中的项表示在图象的行上 计算的DFT,方括号外边的求和则实现结果数组在列上的DFT,这种分解使我们 可以用一维FFT来快速实现二维DFTo(2)二维快速傅立叶变换 FFT (Fast Fourier Transform)FFT的基本思想是:令序列的长度为,如果不满足,在尾部补零,没有任何影响。按n奇偶把分解 为两个N/2点的子序列:(18) (19) 那末(1 10) 将(1-8)和(1 9)式代入上式得:(1 11)上式右边的两部份恰好是长度(周期)为N/2的的傅立叶变换,所以:(1-12)(1-13)这样一个长度为N的DFT就分解为两个长度为N/2的DFT,然后进
14、行N/2次 复数的蝶式运算,再运用分解-递归思想,分解次,每一次均有N/2个蝶式运算,所 以FFT的时间复杂度为。FFT在图象运用中的思想是,先将原图象进行转置,按行对转置后的图象矩 阵做一维FFT,将此变换所得的中间矩阵再转置,再按对转置后的中间矩阵做一 维FFT,最后得到的就是二维FFTo 实验操作方法与步骤: (1)嵌入算法的步骤如下:1 .将宿主图象分成8X8的块,每一块都进行DFT变换,得到与宿主图象相 同尺寸的DFT域图象系数矩阵。2 .产生两个不相关的伪随机序列,并设定一个密钥keyo3 .将每一个8X8的DFT系数矩阵,从每一块的中频段取出个系数。4 .由于DFT域的幅度谱具有
15、对称性,为了水印嵌入后保持这种对称性,也 为了确保恢复图象像素值为实数,嵌入水印时采用对称嵌入。嵌入规则为当水印 图象元素为0时,按照式子(其中a伯为尺度因子,mark为随机序列,为原 图象的分块DFT系数),将一个随机序列与原始图象块的幅度谱对应元素进行乘 性叠加;为1时,用另一个伪随机序列与幅度谱对应元素进行乘性叠加。5 o用得到的新的DFT系数对原来位置的DFT系数进行置换。60 对每一图象块进行DFT逆变换,得到含水印图象。(2)提取算法步骤如下:1.将宿主图象分成8义8的块,每一块都进行DFT变换,得到与宿主图象相同 尺寸的DFT域图象系数矩阵.20对每一块的DFT系数进行之”字型罗
16、列,从我们已知的嵌入位置取出 可能含有水印的系数,将所有提取出的系数,按顺序组成新的系数序列.3 .计算嵌入水印图象块的幅度谱与两个伪随机序列的相关性,假设嵌入的水 印图象矩阵为0时叠加的是随机序列A,为1时叠加的是随机序列B,则 提取时如果嵌入水印幅度谱与随机序列A的相关性大于其B的相关性,那末这个 位置嵌入的是水印图象矩阵0,元素.按这个规则即可提取出水印图象。4 .将含水印的系数序列与水印信号进行相关计算,得到归一化相关系数。实果与分析:以下是尺度因子alpha=260时的实验结果,以及受到各种攻击后所提取到的水 印图象及其与原始水印图象的相关系数:图1原始图象与嵌入水印后的图象图2没有
17、受到攻击的图象和直接提取的水印图象此时相关系数=1图3加入白噪声后的图象、原始水印图象及提取的水印图象止匕时相关系数=0.96566图4高斯低通滤波后的图象及提取的水印图象此时相关系数=0 o 97311图5剪切后的图象及提取的水印图象止匕时相关系数=0.96907图6旋转后的图象及提取的水印图象此时相关系数=0。91301结论:由于DFT域对全局性的旋转、平移和缩放变换具有不变性的特点,基 于DFT域的数字水印技术要比基于DCT域的数字水印技术的鲁棒性要强的多, 特殊是对于旋转攻击,前者的优势更加突出!序参考:% % % % % 嵌入水印算法 % % % %clear all;cic ;%
18、%读取水印图象% %omark=double (imreadCmuxiao.bmp,) /255;mo=size (omark,1);no=size(omark , 2);%以下生成水印信息% %mark=omark ;alpha=200;R1=randn (1,8);rand1=round (R1);R2=randn(1,8 );rand2=round(R2 );% % %读取宿主图象% %cimage=imread ( lena.bmp);figure(1 );subplot(2 , 3 , 1) Jmshow ( cimage, ), title(原始的宿主图象)me , nc=size
19、 ( cimage ); cimage=double(cimage ); fftO=blkproc ( cimage , 8,8 ,);%嵌入水印 % % fft_abs=abs (fftO); fft_angle=angle (fftO);fftl =fft_abs;for ii=1 : mofor jj=1:nox= (ii-1 ) * 8;y=(jj - 1) *8;if mark (iijj) =1 k=rand1;elsek=rand2;endfftl (x+1,y+8) =fft_abs ( x+1,y+8)+alpha *k;fft1 (x+2,y+7 ) =fft_abs (x
20、+2 , y+7)+alpha*k(2);fft1 (x+3 , y+6)=fft_abs(x+3 , y+6)+alpha*k (3);fft1 (x+4,y+5 ) =fft_abs (x+4 , y+5)+alpha *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 ) +alpha*k(7);fft1 ( x+8,y+1 )=fft_abs(x+8 , y+1 ) +alph
21、a *k(8); endendfft_abs_0=fft1;fft_abs_ 1 =(fft_abs_O 。* exp (i*fft_angle ); wimage_0=blkproc(fft_abs_ 1,8,8 ,);wimage=abs(wimage_O );% %显示嵌入水印图象% %wimage_ 1=uint8 (wimage);imwrite(wimage_ 1/withmark 。bmp,bmp)subplot(2 , 3,2 ), imshow ( wimage, ) , title (嵌入水印后的图象); % % % 进行各种攻击 % disp(1加入白噪声,);disp。
22、2高斯低通滤波0 ;disp C3一剪切图象,);disp(Z 旋转图象);disp(,5 直接检测);begin=inputC 请选择攻击(1-5 ),);switch begin%加入白噪声% %Aimage1=wimage ;Wnoise=12*randn(size (Aimagel);Aimagel =Aimage1 +Wnoise;subplot(2,3 , 4) ,imshow (Aimagel, ) , title (加入白噪声后的图象); att=Aimage1 ; imwrite(att,9whitenoiseimage。bmp);% % 高斯低通滤波% % %Aimage2
23、=wimage ;H=fspecial(,gaussian, , 4 , 4 , 0 0 6);Aimage2=imfilter (Aimage2,H );subplot(2,3,4 ), imshow(Aimage2 , ), title。高斯低通滤波后的图象,); att=Aimage2 ;imwrite ( att, gaussianimage 。bmp)% %剪切攻击 % %Aimage3=wimage ;Aimage3 ( 1:128,1 : 128) =256;subplot(2,3 , 4),imshow (Aimage3, )(,剪切后的图象);att=Aimage3 ;imw
24、rite(att , cutpartimage 。bmp);% % 旋转攻击% %Aimage4=wimage ;Aimage4=imrotate(Aimage4 , 10,bilinear,crop);Aimage_4=mat2gray(Aimage4) ;subplot (2,3,4) , imshow (Aimage_4 , ),title (旋转 10度后的图象);att=Aimage_4 ;imwrite(att , ,rotatedimage.bmp,)% %没有受到攻击% %subplot(2 , 3,4) Jmshow ( wimage , ),title (直接提取的图象 a
25、tt=wimage;imwrite(att,directimage。bmp);end% % 提取水印% % %tmark_O=att ;tmark_0=blkproc(tmark_0 , 8 , 8/fft2f);tmark_O=abs (tmark_0);pass=zeros(1,8);for ii=1 :mofor jj=1 : nox=(ii- 1 ) *8 ; y= (jj 1) * 8;pass(1 ) =tmark_O (x+1,y+8); pass(2) =tmark_0(x+2 , y+7); pass(3)=tmark_0 (x+3 , y+6); pass(4)=tmark
26、_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_O (x+8,y+1);if (corr2(pass , randl ) corr2(pass,rand2 ) tmark_ 1 (iijj)=1;elsetmark_ 1 (iijj) =0;endendend% % %计算NC (归一化相关系数)% % g_mark=double (tmark_ 1);o_mark=double (omark);m,n=siz
27、e ( g_mark); nc_0=0;nc_ 1 =0 ;nc_2=0 ;for ii=1 :mfor jj=1 : nnc_0=nc_0+g_mark(ii , jj) * o_mark(ii , jj);nc_ 1 =nc_ 1 +o_mark(ii,jj )* o_mark(ii,jj ); nc_2=nc_2+g_mark (ii , jj) *g_mark(iijj); endendNC=nc_0/sqrt(nc_ 1*nc_2 );%显示提取水印图象%subplot (2,3 , 5) ,imshow ( muxiao.bmp* ) ,title (原始水印图象9; subplo
28、t (2,3,6), imshow(tmark_ 1 ,);name提取的水印图象,title(strcat ( num2str(name ) ,NC=, num2str (NC);显示图象,以及查询图象文件的信息.四、豫备知识熟悉MATLAB开辟环境。五、实验原理(1)图象文件的读取利用imread函数可以完成图象文件的读取操作。常用语法格式为: l=imreadCfilename fmt)或者 l=imread (6filename.fmt5);其作用是将文件名用字符串filename表示的、扩展名用字符串fmt (表示图象文件格式)表示的图象文件中的数据读到矩阵I中。当filename中
29、不包含任何路径信 息时,imread会从当前工作目录中寻觅并读取文件。要想读取指定路径中的图象,最简单的方法就是在filename中输入完整的或者相对的地址。MATLAB支持多 种图象文件格式的读、写和显示。因此参数fmt常用的可能值有:bmpWindows位图格式jpgor jpeg,联合图象专家组格式tif or tiff标志图象文件格式gif图形交换格式pcxWindows画刷格式png可挪移网络图形格式xwdX Window Dump 格式例如,命令行l=imread(1ena.jpg5);将JPEG图象lena读入图象矩阵I中。(2)图象文件的写入(保存)利用imwrite完成图象的
30、输出和保存操作,也彻底支持也彻底支持上述各种 图象文件的格式。其语法格式为:imwrite(l ,叶ilenameJfmt)或者 imwrite (I,叶ilename.fmt )其中的I、filename和fmt的意义同上所述。注意事项:当利用imwrite函数保存图象时,MATLAB默认的保存方式是将其 简化为uint8的数据类型。与读取文件类型类似,MATLAB在文件保存时还支持16 位的PNG和TIFF图象。所以,当用户保存这种文件时,MATLAB就将其存储在附录:MATLAB函数介绍在研究水印技术时,我们处理的图象数据是二维信号,而声音是一维信号, 所以在这里,我门只简单介绍与水印有
31、关的函数。1o数据输入输出函数imread ()和 imwrite 0 : 可以读写 bmp, jpg/jpeg , tif/tiff, png, hdf, pcx, wxd 格式文件。读索引文件时,还可以得到相应的调色板数据.2 o 图象显示imshow ():显示一幅图象;imfinfo ():可以得到读入图象的信息。如文件 的大小、格式、格式版本号、图象的高度、宽度、颜色类型(真彩色,灰度图还是 索引图)等。3o变换域函数对信号采用不同的变换,是实现频域法水印的至关重要的一步,MATLAB中 的一维信号和二维信号分别提供了各种变换和逆变换函数。1)离散余弦变换(DCT)(1)dct(),
32、 dct2 ():分别实现一维信号和二维信号的DCT (离散余弦变换);(2) idct (), idct2 ():分别实现一维信号和二维信号的IDCT(逆离散余弦 变换);2)离散傅立叶变换(DFT)(1) fft(), fft2():分别实现一维信号和二维信号的DFT (离散傅立叶变换);(2)ifft 0, ifft2 ():分别实现一维信号和二维信号的IDFT(逆离散傅立叶变 换);4o 攻击函数对算法进行攻击测试是对水印鲁棒性检测的一种重要手段,一个好的水印算 法必须经过各种攻击测试才干对之做出客观的评价。MATLAB中的许多函数可以直接用来做攻击测试:1)旋转:rotate ()可
33、以对图象进行任意角度的旋转;2)剪裁:imcrop ()可以按精确定位的各点坐标进行剪裁;3)滤波:filter ()和filter2()可实现对一维信号和二维信号的滤波;4)加各种噪声:imnoise ()可以对图象加入各种噪声,如白噪声、椒盐噪声等。uint16 中。(3)图象文件的显示图象的现实过程是将数字图象从一组离散数据还原为一幅可见图象的过程.MATLAB的的图象处理工具箱提供了多种图象显示技术。例如imshow可以直接 从文件显示多种图象;image函数可以将矩阵作为图象;colorbar函数可以用来显 示颜色条;montage函数可以动态显示图象序列。这里仅对常用的显示函数进行
34、 介绍。图象的显示imshow函数是最常用的显示各种图象的函数,其调用格式如下:imshow (l,N);imshow (I, N)用于显示灰度图象,其中I为灰度图象的数据矩阵,N为灰度级 数目,默认值为256o例如下面的语句用于显示一幅灰度图象: l=imread ( lena。jpg); imshow(l);如果不希翼在显示图象之前装载图象,那末可以使用以下格式直接进行图象 文件的显示:imshow filename其中,filename为要显示的图象文件的文件名。实例1 1显示一幅在当前目录下的.bmp格式的图象: imshow leqa.jpg显示结果如图图】N、。1显示一幅图象文件中
35、的图象注意事项:该文件名必余筏法的扩展名(指明文件格式),且该图象文件必 须保存在当前目录下,或者在MAfLAB默认的目录下.添加色带colorbar函数可以给一个坐标轴对象添加一条色带。如果该坐标轴对象包含一 个图象对象,则添加的色带将指示出该图象中不同颜色的数据值.这对于了解被显 示图象的灰度级特殊实用。其调用格式为:colorbar实例12 l=imread ( lenajpg); imshow (I);oobrbar;图1。1.2显示图象并加入颜色条从上图可知,该图象是数据类型为uint8的灰度图象,其灰度级范围从0-255o显示多幅图象显示多幅图象最简单的方法就是在不同的图形窗口中显
36、示它们。imshow总是在当 前窗口中显示一幅图象,如果用户想连续显示两幅图象,那末第二幅图象就会替代 第一幅图象。为了避免图象在当前窗口中的覆盖现象,在调用imshow函数显示 下一幅图象之前可以使用figure命令来创建一个新的窗口。例如:imshow (11);figure,imshow(l2);figure,imshow (I3);有时为了便于在多幅图象之间进行比较,需要将这些图象显示在一个图形窗 口中。达到这一目的有两种方法:一种方法是联合使用imshow和subplot函数, 但此方法在一个图形窗口只能有一个调色板;另一种方法是联合使用subimage和 subplot函数,此方法
37、可在一个图形窗口内使用多个调色板。subplot函数将一个图形窗口划分为多个显示区域,其调用格式如下:subplot (m, n,p)subplot函数将图形窗口划分为m (行)义n (列)个显示区域,并选择第p个 区域作为当前绘图区。例1-3用两排显示四幅图象,可以使用以下语句: I1=imread ( 1ena.bmp); I2=imread( gs256.bmp);I3=imread( lena bmp);I4=imread( gs256.bmp); subplot(252,1 ),imshow(H); subplot (2,2,2),imshow(l2);subplot (2,2,3)
38、,imshow(; subplot (2 , 2,4), imshow(l4);图在一个图形窗口中显示多幅图象(4)图象文件信息的查询imfinfo函数用于查询图象文件的有关信息,详细地显示出图象文件的各种属 性。其语法格式为:info=imfinfo (filename fmt)或者 info=imfinfo (6filename.fmt,)或者 imfinfo filename.fmtimfinfo函数获取的图象文件信息依赖于文件类型的不同而不同,但至少应包 含以下内容:文件名。如果该文件不在当前目录下,还包含该文件的完整路径。文件格式。文件格式的版本号。文件最后一次修改的时间。文件的大小
39、。以字节为单位。图象的宽度。图象的高度。每一个像素所用的比特数.也叫像素深度。图象类型。即该图象是真彩色图象、索引图象还是灰度图象。例如,命令行imfinfo bubbles25.jpg会输出如下信息(注意,在这种情况下,有些域不包含信息)Filename:6bubbles25o jpgFileModDate:FileSize:Format:Formatversion:Width:Height:BitDepth:ColorType:404Jan-200312 : 31 : 2613849jpg7146828grayscale,Formatsignature :Comment:六、实验步骤:(1
40、)利用imread函数完成对图象文件的读取操作。(2)利用imwHte函数完成图象的写入(保存)操作。(3)利用imshow函数显示图象.(4)利用imfinf。函数查询图象文件的有关信息。实验二基于DCT域的数字水印技术离散余弦变换,简称DCT,是一种实数域变换,其变换核为实数的余弦函数, 计算速度较快,是一种近似最佳变换彳艮适合于做图象压缩和随机信号处理,它对 常用的图象压缩有较强的鲁棒性。基于DCT域的数字水印算法,普通而言有两种算法.一种是直接对整幅图象 进行DCT计算,选取合适频段的系数,嵌入水印。另一种是,首先将整幅图象分 成块,对每一块分别进行DCT计算,在每一块中选取合适频段的
41、系数,将水印信息分 散嵌入到每一块所选取的DCT系数中。这种方法称为分块DCT,这种方法非常 适合于8义8的图象块DCT变换。目前,DCT域的水印方法大多数是采用分块 DCT方法。二维DCT概述:普通而言,数字图象,其二维DCT变换用矩阵表示,其定义式如 下式所示:(4-1)二维IDCT定义如下:(42)其中并且(4-3)我们最常用到的是8X8分块DCT,也就是首先将大小为MXN的图象分成 的非重叠的大小为8X8的块,然后对每一块作DCT.根据式(4-1)和式(4-2),8 X8DCT的定义如下:(44)8X8IDCT的定义如下:(4一5)其中,并且实验目的:学习使用基于DCT域数字水印嵌入算
42、法和基于DCT域数字水印检测 提取算法。实验内容和原理:(1)基于DCT域数字水印嵌入算法:DCT域的水印嵌入过程,就是首先对宿主图象S进行分块DCT运算,选取 出要嵌入的DCT系数C,并且对宿主图象用HVS模型进行分析,得到感知系数 掩蔽模板,用其来控制水印嵌入强度,再将编码后的水印信号W,用一定方式嵌 入到选好的系数中。用嵌入水印的系数替代原来位置的系数,再进行逆 DCT(lnverse Discrete Cosine Transform , IDCT)变换,就得到了含有水印的图象 X。 DCT域水印系统的水印嵌入过程框图如图1所示:图1 DCT域水印嵌入过程方框图基于DCT域数字水印检测
43、提取算法:DCT域水印的验证过程(即包括水印的检测和提取过程),就是将待测图象 Y(注意此时的图象也许已经遭受了图象处理或者恶意攻击)进行DCT运算;然后 按着嵌入水印时选取的DCT系数,选取其含有水印的系数,进行水印提取,然后 利用相关检测法判断水印是否存在。如果水印检测器输出结果显示水印存在,则 根据需要可以用水印解码器对提取的水印进行解码,恢复水印。水印检测提取 过程如图2图2DCT域数字水印检测提取框图实验操作方法与步骤:(1)水印嵌入步骤如下:1 。 将宿主图象分成8X8的块,每一块都进行DCT变换,得到与宿主图象 相同尺寸的DCT域系数矩阵。2 .产生两个不相关的伪随机序列,并设定
44、一个密钥key.3 .将每一个8义8的DCT系数矩阵,从每一块的中频段取出个系数。4。然后嵌入水印,嵌入规则为当水印图象元素为0时,按照式子(其中alpha 为尺度因子,mark为随机序歹!J,为原图象的分块DCT系数),将一个随机序列与原 始图象块的幅度谱对应元素进行乘性叠加;为1时,用另一个伪随机序列与幅度 谱对应元素进行乘性叠加。5o 用得到的新的DCT系数对原来位置的DCT系数进行置换.60对新的DCT系数矩阵进行DCT逆变换,得到了嵌入水印信号的图象。(2)水印检测提取步骤如下:1 .对含有水印图象进行8义8的块DCT变换。2 .对每一块的DCT系数进行之”字型罗列,从我们己知的嵌入位置取出可 能含有水印的系数,将所有提取出的系数,按顺序组成新的系数序列。3 .用密钥生成水印信号4 .将含水印的系数序列与水印信号进行相关计算,得到归一化相关系数.实验结果及分析:以下是尺度因子alpha=30时的实验结果,以及受到各种攻击后所提取到的水 印图象及其与原始水印图象的相关系数:图3原始图象和嵌入水印后的图象此时,alpha=30图4没有受到攻击的图象及提取到的水印图象此时相关系数=1图5加入白噪声后的图象、原始水印和提取的水印图象此时相关系数=0 o 99969图6高斯低通滤