第三章图像信息隐藏与水印3.1LSB图像信息隐藏•【实验目的】•【实验环境】•【原理简介】•【实验步骤】•【思考题】【实验目的】•了解信息隐藏中最常用的LSB算法特点,掌握LSB算法原理,设计并实现一种基于图像的LSB隐藏算法;•了解如何通过峰值信噪比来对图像质量进行客观评价,并计算峰值信噪比。【实验环境】•(1)WindowsXP或Vista操作系统•(2)MATLAB7.1科学计算软件•(3)BMP灰度图像文件【原理简介】•多媒体信息在数字化时,会产生物理随机噪声,而人的感观系统对这些随机噪声不敏感。替换技术就是利用这个原理,通过使用秘密信息比特替换随机噪声,从而完成信息隐藏目标。•BMP灰度图像的位平面图如右,每个像素值为8bit二进制值,表示该点亮度。•不同位平面对视觉影响不同,可用下面系列图像表示。去除第一位平面的图像和第一位平面去除第1-4位平面的图像和第1-4位平面去除第1-7位平面的Lena图像和第1-7位平面•图像高位平面对图像感官质量起主要作用,去除图像最低几个位平面并不会造成画面质量的明显下降。利用这个原理可用秘密信息(或称水印信息)替代载体图像低位平面以实现信息嵌入。•算法选用最低位平面来嵌入秘密信息。最低位平面对图像的视觉效果影响最轻微,但很容易受噪声影响和攻击,解决办法可采用冗余嵌入的方式来增强稳健性。即在一个区域(多个像素)中嵌入相同的信息,提取时根据该区域中的所有像素判断。【实验步骤】•(1)隐藏算法•(2)计算峰值信噪比(1)隐藏算法算法分为三个部分实现:•隐藏算法•提取算法•测试脚本(2)计算峰值信噪比•峰值信噪比定义:•峰值信噪比函数•测试脚本2,2,,,,maxxyxyxyxyxypPSNRXYpp【思考题】•1.LSB算法可以替换最低位,也可以采用随机算法来替换低第四位中的任何一位,因为图像低四位中的任意一位的改变不影响图像文件的视觉效果,自行设计一个LSB隐写算法,将秘密信息随机嵌入到原始载体每个像素的低四位中的任意一位。•2.设计一种算法,用水印信息(二值图像)的高四位替换载体图像(灰度图像)的低四位,并提取水印信息。3.2二值图像信息隐藏•【实验目的】•【实验环境】•【原理简介】•【实验步骤】•【思考题】【实验目的】•了解二值图像的特点,掌握基于二值图像的信息隐藏原理,设计并实现两种基于二值图像的信息隐藏方法。【实验环境】•(1)WindowsXp或Vista操作系统•(2)MATLAB7.1科学计算软件•(3)二值图像文件【原理简介】•二值图像又称为单色图像或黑白图像,一般用1或者0表示黑色或白色像素点,利用二值图像信息隐藏的方法主要是根据二值图像中黑白像素的数量的比较来隐藏信息。方法是把一个二值图像分成一系列矩形图像区域B,某个图像区域B中黑色像素的个数大于一半,则表示嵌入0;如果白色像素的个数大于一半,则表示嵌入1,但是当需要嵌入的比特与所选区域的黑白象素的比例不一致时,为了达到希望的像素关系,则需要修改一些像素的颜色。•该方法存在一定的缺陷,没有明确界定哪些像素可以修改以便于隐藏秘密信息,二值图像中某些像素的修改可能会引起二值图像视觉效果上的较大变化,相应的水印嵌入算法可能在较大程度破坏图像的质量。•为达到较好的隐藏效果,可以采用游程编码方法在二值图像中隐藏信息。•游程编码的概念在图像压缩的过程中经常使用,如下图所示的编码为:0,3,1,5,0,4,1,2,0,1。其中0表示白色像素点,1表示黑色像素点。游程编码像素分布图•秘密信息嵌入的时候修改二值图像的游程长度,如果秘密信息位是0,则修改该游程长度为偶数;如果为1,则修改游程长度为奇数;如果秘密信息的取值与游程长度的奇偶性相匹配,则不改变游程长度。提取的时候根据游程长度奇偶性提取出秘密信息。在隐藏信息的时候,改变游程的奇偶性是通过对下一个游程的第一个像素的像素值进行修改,因此当下一个游程的值为1的时候不能修改。修改后的游程长度不能隐藏信息,因此隐藏信息的位置是选取游程长度数组的偶数位来隐藏。【实验步骤】•1.嵌入秘密信息•2.提取秘密信息提取秘密信息时,提取方需知道隐藏的秘密信息的数量,使用隐藏的秘密信息的数量值来对载体图像进行分块。•3.游程编码方法在二值图像中隐藏信息携秘载体在视觉效果上和原始载体有很大变化,通过不断修改hidden.txt文本的值来增加隐藏的信息容量。隐藏的信息越多,图像的分块就越细,隐藏的效果就越好。方案中修改像素的位置非常固定,都是修改每个图像块的所有行前面的像素,这样隐藏信息后的图像在视觉效果上和原始图像存在较大差别,违背了信息隐藏不改变视觉效果的原则。为改变上述算法,可以采用游程编码方法在二值图像中隐藏信息。采用游程编码方式隐藏的信息量较大,而且隐写后的载体图像和原始载体图像从视觉效果上看差别不大,是较好的一种二值图像信息隐藏方法。【思考题】•1.二值图像信息隐藏另一种方法原理如下:将二值图像分块,使用一个与图像块大小相同的密钥二值图像块,与每一个图像块按像素进行“与”运算,“与”运算的结果可以确定是否在该块中嵌入数据,或嵌入怎样的数据。设计并实现该算法。3.3Patchwork图像信息隐藏•【实验目的】•【实验环境】•【原理简介】•【实验步骤】•【思考题】【实验目的】•了解Patchwork信息隐藏特点,掌握基于Patchwork的图像信息隐藏原理,设计并实现一种基于Patchwork信息隐藏方法。【实验环境】•(1)WindowsXP或Vista操作系统•(2)MATLAB7.1科学计算软件•(3)BMP图像【原理简介】•Patchwork是指从载体数据中选择一些数据组成两个集合,然后通过修改这两个集合之间的某种关系来携带水印信息。这两个集合可以是两个系数、两组系数或者是两个特征量。两个集合之间的关系可以是大小关系、能量关系、逻辑关系和奇偶性关系等。•Patchwork方法嵌入水印时,通过修改集合之间的某种关系来嵌入水印;提取水印时,则根据对应的关系来提取嵌入的水印信息。Patchwork方法最大优点之一就是可以实现盲检测。Patchwork可以适用于时/空域、变换域和压缩域,本节主要介绍时域下的典型Patchwork方法。•Patchwork方法典型算法只能隐藏1bit的信息,也就是只能说明该图像是否存在水印,隐藏的信息量比较小,但是该算法的鲁棒性较强。该算法的原理如下:随机选择两个集合A={ai}和B={bi},要求A和B中含有相同图像系数,设为n;将集合A中所有样点的像素值增加d,同时将集合B中所有样点的像素值减少d,这样两个集合中的样值都经过微小的改动。•选择集合A和B的方法很多,但PatchWork方法是基于以下假设的,也就是说随机选择的两个样本集合的均值相同。本节中方法是根据图像的横坐标和纵坐标之和的奇偶性不同将图像分为两组,将横坐标和纵坐标之和为偶数的所有系数上增加常量d=2.3,将横坐标和纵坐标之和为奇数的所有系数上减少常量d=2.3。第二种方法是随机选择N对像素点(ai和bi),然后将ai点的值增加d,将bi点的像素值减少d。【实验步骤】•1.嵌入秘密信息•2.提取秘密信息原始图像和携密图像从视觉效果上几乎相同。提取时,首先将两个图像块集合的样本分别求平均值,计算两个样本均值的差来判断水印信息是否存在。把整个图像中的像素全部分成两组,也可以通过随机的方式实现。【思考题】•1.本节介绍的方案都是假设A和B两个集合在未修改之前样本的均值相同,但实际情况下样本均值之间的差异并不总为零。读者可自行从图像的像素中挑选A和B两个集合,使得这两个集合样本的均值尽量接近,越接近,隐藏和提取的效果越好。设计并实现一种Patchwork算法,使得挑选的两个集合A和B的均值尽可能接近。3.4调色板图像隐写•【实验目的】•【实验环境】•【原理简介】•【实验步骤】【实验目的】•了解调色板图像的特点,掌握基于调色板图像的信息隐藏原理,设计并实现一种基于调色板图像的信息隐藏算法。【实验环境】•(1)WindowsXP或Vista操作系统•(2)MATLAB7.1科学计算软件•(3)调色板图像【原理简介】•调色板图像含有一个不超过256种颜色的调色板,并对应每种颜色的R、G、B三种分量的值,图像内容中的每个像素存储的是一个不超过8比特的索引值,其指向调色板中的对应颜色就是图像的真实色彩。大部分图像用到的颜色数小于256种,甚至小于128种,因此可以在调色板中隐藏秘密信息。•调色板图像的调色板中最多包含256种颜色,若改变这些颜色的排列顺序并相应的改变图像像素数据,不会对图像内容造成任何影响。因此隐藏秘密信息最简单方法就是重新排列调色板中的这些颜色,同时修改索引值,但是许多软件生成的调色板都是按照亮度和使用频率排列的,如果在调色板中打乱颜色会使其毫无隐藏可言。如果调色板颜色小于128种,可复制一个调色板,得到一个扩展的调色板,隐藏0使用原始索引值,隐藏1使用扩展索引值,但是重复颜色的调色板会引起使用者怀疑。•其他方法来隐藏信息:对于调色板中的每一种颜色,可以通过修改颜色的蓝色分量(人眼对于绿色分量最为敏感,对蓝色分量最不敏感)来增加一种接近的但不完全相同的颜色,这样就形成一个扩展的调色板。•嵌入算法如下:对调色板中所有颜色,把像素点的蓝色分量增加,然后将这种颜色添加到调色板中形成一个扩展调色板。根据需要嵌入的消息长度,随机选取隐藏的位置,当嵌入0的时候,使用原调色板中的颜色,当嵌入1的时候,使用扩展后调色板中的颜色。•提取的时候,需要知道原始调色板的长度、随机选择的种子数和隐藏的信息数量,对于选中的像素点,如果使用原调色板中的颜色,提取信息0,如果使用扩展调色板中颜色数,提取信息1。【实验步骤】•1.嵌入秘密信息•2.提取秘密信息3.5DCT域图像水印•【实验目的】•【实验环境】•【原理简介】•【实验步骤】•【思考题】【实验目的】•了解频域水印的特点,掌握基于DCT系数关系的图像水印算法原理,设计并实现一种基于DCT域的图像水印算法。【实验环境】•(1)WindowsXP或Vista操作系统•(2)MATLAB7.1科学计算软件•(3)图像文件【原理简介】•在信号的频域(变换域)中隐藏信息要比在时域中嵌入信息具有更好的鲁棒性。一副图像经过时域到频域的变换后,可将待隐藏信息藏入图像的的显著区域,这种方法比LSB以及其他一些时域水印算法更具抗攻击能力,而且还保持了对人类感官的不可察觉性。常用的变换域方法有离散余弦变换(DCT)、离散小波变换(DWT)和离散傅立叶变换(DFT)等。•下面介绍一种提取秘密信息的时候不需要原始图像的盲水印算法。算法的思想是利用载体中两个特定DCT系数的相对大小来表示隐藏的信息。载体图像分为8×8分块,进行二维DCT变换,分别选择其中的两个位置,比如用(u1,v1)和(u2,v2)代表所选定的两个系数的坐标。如果Bi(u1,v1)Bi(u2,v2),代表隐藏1,如果相反,则交换两系数。如果,代表隐藏0,如果相反,则交换两系数。•提取的时候接收者对包含水印的图像文件进行二维DCT变换,比较每一块中约定位置的DCT系数值,根据其相对大小,得到隐藏信息的比特串,从而恢复出秘密信息。但是在使用上述算法的过程中,注意到如果有一对系数大小相差非常少,往往难以保证携带图像在保存和传输的过程中以及提取秘密信息的过程中不发生变化。因此在实际的设计过程中,一般都是引入一个Alpha变量对系数的差值进行控制,将两个系数的差别放大,可以保证提取秘密信息的正确性。【实验步骤】•1.嵌入水印信息•2.提取秘密信息【思考题】•1.本节算法提取方需知道隐藏方嵌入数据的比特数,如何设计一种新的算法来克服这个问题。3.6完全脆弱图像水印•【实验目的】•【实验环境】•【原理简介】•【实验步骤】•【思考题】【实验目的】•了解什么是脆弱性水印和半脆弱性水印,掌握实现半脆弱水印和脆弱水印的原理,设计并实现一种完全脆弱水印的实现方法。【实验环境】•(1)Window