DCT域数字水印算法的FPGA实现
扫描二维码
随时随地手机看文章
1 引言
随着计算机网络和数字通信技术的迅速发展,数字技术使数字多媒体(数字视频、数字音频、数字图像等)的传输与复制变得非常容易,但却增加了多媒体信息被非法盗版的机会。数字作品的版权保护成为一个急需解决的难题,已引起学术界与企业界的广泛关注。
数字水印技术是一种最近发展起来的新技术,用于数字产品认证和保护。大多数水印算法采用软件实现。软件实现具有易于应用、升级和适应性较好等特点,但存在速度受限、难以满足实时处理的问题。而采用硬件实现则可以克服这些问题。
现场可编程门阵列FPGA(Field Programmable Gate Ar-ray)是一种设计灵活、开发速度快的现场可编程逻辑器件。与DSP相比,FPGA具有以下主要优点:速度快,内置高速乘法器和加法器;高档 FPGA中含有巨量高速存储器,速度更快,电路更简单;FPGA硬件可编程,使得硬件更简单和小型化。文献[l]利用FPGA实现小波变换,文献[2- 3]利用FPGA实现一种高速DCT处理器件。在此基础上,利用FPGA设计基于DCT域的数字水印算法,DCT变换是该数字水印方案的关键单元之一。采用硬件描述语言VHDL(Very HighSpeed Integrated Circuit Hardware Description Language)有效设计和仿真DCT变换。
2 图像水印算法
这里设计的图像水印算法是依据文献[4]算法提出的。该算法是在充分考虑人眼视觉特性的基础上,应用一种新的图像分类算法,结合Amold置乱变换,提出的一种基于图像分类的自适应水印算法。图1为图像水印算法框图。
具体算法步骤如下:
(1)设水印信号为w,对其进行n次Arnold置乱变换,记为wi,n作为密钥由水印嵌入者保管,然后将wi进行行堆叠或列堆叠变成一维水印序列wt,这里采用行堆叠。
(2)将原始图像I分成m个互不重叠的8×8的子块fk(x,y),对每个子块进行DCT变换得Fk(u,v)。
(3)将图像块分成3类,即平滑区、边缘区、纹理区。依据分类结果为每一类指定一个强度因子αi(i=1,2,3),为使水印具有更好的鲁棒性和透明性,这里借鉴文献[5]的思想,利用部分DCT低频系数嵌入水印,将水印信号依次叠加到Fk(u,v)的4个低频系数中,即:
式中,4k≤t<4(k+1),k=0,1……m-1;αi为强度因子。平滑区、边缘区、纹理区的α取值均不相同。
(4)对所得结果进行DCT逆变换,再将所有子块合并为整幅图像,得到含水印的图像。
3 数字水印方案的设计
根据上述图像水印算法,设计FPGA实现的总体结构。按照自顶向下(Top-to- Down)的设计方法,将总体设计划分为一维DCT单元、外部存储单元和控制单元(由一个有限状态机FSM(finite system machine)控制)。图像数据从外部(如PC机)按行进入一维DCT单元,数据处理后存入存储单元:然后再对该中间数据按列进行一维DCT变换。得到二维处理结果并存入存储单元。控制单元按上述步骤进行图像处理,并产生地址数据、enable信号等。图2为其总体结构图。
3.1 2D-DCT结构
对于一个大小为N×N的像素块,假设x(i、j)为输入的像素点阵数据,其二维DCT变换公式为:
式中,C为带余弦基本函数的变换系数矩阵,CT为C的转置。
从式(3)和式(4)可看出,2D-DCT变换是可分离的,它可分裂为串联的2次一维变换。所以可连续进行2次一维DCT变换实现一幅图像的2D- DCT。2D-DCT的结构框图如图3所示。首先将图像数据按行输入一维DCT单元进行行变换,变换后的数据存储到转置缓冲器,以进行行列转换,转换后的数据再按列输入一维DCT单元进行列变换。变换完成后的数据输出到PC机添加水印。
3.2 控制单元
控制单元控制存储单元和运算单元,其主要功能:产生存储器的控制信号,控制双端口RAM的运行;产生存储器的读写地址和控制运算流程等。
4 实验结果
在整个电路设计过程中,首先进行计算机Matlab仿真,验证算法的正确性,然后以Xilinx公司的ISE9.1i可编程逻辑器件开发系统作为开发工具,采用可综合的VHDL语言描述DCT变换设计。使用Xilinx Spartan3 XC3S200完成整个电路设计,Spartan3系列器件嵌有18 bit×18 bit补码乘法器和大量RAM块,非常适合DCT变换。在Xilinx公司集成设计环境ISE9.1i下,选用XC3S200-4FT256器件实现综合和仿真,综合后最高时钟频率达98.592 MHz。并对布局布线后的设计用Mentor Graphics公司的Modelsim SE6.1f进行仿真。表1给出2D-DCT变换时FPGA器件的使用情况。
器件的功能引脚示意图,如图4所示。其中,xin(7:0)为待转换的8位数据输入端,CLK为时钟信号输入端,RST为复位端,dct_2d(11: 0)为12位的DCT转换结果,rdy_out是转换结果就绪指示。DCT变换的逻辑功能如图5所示的时序仿真波形。
5 结论
设计和实现一种基于DCT域的数字水印算法。DCT变换算法的实现是该设计中数字水印方案的关键算法之一。重点采用FPGA对水印算法DCT变换进行设计和仿真实验。实验结果表明该方案利用FPGA实现水印算法比用软件实现法速度更快,性能更稳定。