数字图像课设数字水印.docx
《数字图像课设数字水印.docx》由会员分享,可在线阅读,更多相关《数字图像课设数字水印.docx(16页珍藏版)》请在冰豆网上搜索。
![数字图像课设数字水印.docx](https://file1.bdocx.com/fileroot1/2023-1/24/ddbf9ec7-b753-4ccc-9ddd-ec722779e33c/ddbf9ec7-b753-4ccc-9ddd-ec722779e33c1.gif)
数字图像课设数字水印
数字图像处理
课程设计报告
课设题目:
数字水印
学院:
信息科学与工程学院
专业:
电子与信息工程
班级:
姓名:
学号:
指导教师:
2013年
12月
27日
不要删除行尾的分节符,此行不会被打印
一.课程设计任务
设计内容及要求:
为保护数字图像作品的知识产权,采用数字水印技术嵌入水印图像于作品中,同时尽可能不影响作品的可用性,在作品发生争执时,通过提取水印信息确认作品。
通常情况下,水印图像大小要远小于载体图像,嵌入水印后的图像可能遇到噪声、有损压缩、滤波等方面的攻击。
因此,评价水印算法的原则就是水印的隐藏性和抗攻击性。
根据这一要求,设计水印算法。
(1)、查阅文献、了解数字水印的基本概念。
(2)、深入理解一种简单的数字水印嵌入与提取方法。
(3)、能够显示水印嵌入前后的载体图像。
(4)、能够显示嵌入与提取的水印。
(5)、选择一种以上攻击方法,测试水印算法的鲁棒性等性能。
二.课程设计原理及设计方案
2.1数字水印技术
数字水印技术是一种将特制的不可见的标记,利用数字内嵌的方法隐藏在数字图像、声音、文档、图书、视频等数字产品中,用以证明原始作者对其作品的所有权,并作为鉴定、起诉非法侵权的证据,同时通过对水印的探测和分析,验证数字信息的完整可靠性,从而成为知识产权保护和数字多媒体防伪的有效手段。
数字水印是永久镶嵌在其它数据(宿主数据)中具有可鉴别性的数字信号或模式,而且不影响宿主数据的可用性。
数字水印技术是利用人类视觉系统(HVS)的冗余,通过一定的算法在数字信息中加入不可见标记,但不影响数据的合理使用和价值,并且不能被人的知觉系统觉察到,起到证明作品的归属的作用。
除非对数字水印具有足够的先验知识,任何破坏和消除水印的企图都将严重破坏图像质量。
不同的应用对数字水印的要求不尽相同,一般认为数字水印应具有如下特点:
安全性:
数字水印中的信息应是安全的,难以被篡改或伪造,同时有较低的误检测率。
只有被授权者能够检测、恢复和修改水印。
能充分可靠地证明所有者对特定产品的所有权。
隐形性:
数字水印应是不可知觉的,即数字水印的存在不应明显干扰被保护的数据,不影响被保护数据的正常使用。
密匙唯一性:
不同的水印密匙不应产生相同的水印,即对于一种水印只有唯一的检测方法才能对其进行检测和抽取。
稳健性(鲁棒性):
指水印算法有较强的抗攻击能力,即水印信息经过一些常见的改变后仍具有较好的可检测性。
这些改变包括常见的图像处理、几何变换和几何失真等。
自恢复性:
即水印信息经过一些操作或变换后,可能会使原图产生较大的破坏,如果仅从留下的片段数据便能恢复出水印信息,而且恢复过程无须原始图像。
具有上述特点的水印才是严格意义上的数字水印,但由于对数字水印的定义尚未统一,许多文献中讨论的数字水印并不具备上述特点,或者仅具有部分上述特点。
水印的生成:
水印信号分为无意义水印信号和有意义水印信号两种。
无意义水印信号的产生通常基于伪随机数发生器或混沌系统,产生的水印信号往往需要进一步的变换以适应水印嵌入算法的需要。
有意义水印信号包括二值图像、灰度图像和彩色图像等。
有意义的图像可以直接作为水印嵌入到载体数据中,但是为了增强水印的安全性,一般需要先对水印进行加密预处理,处理的方法包括使用m序列进行扩频、对水印信号进行位分解、利用图像的置乱对水印进行预处理等。
数字水印生成过程的一般流程如下:
图1:
水印生成
水印提取:
水印的提取与检测是一个在有噪信道中弱信号的检测问题,最终目的在于判断水印信号是否存在或把水印提取出来。
在对提取的水印和原始的水印进行判断和检测的过程中,可以通过输出一个0-1决策来判断水印有无。
设C为相关检测函数,W为原始水印,W*为提取水印,K为密钥,d为决策阈值,则有:
水印提取与检测过程的一般流程图如下
图2:
水印提取
2.2数字水印常用算法
早期人们对数字水印的研究基本上都是基于空域的。
空域水印算法是通过改变载体图像某些像素点的强度值/灰度值来嵌入水印信息,这些算法相对简单,实用性较强。
由于空域算法比较形象直观,容易理解,且具有对遭受攻击的时间和空间位置的定位能力,因此空域算法主要是脆弱水印或半脆弱水印算法,鲁棒性水印相对较少。
空域水印算法中比较典型的算法是最低有效位(LSB)。
最低有效位算法LSB(Least Significant Bit),其基本思想是用水印信息直接代替数字图像的最低位,水印信息通常是二值比特序列。
Tirkel等人最先提出了基于LSB的数字水印算法。
这种算法的优点是嵌入过程与提取过程都很简单且具有较好的不可见性和较大的信息隐藏量。
但缺点也比较明显,由于最低有效位相对不重要,因此在其中嵌入的水印信息对噪声的抵抗能力差,而且易遭受攻击。
与空域水印算法相比,随后发展起来的变换域水印算法更受青睐。
变换域水印算法是通过改变变换域系数来嵌入水印信息。
变换域水印算法相比空间域水印算法具有很多优点:
在变换域中嵌入的水印信号能量可以分布到空间域的所有像素上,有利于保证水印的不可见性;可以更方便地将人类视觉系统(HVS)的某些特性结合到水印算法中;可与国际数据压缩标准(如JPEG2000和MPEG等)兼容,从而实现压缩域内的水印编码;鲁棒性比空域算法好,尤其对滤波、量化和压缩等攻击。
实际上,变换域水印算法就是首先利用相应的变换方法(DFT、DCT、DWT等)将数字图像的空间域数据转化为相应的频域系数;其次,根据待隐藏的信息类型,对其进行适当编码或变形;再次,确定某种规则或算法,用待隐藏的信息的相应数据去修改前面选定的频域系数序列;最后,将数字图像的频域系数经相应的反变换转化为空间域数据。
该类算法的隐藏和提取信息操作复杂,但抗攻击能力强,很适合于数字作品保护的数字水印技术中。
1996年Cox等人提出第一个变换域水印算法之后,其良好的性能备受关注,很多研究者开始研究不同变换域下的水印算法,包括离散傅里叶变换(DFT)、离散余弦变换(DCT)和离散小波变换(DWT)域等的数字水印算法。
其实变换域水印算法并不局限于这三种变换,只要某种信号变换形式能够很好地隐藏数字水印信息,就可以运用到数字水印系统中。
离散傅里叶变换(DFT)是利用图像的DFT的相位信息嵌入水印的方法,是线性系统分析的有力工具;而DWT法是利用小波变换将图像进行多分辨率分解,选择适当的小波系数嵌入水印。
离散余弦变换(DCT),任何连续的实对称函数的傅立叶变换中只含有余弦项,因此余弦变换与傅立叶变换一样有明确的物理意义,DCT变换避免了傅立叶变换中的复数运算,它是基于实数的正交变换。
通过DCT变换,对空间域的信号进行取样,然后把它们变换成一个等同的频率域表示形式。
M*N二维DCT定义如下
其中x ,y 是采样域的空间坐标值,u ,v 是变换域的坐标
DCT反变换(IDCT)定义如下
DCT是目前最常用的有损数字图像压缩系统。
JPEG的核心与空域图像水印相比, DCT域图像水印鲁棒性更强且与常用的图像压缩标准JPEG兼容,因而得到广泛的重视。
一个简化的基于DCT的水印系统,在正向DCT后嵌入水印信息,再进行反向DCT变换,得到含有水印的图像。
水印的提取也是在正向DCT之后进行。
DCT变换类型算法的关键问题在于它忽略了算法实现时造成的数据损失。
在不对DCT系数进行任何扰动的时候,对其做DCT变换,再做反DCT变换,它的值将落在各点数值的附近,误差很小,做少许的处理即可还原成原始数据。
2.3水印的嵌入算法
设CI是M*N大小的原始图像,SI是水印图像大小为P*Q,M和N分别是P和Q的偶数倍。
把水印SI加载到图像CI中,算法分以下几步进行:
(1)分块将CI分解为(M/8)*(N/8)个8*8大小的方块BCIm,n;同时,将SI也分解为(M/8)*(N/8)个方块BSIm,n,1<=m<=M/8,1<=n<=N/8。
(2)DCT变换对每一个BCIm,n,进行DCT变换:
DBCI’m,n=DCT(BCIm,n)。
(3)加载水印,对每一个DBCI’m,n和BSIm,n,si为从DBCI’m,n的中频选出的加载的位置,对这两个系数按上述原则,根据水印信息进行比较,如果系数的绝对值相对大小不匹配水印信息,则强行对系数进行交换;
if i=0;
make |P|>|Q|; else
make |P|<|Q|;
(4)逆DCT变换对以上得到的每一个DBCI’m,n,进行逆DCT变换:
IDBCIm,n=IDCT(DBCI’m,n)。
并将各方块IDBCIm,n合并为一个整图CI,即为加载了水印的新图像。
2.4水印的提取算法
水印提取的过程与嵌入相反,具体步骤为:
1)将待提取的图像进行分块并进行DCT变换;
2)将记录位置的中频系数比较其相对大小,判定出隐藏的水印信息,形成一维序列;
3)将提取的水印信息的一维序列重组成二维序列并形成恢复后的水印图像。
2.5中频系数的选择
由于DCT域的低频分量集中了图像中的大部分能量,通常系数值较大;而高频系数值容易受到攻击的影响,从而很难在不可感知性和鲁棒性之间作出折中。
因此不选择置换DCT域的低频和高频系数,选择对中频系数进行置换来隐藏水印。
下图FL,FM,FH分别为DCT系数的低、中、高频区域
图3:
DCT中高低频区域
DCT后中频系数个数为22个,如图下图所示。
若全部嵌入,则由于该算法在同一图像块中嵌入过多水印,这将使图像明显失真。
另外该算法按之字形扫描后的十几个系数接近高频系数,易受攻击影响,降低水印的鲁棒性。
为了克服上述缺陷,只在中频系数中选择典型的一组,即(1,3)和(1,3)为一组进行置换。
图4:
DCT中频区
2.6彩色图像的水印添加及HSI模型
为了对彩色图像进行水印嵌入而不影响视觉效果,而将图片由rgb模型转化为HIS模型,通过对I分量进行分离,DCT,水印添加,反DCT,组合的方式,合成彩色的添加水印后的图像。
HSI〔Hue-Saturation-Intensity(Lightness),HSI或HSL〕颜色模型用H、S、I三参数描述颜色特性,其中H定义颜色的波长,称为色调;S表示颜色的深浅程度,称为饱和度;I表示强度或亮度
当人观察一个彩色物体时,用色调、饱和度、亮度来描述物体的颜色。
色调是描述纯色的属性(纯黄色、橘黄或者红色);饱和度给出一种纯色被白光稀释的程度的度量;亮度是一个主观的描述,实际上,它是不可以测量的,体现了无色的强度概念,并且是描述彩色感觉的关键参数。
而强度(灰度)是单色图像最有用的描述子,这个量是可以测量且很容易解释。
则将提出的这个模型称作为HSI(色调、饱和度、强度)彩色模型,该模型可在彩色图像中从携带的彩色信息(色调和饱和度)里消去强度分量的影响,使得HSI模型成为开发基于彩色描述的图像处理方法的良好工具,而这种彩色描述对人来说是自然而直观的。
HSI模型是美国色彩学家孟塞尔(H.A.Munseu)于1915年提出的,它反映了人的视觉系统感知彩色的方式,以色调、饱和度和强度三种基本特征量来感知颜色。
色调H(Hue):
与光波的波长有关,它表示人的感官对不同颜色的感受,如红色、绿色、蓝色等,它也可表示一定X围的颜色,如暖色、冷色等。
饱和度S(Saturation):
表示颜色的纯度,纯光谱色是完全饱和的,加入白光会稀释饱和度。
饱和度越大,颜色看起来就会越鲜艳,反之亦然。
强度I(Intensity):
对应成像亮度和图像灰度,是颜色的明亮程度。
HSI模型的建立基于两个重要的事实:
①I分量与图像的彩色信息无关;②H和S分量与人感受颜色的方式是紧密相联的。
这些特点使得HSI模型非常适合彩色特性检测与分析。
若将RGB单位立方体沿主对角线进行投影,可得到六边形,这样,原来沿主对角线的灰色都投影到中心白色点,而红色点(1,0,0)则位于右边的角上,绿色点(0,1,0)位于左上角,蓝色点(0,0,1)则位于左下角。
下图是HSI颜色模型的双六棱锥表示,I是强度轴,色调H的角度X围为[0,2π],其中,纯红色的角度为0,纯绿色的角度为2π/3,纯蓝色的角度为4π/3。
饱和度S是颜色空间任一点距I轴的距离。
当然,若用圆表示RGB模型的投影,则HSI色度空间为双圆锥3D表示。
因而在处理彩色图像时,可仅对I分量进行处理,结果不改变原图像中的彩色种类。
通过对I分量添加水印,达到了隐藏不可见的效果。
图5:
RGB与HIS模型
三.课程设计的步骤和结果
3.1整体UI及模块设计
软件UI界面设计如下:
图6:
软件UI
整体分为四大模块:
图像显示部分、文件输入部分、攻击部分、水印提取保存部分,一下对各模块功能进行简单说明。
图像显示部分:
用三个坐标系,其中两个用于固定显示水印载体图像和水印图像,方便对比。
另一较大坐标系用于显示添加水印后及攻击后和提取出的水印图片,为主显示窗口。
文件读入部分:
通过uigetfile函数,实现读取任意路径下的图像文件,分别保存于handles结构体中用于后面调用。
同时对于水印的添加算法也在此模块中实现。
对于水印添加,采用了两种方法,一种为依赖于密钥,及无水印图像的添加和提取,另一种为盲水印,即通过置换DCT的中频系数进行水印隐藏,提取水印时无需密钥,但相对鲁棒性较差,受攻击后提取效果不如需密钥型清晰。
攻击部分:
进行了简单的中值滤波和jpg压缩两种攻击方式,对攻击后的图片会自动生成保存,同时显示在主显示窗中。
保存部分:
通过点击保存按钮可实现对水印添加后文件及受攻击后文件的保存。
同时水印提取也在此模块中,根据添加水印的方式不同,提取方式同样分为两种,若为需密钥型水印,则必须打开无水印的载体图像才能将水印提取。
3.2水印嵌入及实现
3.2.1.密钥型水印嵌入
密钥型水印的嵌入方法,首先通过模型转化,将RGB转化为HIS,然后提取I分量,对I分量进行嵌入,这样可以做到肉眼不可见。
对I分量进行8*8的矩阵划分,对每个矩阵的全部元素,根据水印图像的黑白进行加或减,然后对处理后的矩阵做逆变换,拼合成为完整的I矩阵,然后再对HIS进行拼合转化为RGB图像保存输出。
以下为水印图像
图7:
密钥型水印嵌入
以下为部分实现代码:
form=1:
N
forn=1:
N
x=(m-1)*K+1;
y=(n-1)*K+1;
block_dct=I(x:
x+K-1,y:
y+K-1);
block_dct1=dct2(block_dct);
ifJ(m,n)==0
a=-1;
else
a=1;
end
block_dct2=block_dct1*(1+a*0.018);
block_idct=idct2(block_dct2);
D(x:
x+K-1,y:
y+K-1)=block_idct;
end
end
3.2.2无密钥水印嵌入
无密钥行水印嵌入是通过对DCT系数进行变换。
对于DCT后的I分量,选取中频分量的典型值之一,这里选用了(1,3)和(3,1)进行交换。
通过判断(1,3)和(3,1)的大小,若水印息为0,则总让二者中大的存于(3,1),小的存于(1,3),若水印信息为1,则正好相反。
这样通过交换中频系数完成了水印的隐藏,并且利于提取。
以下为不需密钥型水印的嵌入:
图8:
无密钥水印嵌入
通过观察发现,对于全部进行嵌入和中频系数交换两种方法,均可做到肉眼不可见。
以下为部分实现代码:
form=1:
N
forn=1:
N
x=(m-1)*K+1;
y=(n-1)*K+1;
block_dct=I(x:
x+K-1,y:
y+K-1);
block_dct1=dct2(block_dct);
A=abs(block_dct1(3,1));
ifJ(m,n)==0
ifabs(block_dct1(1,3))>A
t=block_dct1(1,3);
block_dct1(1,3)=block_dct1(3,1);
block_dct1(3,1)=t;
end
else
ifabs(block_dct1(1,3))<=A
t=block_dct1(1,3);
block_dct1(1,3)=block_dct1(3,1);
block_dct1(3,1)=t;
end
end
block_idct=idct2(block_dct1);
D(x:
x+K-1,y:
y+K-1)=block_idct;
end
end
3.3水印提取及实现
3.3.1密钥水印提取
密钥水印的提取不需要进行DCT反变换后取回。
因为I值与RGB和有关,故不需要进行变换,直接与原图进行比较即可。
为增强鲁棒性,在比较中不采取直接比较,而且对划分好的矩阵灰度值进行统计,若大值大于小值,则认为此块矩阵大于原矩阵,则为水印图像在此处为加性运算,设为1,若小值大于大值,则认为此矩阵小于原矩阵,运算为减,设为0,由此即可区分。
由图可以看出未受攻击的水印通过密钥提取基本没有任何失真,成功的被提取出来。
以下为部分实现代码:
forp=1:
N
forq=1:
N
x=(p-1)*K+1;
y=(q-1)*K+1;
big=0;
small=0;
forj=0:
7
fork=0:
7
block1=IM(x+j,y+k);
block2=L(x+j,y+k);
ifblock1>block2
big=big+1;
else
small=small+1;
end
end
end
ifbig<=small
W(p,q)=1;
else
W(p,q)=0;
end
end
end
3.3.2无密钥水印提取
由无密钥水印的嵌入方法可知,只需要对含水印图片进行分块后进行DCT变换,对指定的中频系数进行比较即可。
若(3,1)大于(1,3)则认为是1值,若(3,1)小于(1,3)则认为是0值,由此可直接输出水印。
可以看出由于只进行单一的值比较,提取出的水印还是造成了一定的失真,相比含有密钥的水印清晰度及鲁棒性有待提高。
部分实现代码如下:
forp=1:
N
forq=1:
N
x=(p-1)*K+1;
y=(q-1)*K+1;
BLOCK=I(x:
x+K-1,y:
y+K-1);
BLOCK=dct2(BLOCK);
A=abs(BLOCK(3,1));
ifabs(BLOCK(1,3))>A
W(p,q)=1;
else
W(p,q)=0;
end
end
end
3.4水印攻击算法
Jpeg压缩攻击直接对图片进行压缩存储,即可实现。
中值滤波则使用medfilt2函数对RGB三值分别滤波,然后拼合成彩色图像的方式进行。
以下为密钥水印添加后攻击后提取效果:
由图片分析可以得出结论,相对中值滤波,jpg压缩的攻击方法对与图片的攻击更为强大,但是通过与密钥的对比,都能完成水印的提取,并且可辨识度比较高。
由图像对比可知,无密钥水印的鲁棒性相对较差,遭受攻击后提取的可辨识度不高,但辨识程度不受攻击种类影响,基本一致,而且无密钥水印方便提取,不一定必须有原图片,因此与密钥水印可以说是各有优劣。
四.课程设计总结
通过对数据的分析可以看出,鲁棒性与嵌入算法和提取算法有很大的关系,好的提取算法和嵌入算法可以大大提高水印的鲁棒性。
对于中频系数的交换嵌入方法,不同的中频系数交换也能发现鲁棒性有所改变,将选取的(1,3)(3,1)换为(2,4)(4,2)后,再此进行攻击和提取,结果如下:
图15:
不受攻击水印提取
图16:
Jpg攻击后水印提取
可以看出在更改的嵌入的中频系数后,鲁棒性大大降低,在收到攻击后基本不能识别水印,因此对于使用DCT中频系数的盲水印隐藏方法,系数的选择就显得尤为重要,靠近低频则容易被肉眼发现,靠近高频则容易被攻击。
对于使用密钥提取的嵌入方法,嵌入的系数也显得尤为重要,说明增加系数可以提高此种水印隐藏方法的鲁棒性,但此时的嵌入图像水印却已经可以被肉眼识别
图18:
大系数水印嵌入提取
这说明对于系数的选择同样重要,太大或太小都不能取得好的效果,只有兼顾了鲁棒性和隐蔽性才能完成良好的水印嵌入。
五.设计体会
本次课设中仔细学习了数字水印的嵌入方法及提取方法,同时也了解了图像的DCT变换,这些都是以前课本上没有学习过的知识。
通过资料查阅和学习,初步掌握了matlab中DCT的分块变换,通过对图像矩阵的观察及计算,自己设计了水印提取的方法,提高了水印隐藏的鲁棒性,这是此次课设中最大的收获。
通过本次课设的学习,也使得自己对于数字图像处理有了新的理解。
对于数字图像处理,不仅仅是一门单纯的学科,同时也对于日常的生活有很大的帮助,数字水印的嵌入及提取,不单单是一种算法,更是一种处理问题的思想。
不但掌握了方法,还学习了一种解决问题的思路,这也是课设带给自己的一种提高。
由于对理论不足,在课设过程中对于图像处理还是遇到了很大的麻烦,但是通过网络的查找和学习,不断了客服了各种小的问题了,加深了自己对数字图像处理这一学科的理解,深化了曾经学过的知识,同时也学习到了新的知识和算法,同样带给了我很大的收获。
最后感谢老师的殷切指导以及同学们的帮助。
六.参考文献
1李永全基于MATLAB的DCT域数字水印技术实现信息技术2005,4:
66-71
2付炜,邢广忠置换DCT域中频系数的盲水印嵌入算法研究计算机应用研究2007,24(3):
160-162
3康健鹏 吴晓波MATLAB在数字水印中的应用电脑开发与应用2004,17(9):
26-27
4王银花基于MATLAB数字水印技术实现XX学院学报2009,3(9):
36-38
5X卫东,寻洋洋,X助文DCT水印算法及MATLAB仿真实现中国科技论文在线
6冯战申,贺勤,臧振戎基于图像与处理的DCT数字水印算法及MATLAB实现XX学院学报2009,28
(2):
90-94
7徐宏伟彩色图像数字水印的研究与实现XX工业大学硕士学位论文
8X利田彩色数字图像水印算法研究XX航空航天大学硕士学位论文
9佚名基于DCT域自适应中频嵌入的数字水印算法
10冯新岗,周诠基于DCT中频系数的信息隐藏技术
11王金伟,戴跃伟,王执铨一种置换DCT域中频系数的盲水印算法XX理工大学学报2005,10(29):
9-13
12蔚立磊,王俊飞,李新锋基于小波变换的数字水印及Matlab仿真实现
信息技术2009,6:
77-80
13王潇利用MATLAB对彩色图像进行低通滤波中国集成电路2006,4:
40-41
课程设计成绩评定表
设计上机验收成绩表
XX
学号
课题名称
数字水印
序号
验收项目
分值
得分
1
设计内容合理、目的明确