微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 用于图像认证的半脆弱水印算法研究

用于图像认证的半脆弱水印算法研究

时间:02-11 来源:互联网 点击:


3.2.1模块划分
本算法共分为四个部分,水印预处理,水印嵌入,水印检测,攻击检测。

图3.1 算法模块划分图
3.2.2算法框架图
认证水印系统的一般框架如图3.2,系统主体包括三部分,水印的产生,嵌入和检测认证。


认证水印系统首先将提取的宿主图像信息(特征或图像内容)或自定义信息(图像标志或序列号)转变为水印信号,通过嵌入算法将其嵌入原始图像中,得到的含水印的图像经过信道在信宿端被接收.通过检测认证算法进行认证,得到检测结果。检测认证时,要求仅仅借助待测图像,或者再加上水印信息,即可得认证结果。在实际应用中,在嵌入和检测的过程中,还需加入密钥。


图3.2 认证水印系统的一般框架图
图3.3给出一典型认证水印实现的例子。可以看出,图3.3(a)(b)无明显视觉差异。图3.3(d)能较好的定位篡改部位。

(a)原始图像 (b)嵌入水印后的图像 (c)篡改图像 (d)检测结果
图 3.3 认证水印的实现例子
而本论文的设计思想就是要实现对于图像的认证。由于其特有的性质,我的算法也有一定的特性。首先产生的水印信息是高斯伪随机码,这是因为我考虑到,在具体的一副图像中,不同的主体植入的水印信息是不同的,而我现在植入随机序列作为信息,就具有一定的普遍性了。还有,我做的是不可见水印,也就无所谓植入的信息是否有直观意义了。之后是对水印信息进行海明编码,其作用是为了防止在传输过程中的客观出错。对信息进行置乱则是加密的需要了。做完了这些准备工作后即可以植入水印信息了。我的算法采用分块DCT植入的方法,即把图像分成8*8的小块,每个都植入水印信息。最后就是对图像进行攻击测试了。我一共选用了10种常见的攻击,一一做实验,验证我算法的性能。
下面就给出这个算法的框架图。

图3.4 本程序的框图
第四章 图像认证半脆弱水印算法的详细设计与实现
在实际应用中,一个实用的数字媒体认证系统应大致满足一些基本要求。如对篡改操作与否应具备极强的判断能力;应对数字媒体内容被篡改的程度进行有效描述;在无法得知原始数字媒体内容或其它与真实信号内容相关的信息条件下,判断可能发生的篡改操作的具体类别,例如信号处理中的滤波、压缩、还是替换操作等。


4.1 算法思路
由于本算法是要实现对图像的认证功能,故在算法上有一定的特点。由于具体水印信息的不确定性,本论文加入的水印信息是个随机的噪声码,这样在水印信息上就具有一定的普遍性了。算法首先是在扩频域对水印信息进行预处理,采用的方法有海明编码,直序扩展,以达到一定的加密和抗传输错误要求。嵌入算法是在DCT域分块植入水印信息。检测算法和嵌入算法是个相逆的过程。最后把提取的水印和原水印进行相关系数比较,从而判断是否受到篡改攻击。


4.2 各步骤详细设计
模块化程序设计就是把一个复杂的程序分成若干小部分,分部来进行设计,以达到简化设计的目的。水印算法现在大都采用这种方法。论文的算法把程序分成如下三个部分:水印预处理、水印嵌入和水印检测。


4.2.1水印预处理的实现
要想得到安全的水印,在嵌入目标水印前必须要对其进行一个预处理的过程。也就是加密的过程。本算法是用海明编码和伪随机码进行置乱以隐藏加入的水印信息。如果传输的数据位是m位,加了r位冗余位,那么总共传输的数据单元是m+r位。 为了能够发现这m+r位数据单元在传输到目的端后是否出错,并能够指明是在哪一位出错,那么r至少应该能够代表m+r+1种状态。r比特能够代表2r不同状态。 因此,2r>=m+r+1 。若m=7,则满足上式的最小r值为:4。下面以一个例子来说明海明码的纠错原理。
海明码的接收端的公式:
S3= P3⊕ D4⊕D3 ⊕D2
S2= P2⊕D4 ⊕D3 ⊕D1 (4.1)
S1= P1⊕D4 ⊕D2 ⊕D1
假定海明码1010101在传送中由于偶然错误变成了1000101 ,
S3= P3⊕ D4⊕D3 ⊕D2=0⊕1⊕0 ⊕0 =1
S2= P2⊕D4 ⊕D3 ⊕D1=0⊕1⊕ 0 ⊕1=0
S1= P1⊕D4 ⊕D2 ⊕D1=1⊕1⊕ 0 ⊕1=1
因此,由S3S2S1= 101,指出第5位错,应由0变1。这样就可以纠错了。
本文的算法要求先实现海明编码,根据本论文加入的水印信息是34*4的伪随机码,所以实现海明编码后得到的是36*7的编码。
for i=1:36
s=8*x0(i,1)+4*x0(i,2)+2*x0(i,3)+x0(i,4);
switch s
case 0
x0(i,5)=0;x0(i,6)=0;x0(i,7)=0;
case 1
x0(i,5)=0;x0(i,6)=1;x0(i,7)=1;
case 2
x0(i,5)=1;x0(i,6)=1;x0(i,7)=0;
case 3
x0(i,5)=1;x0(i,6)=0;x0(i,7)=1;
case 4
x0(i,5)=1;x0(i,6)=1;x0(i,7)=1;
case 5
x0(i,5)=1;x0(i,6)=0;x0(i,7)=0;
case 6
x0(i,5)=0;x0(i,6)=0;x0(i,7)=1;
case 7
x0(i,5)=0;x0(i,6)=1;x0(i,7)=0;
case 8
x0(i,5)=1;x0(i,6)=0;x0(i,7)=1;
case 9
x0(i,5)=1;x0(i,6)=1;x0(i,7)=0;
case 10
x0(i,5)=0;x0(i,6)=1;x0(i,7)=1;
case 11
x0(i,5)=0;x0(i,6)=0;x0(i,7)=0;
case 12
x0(i,5)=0;x0(i,6)=1;x0(i,7)=0;
case 13
x0(i,5)=0;x0(i,6)=0;x0(i,7)=1;
case 14
x0(i,5)=1;x0(i,6)=0;x0(i,7)=0;
case 15
x0(i,5)=1;x0(i,6)=1;x0(i,7)=1;
end;
end;
由于本身我们嵌入的水印信息是高斯正态分布序列,本身就具有一定的无序性,再加上之后用伪码进行了置乱,很好的达到了加密的目的。为了抵抗在传输过程中的偶然错误,伪码用了海明码纠错。所以检测的时候我用相关的纠错解码技术就可再现水印信息。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top