您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > 物联网信息安全实验指导书
实验一图像输入与输出基本操作(2学时)实验二基于DCT域的数字水印技术(2学时)综合性实验基于傅立叶域变换的数字水印技术(4学时)实验前预备知识:数字水印技术是利用数字产品普遍存在的冗余数据与随机性,将水印信息嵌入在数字产品本身中,从而起到保护数字产品版权或者完整性的一种技术。现在学术界对数字水印算法的理解都是将一些不易察觉的具有随机特性的数据嵌入到图像频域或空域的系数上。从信号处理的角度看,嵌入水印可以看成是在强背景下迭加一个弱信号,由于人类视觉系统的分辨率受到一定的限制,只要迭加的信号幅度不超过HVS的对比门限,人眼就无法感觉到信号的存在,所以可以通过对原始图像进行一定调整,在不影响视觉效果的情况下嵌入一些水印信息。数字水印系统的一般模型如图1所示:图1数字水印系统基本模型水印嵌入器的输入量有三个:水印信号M,宿主信号S和密钥K。水印信号M是指原始水印(图像或一个数字序列)通过一定的方法经过调制将嵌入到宿主信号中的数字信号。宿主信号S是指被嵌入水印的信号(原始信号)。密钥K则指用于提高水印系统安全性的密码信息,它独立于宿主信号。密钥有私有密钥和公共密钥之分,前者指攻击者在明确了水印嵌入方法但又不知道密钥的情况下,水印不会被破坏或盗取;后者是指攻击者对宿主信号(如内容标识、语言字幕等)不感兴趣的情况下,密钥也就不存在保密性,可以作为公共密钥。实验一图像输入与输出基本操作一、实验题目:图像输入与输出操作二、实验目的学习在MATLAB环境下对图像文件的I/O操作,为读取各种格式的图像文件和后续进行图像处理打下基础。三、实验内容利用MATLAB为用户提供的专门函数从图像格式的文件中读/写图像数据、显示图像,以及查询图像文件的信息。四、预备知识熟悉MATLAB开发环境。五、实验原理(1)图像文件的读取利用imread函数可以完成图像文件的读取操作。常用语法格式为:I=imread(‘filename’,‘fmt’)或I=imread(‘filename.fmt’);其作用是将文件名用字符串filename表示的、扩展名用字符串fmt(表示图像文件格式)表示的图像文件中的数据读到矩阵I中。当filename中不包含任何路径信息时,imread会从当前工作目录中寻找并读取文件。要想读取指定路径中的图像,最简单的方法就是在filename中输入完整的或相对的地址。MATLAB支持多种图像文件格式的读、写和显示。因此参数fmt常用的可能值有:‘bmp’Windows位图格式‘jpg’or‘jpeg’联合图像专家组格式‘tif’or‘tiff’标志图像文件格式‘gif’图形交换格式‘pcx’Windows画刷格式‘png’可移动网络图形格式‘xwd’XWindowDump格式例如,命令行I=imread(‘lena.jpg’);将JPEG图像lena读入图像矩阵I中。(2)图像文件的写入(保存)利用imwrite完成图像的输出和保存操作,也完全支持也完全支持上述各种图像文件的格式。其语法格式为:imwrite(I,‘filename’,‘fmt’)或imwrite(I,‘filename.fmt’);其中的I、filename和fmt的意义同上所述。注意事项:当利用imwrite函数保存图像时,MATLAB默认的保存方式是将其简化为uint8的数据类型。与读取文件类型类似,MATLAB在文件保存时还支持16位的PNG和TIFF图像。所以,当用户保存这类文件时,MATLAB就将其存储在uint16中。(3)图像文件的显示图像的现实过程是将数字图像从一组离散数据还原为一幅可见图像的过程。MATLAB的的图像处理工具箱提供了多种图像显示技术。例如imshow可以直接从文件显示多种图像;image函数可以将矩阵作为图像;colorbar函数可以用来显示颜色条;montage函数可以动态显示图像序列。这里仅对常用的显示函数进行介绍。①图像的显示imshow函数是最常用的显示各种图像的函数,其调用格式如下:imshow(I,N);imshow(I,N)用于显示灰度图像,其中I为灰度图像的数据矩阵,N为灰度级数目,默认值为256。例如下面的语句用于显示一幅灰度图像:I=imread(‘lena.jpg’);imshow(I);如果不希望在显示图像之前装载图像,那么可以使用以下格式直接进行图像文件的显示:imshowfilename其中,filename为要显示的图像文件的文件名。实例1-1显示一幅在当前目录下的.bmp格式的图像:imshowlena.jpg显示结果如图1.1所示。图1.1.1显示一幅图像文件中的图像注意事项:该文件名必须带有合法的扩展名(指明文件格式),且该图像文件必须保存在当前目录下,或在MATLAB默认的目录下。②添加色带colorbar函数可以给一个坐标轴对象添加一条色带。如果该坐标轴对象包含一个图像对象,则添加的色带将指示出该图像中不同颜色的数据值。这对于了解被显示图像的灰度级特别有用。其调用格式为:colorbar实例1-2I=imread(‘lena.jpg’);imshow(I);colorbar;图1.1.2显示图像并加入颜色条从上图可知,该图像是数据类型为uint8的灰度图像,其灰度级范围从0-255。③显示多幅图像显示多幅图像最简单的方法就是在不同的图形窗口中显示它们。imshow总是在当前窗口中显示一幅图像,如果用户想连续显示两幅图像,那么第二幅图像就会替代第一幅图像。为了避免图像在当前窗口中的覆盖现象,在调用imshow函数显示下一幅图像之前可以使用figure命令来创建一个新的窗口。例如:imshow(I1);figure,imshow(I2);figure,imshow(I3);有时为了便于在多幅图像之间进行比较,需要将这些图像显示在一个图形窗口中。达到这一目的有两种方法:一种方法是联合使用imshow和subplot函数,但此方法在一个图形窗口只能有一个调色板;另一种方法是联合使用subimage和subplot函数,此方法可在一个图形窗口内使用多个调色板。subplot函数将一个图形窗口划分为多个显示区域,其调用格式如下:subplot(m,n,p)subplot函数将图形窗口划分为m(行)×n(列)个显示区域,并选择第p个区域作为当前绘图区。例1-3用两排显示四幅图像,可以使用以下语句:I1=imread(‘lena.bmp’);I2=imread(‘gs256.bmp’);I3=imread(‘lena.bmp’);I4=imread(‘gs256.bmp’);subplot(2,2,1),imshow(I1);subplot(2,2,2),imshow(I2);subplot(2,2,3),imshow(I3);subplot(2,2,4),imshow(I4);图1.1.3在一个图形窗口中显示多幅图像(4)图像文件信息的查询imfinfo函数用于查询图像文件的有关信息,详细地显示出图像文件的各种属性。其语法格式为:info=imfinfo(‘filename’,‘fmt’)或info=imfinfo(‘filename.fmt’)或imfinfofilename.fmtimfinfo函数获取的图像文件信息依赖于文件类型的不同而不同,但至少应包含以下内容:文件名。如果该文件不在当前目录下,还包含该文件的完整路径。文件格式。文件格式的版本号。文件最后一次修改的时间。文件的大小。以字节为单位。图像的宽度。图像的高度。每个像素所用的比特数。也叫像素深度。图像类型。即该图像是真彩色图像、索引图像还是灰度图像。例如,命令行imfinfobubbles25.jpg会输出如下信息(注意,在这种情况下,有些域不包含信息):Filename:‘bubbles25.jpg’FileModDate:‘04-Jan-200312:31:26’FileSize:13849Format:‘jpg’FormatVersion:‘’Width:714Height:682BitDepth:8ColorType:‘grayscale’FormatSignature:‘’Comment:{}六、实验步骤:(1)利用imread函数完成对图像文件的读取操作。(2)利用imwrite函数完成图像的写入(保存)操作。(3)利用imshow函数显示图像。(4)利用imfinfo函数查询图像文件的有关信息。实验二基于DCT域的数字水印技术离散余弦变换,简称DCT,是一种实数域变换,其变换核为实数的余弦函数,计算速度较快,是一种近似最佳变换,很适合于做图象压缩和随机信号处理,它对常用的图象压缩有较强的鲁棒性。基于DCT域的数字水印算法,一般而言有两种算法。一种是直接对整幅图像进行DCT计算,选取合适频段的系数,嵌入水印。另一种是,首先将整幅图像分成块,对每一块分别进行DCT计算,在每一块中选取合适频段的系数,将水印信息分散嵌入到每一块所选取的DCT系数中。这种方法称为分块DCT,这种方法非常适合于8×8的图像块DCT变换。目前,DCT域的水印方法大多数是采用分块DCT方法。二维DCT概述:一般而言,数字图象NnMmnmS0,0),,(,其二维DCT变换用矩阵S~表示,其定义式如下式所示:)2)12(cos()2)12(cos(),()()(2),(210101~NljMkijiSlkNMlkSccMiNj(4-1)二维IDCT定义]8[如下:)2)12(cos()2)12(cos(),(~)()(2),(210101NljMkilkSlkNMjiSccMkNl(4-2)其中,1,...2,1,0,,1,...2,1,0,NljMki并且1,...2,1,10,21)(1Mkkkc1,...2,1,10,21)(2Nlllc(4-3)我们最常用到的是8×8分块DCT,也就是首先将大小为M×N的图像分成64/)()8/()8/(NMNM的非重叠的大小为8×8的块,然后对每一块作DCT。根据式(4-1)和式(4-2),8×8DCT的定义如下:)16)12cos()16)12(cos(),(2)(2)(),(707021~ljkijiSlklkSijcc(4-4)8×8IDCT的定义如下:)16)12(cos()16)12(cos(),(~2)(2)(),(707021ljkilkSlkjiSklcc(4-5)其中,,7,...2,1,0,,,lkji并且7,...2,1,10,21)(1kkkc7,...2,1,10,21)(2lllc(4-6)实验目的:学习使用基于DCT域数字水印嵌入算法和基于DCT域数字水印检测提取算法。实验内容和原理:(1)基于DCT域数字水印嵌入算法:DCT域的水印嵌入过程,就是首先对宿主图像S进行分块DCT运算,选取出要嵌入的DCT系数C,并且对宿主图像用HVS模型进行分析,得到感知系数掩蔽模板,用其来控制水印嵌入强度,再将编码后的水印信号W,用一定方式嵌入到选好的系数中。用嵌入水印的系数替代原来位置的系数,再进行逆DCT(InverseDiscreteCosineTransform,IDCT)变换,就得到了含有水印的图像X。DCT域水印系统的水印嵌入过程框图如图1所示:图1DCT域水印嵌入过程方框图(2)基于DCT域数字水印检测提取算法:DCT域水印的验证过程(即包括水印的检测和提取过程),就是将待测图像Y(注意此时的图像也许已经遭受了图象处理或恶意攻击)进行DCT运算;然后按着嵌入水印时选取的DCT系数,选取其含有水印的系数,进行水印提取,然后利用相关检测法判断水印是否存在。如果水印检测器输出结果显示水印存在,则根据需要可以用水印解码器对提取的水印进行解码
本文标题:物联网信息安全实验指导书
链接地址:https://www.777doc.com/doc-6579496 .html