基于小波变换的数字水印技术研究-毕业论文_第1页
基于小波变换的数字水印技术研究-毕业论文_第2页
基于小波变换的数字水印技术研究-毕业论文_第3页
基于小波变换的数字水印技术研究-毕业论文_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于小波变换的数字水印技术研究 摘要:算法基于Haar小波变换,把小波系数分块,并计算每个块的平 均值。在一系列信号处理之后,这些块(尤其是大的块)的平均值不会 有很大改变,否则,重构的图像就与原始图像有很大差别。通过对这 些块的平均值进行量化来嵌入水印;提取时也依赖于相应块的平均 值,所以不需要原始图像参与。算法对有损压缩、小波压缩、噪声、 中值滤波和剪裁等操作有较好的鲁棒性。 关键词:信息隐藏;数字水印;小波变换 引言 随着计算机和网络的飞速发展, 人们的许多创作和成果都以数字 形式进行存储和发布。 然而, 数字作品极易被非法拷贝、 伪造和窜改, 使得很多版权所有者不愿意利用网络公开其作品, 从而阻碍其自身发 展。目前,数字作品的版权保护不仅仅是立法问题,也是一个很重要 的技术难题。从技术上看,数字媒体版权信息的嵌入和检测问题,是 数字作品版权保护的两个关键问题, 它综合了传统密码学的认证和鉴 别问题的特点,又加入了稳健性要求。版权保护信息必须与被保护的 数据密切结合,版权保护信息的鉴别过程必须具有了抗干扰能力。在 这种情况下,数字水印技术应运而生。 1.数字水印技术概述 提到水印, 人们都会想到钞票中的水印。 钞票水印具有两条特性, 首先, 水印在通常情况下不可见, 只有在特殊的观察条件下才可见 (钞 票中水印在光下可见) 。其次,水印信息必须与载体对象相关(在这 里表示纸币的真实性) 。 1.1 数字水印技术的特性 可证明性:能够为受到版权保护的数字产品提供完全可靠的证据。 不可见性:即被嵌入水印信息的数字产品不会出现明显的质量下降, 隐藏的数据不易被察觉;另外,不能用统计的方法恢复出水印。 鲁棒性: 添加的数字水印必须对施加于宿主图象的攻击具有一定的免 疫能力,不能因为对宿主图象的某种操作而导致水印信息丢失。 1.2 数字水印技术的应用 水印技术的应用极为广泛, 主要有以下 7 种应用领域: 广播监控、 所有者识别、所有权验证、交易跟踪、内容真伪鉴别、拷贝控制以及 设备控制。 2.小波变换理论 自 1986 年以来,小波分析的理论、方法与应用的研究一直方兴 未艾。作为一种数学工具,小波变换是对人们熟知的傅立叶变换和窗 口傅立叶变换的一个重大突破,为信号分析、图像处理及其它非线性 科学研究领域带来了革命性的影响。 人类视觉系统(HVS)的文理特性和照亮掩蔽特性表明,纹理越 复杂,背景的亮度越亮,人类视觉对其轻微变化就越不敏感。大量的 研究表明,人眼在处理图像信号时,将图像滤波成若干的子带信号, 他们占据不同的频率范围, 即图像在 HVS 中被认为是由不同频率范围 的信息组成。其特征为:人眼对反映局部结构的边缘和轮廓不敏感; 对低频信号,表现出较高的灵敏度。HVS 在同一品大范围对不同方向 纹理细节信号等表现出不同的灵敏度, 这一特点与小波变换的多分辨 率分析具有一定的相似性。小波变换是傅立叶变换的发展,是空间和 频率的局部变换,它在频域和时域同时具有良好的局部化特征。小波 变换在图像处理中的基本思想是把图像进行多分辨率分解成不同的 空间和独立的频率带的子图像,然后对子图像的系数进行处理。根据 S. Mallat 的塔式分解算法,图像经过小波变换后分解成四个子图: 水平方向 LH、垂直方向 HL 和对角线方向 HH 的中高频细节子图和低 频逼近子图 LL。 低频部分还可以继续分解, 产生三个高频带系列 LHn、 HLn、HHn(n=1,2,3)和一个低频带 LL3(见图 1) 。图 1 中的 LL3 表示小波变换分解级数决定的最大尺度、 最小分辨率下对原始图像的 最佳逼近,它的同级特征和原理图相似,图像大部分能量集中于此。 高频带系列代表图像的边缘和纹理。 3.DWT 变换域数字水印技术 3.1 数字水印嵌入技术 图像的水印技术根据水印嵌入的方式可以分为两类:时/空域技 术(水印被直接嵌入在图像的亮度值中)和变换域技术(将图像做某 种数学变换,然后水印被嵌入于变换系数中) 。早期人们对水印的研 究基本上是基于时空域的,算法相对简单,实时性较强,但在鲁棒性 上不如变换域算法。目前变换域方法正日益普遍,有DCT、DWT、DFT 变幻域算法。变换域算法的优点是:1、水印信息分布到空间域的所 有像素上,有利于提高水印的不可见性。2、能方便的与HVS(人类视 觉系统)的某些特性结合。3、很好的鲁棒性,对图像压缩、常用的图 像滤波以及噪声均有一定的抵抗力。 离散余弦变换是从图像空间到频 率空间的全局变换,由于离散余弦变换的全局本质,在变换空间中任 何一个数据的误差都会影响到图像中的每一个像素。 利用小波变换把 原始图像分解成多频段的图像, 能适应人眼的视觉特性且使得水印的 嵌入和检测可分多个层次进行, 小波变换域数字水印方法见具有时空 域方法和DCT变换域方法的优点。 在一系列信号处理后,如果观察者的主观感觉图像的变化不大, 那么图像处理前后低、中频的小波系数的改变幅度同样有限,另外系 数幅值改变的方向(变大或变小)在多数情况下也不同,因此,低、中 频系数的平均改变幅度十分有限。本算法选取部分低、中频系数并分 成一定大小的系数块,通过量化系数块的平均值来嵌入水印序列。 3.1.1选择系数 设X(m,n)是一幅大小为M*N灰度级为2“的灰度图像(1mM , 1nN),其中M,N,a为正整数。对X(m,n)进行l层(l为正整数) 小波分解,得到3l个细节图像和一个低频近似图像,用Xk,l(mi, nj)k=h,v ,d;l=1,2,l;mi=1,2,M2 l ;nj=1,2, N2 l 表示选择的小波系数,其中l表示分解的层次,k=h,v,d分别 表示第l层水平、垂直和对角方向的子图像。考虑到量化低频子图可 能产生较大失真,因此不在其中嵌入水印,而选择除低频外的中频系 数 3。 3.1.2分块并计算每块的平均值 根据嵌入的信息量和对算法鲁棒性的要求,块越大,水印的鲁棒 性越好,但嵌入的水印比特少。把XK,l (mi,nj)分成一定大小的块, 用Block (s,t)表示XK,l (mi,nj)中大小为st的系数块,其中s=1, 2,mi,t=1,2,nj,b为正整数,代表该块的编号。其平均 值为Ave =Block(s,t)/(s*t) :其中 Block 为块内系数幅值 的累计和。 3.1.3 量化 水印序列w的嵌入是通过对Ave 的量化完成的,例如:量化成奇 数代表嵌入“1” ,量化成偶数相当于嵌入“0” 。根据对鲁棒性和隐藏 性的折中考虑,设量化间隔l,l=1,2,l表示分解层数,对于 低频的第l层,由于系数幅值极大,可以作较大间隔的量化,对第 l-1,1层次作间隔逐渐减小的量化,量化按下图进行: 根据wi=0,1将Ave 量化到与之最近的奇、偶点。用Dat(i,j)表 示Block 中的一个小波系数,量化后的该系数用Dat (i,j)表示, 其中i=1,2,s;j=1,2,t。设T=Avel,Turdat=rem(T, 2)其中表示四舍五入取整,rem 表示求T 除以2的余数。 若Turdat与wi相同,则量化的小波系数为 Dat(i,j)=Dat(i,j)+Tl-Ave 若Turdat与wi不同,小波系数按下列量化 Dat(i,j)=Dat(i,j)+(T+1)lAve,TT Dat(i,j)=Dat(i,j)+(T-1)lAve,TbfOffBits ; / Get the DIB width and height if (pbmi-bmiHeader.biSize = sizeof (BITMAPCOREHEADER) cxDib =(BITMAPCOREHEADER*) pbmi)-bcWidth ; cyDib =(BITMAPCOREHEADER*) pbmi)-bcHeight ; else cxDib = pbmi-bmiHeader.biWidth ; cyDib= abs(pbmi-bmiHeader.biHeight) ; wide=cxDib; height=cyDib; picopen=1; sPic=new BYTEwide*height; for(x=0;xbmiHeader.biSize = sizeof (BITMAPCOREHEADER) nWide =(BITMAPCOREHEADER*) pbmi1)-bcWidth ; nHeight= (BITMAPCOREHEADER *) pbmi1)-bcHeight ; else nWide = pbmi1-bmiHeader.biWidth ; nHeight= abs(pbmi1-bmiHeader.biHeight) ; /nWide=cxDib; /nHeight=cyDib; shadeopen=1; if(picopen=1 InvalidateRect (hwnd, NULL, TRUE) ; return 0 ; case IDD_GETSHADE: getopen=1; if(picopen=1) pBits2=new BYTEwide*height/64; getshade(pBits,pBits2,wide,height,wide/8,height/8,n); InvalidateRect (hwnd, NULL, TRUE) ; return 0 ; case ID_32779:/noise donoise=1; noise(pBits,wide,height); InvalidateRect (hwnd, NULL, TRUE) ; return 0; case ID_32780:/滤波 dozz=1; DITONG(pBits,wide,height,3); InvalidateRect (hwnd, NULL, TRUE) ; return 0; case ID_32778: if(picopen=1 MessageBox (hwnd, TEXT (完成 ), szAppName, 0) ; InvalidateRect (hwnd, NULL, TRUE) ; return 0; caseIDM_FILE_SAVE: / Show the File Save dialog box if(!DibFileSaveDlg(hwnd, szFileName, szTitleName) return 0 ; / Save the DIB to memory SetCursor(LoadCursor(NULL, IDC_WAIT) ; ShowCursor (TRUE) ; bSuccess=DibSaveImage (szFileName, pbmfh) ; ShowCursor (FALSE) ; SetCursor(LoadCursor(NULL, IDC_ARROW) ; if (!bSuccess) MessageBox (hwnd,TEXT (Cannot save DIB file), szAppName, 0) ; return 0 ; break ; caseWM_PAINT: hdc = BeginPaint (hwnd, if (pbmfh) SetDIBitsToDevice (hdc, 5,/ xDst 5,/ yDst wide,/ cxSrc height,/ cySrc 0,/ xSrc 0,/ ySrc 0,/first scan line height,/ number of scan lines pBits,/ address of array with DIB bits pbmi,/addressof structure with bitmap info. DIB_RGB_COLORS) ; if(shadeopen=1) SetDIBitsToDevice (hdc, wide+15,/ xDst 5,/ yDst nWide,/ cxSrc nHeight,/ cySrc 0,/ xSrc 0,/ ySrc 0,/first scan line nHeight,/ number of scan lines pBits1,/addressof array with DIB bits pbmi1,/addressof structure with bitmap info. DIB_RGB_COLORS) ; if(getopen=1) SetDIBitsToDevice (hdc, wide+15,/ xDst height/8+25, / yDst wide/8,/ cxSrc height/8,/ cySrc 0,/ xSrc 0,/ ySrc 0,/first scan line height/8,/ number of scan lines pBits2,/addressof array with DIB bits pbmi1,/addressof structure with bitmap info. DIB_RGB_COLORS) ; EndPaint (hwnd, return 0 ; caseWM_DESTROY: if (pbmfh) free (pbmfh) ; if(picopen) delete sPic; PostQuitMessage (0) ; return 0 ; returnDefWindowProc(hwnd,message,wParam, lParam) ; void cWvltTrans(BYTE *tmp,long nWide,long nHeight,int n) int i,j,k; long wide,height; BYTE *tmp2,*tmp1; tmp1=new BYTEnWide*nHeight; for(i=0;inHeight;i+) for(j=0;jk; height=nHeightk; tmp2=new BYTEheight*wide; /行变换 for(i=0;iwide;i+) for(j=0;jheight;j+) tmp2i*wide+j=tmp1i*nWide+j; for(i=0;iwide;i+) for(j=0;jheight/2;j+) tmp1i*nWide+j=tmp2i*wide+2*j; tmp1i*nWide+height/2+j=tmp2i*wide+2*j+1-tmp2i*wi de+2*j+128; /列变换 for(i=0;iwide;i+) for(j=0;jheight;j+) tmp2i*wide+j=tmp1i*nWide+j; for(i=0;iwide/2;i+) for(j=0;jheight;j+) tmp1i*nWide+j=tmp22*i*wide+j; tmp1(i+wide/2)*nWide+j=tmp2(2*i+1)*wide+j-tmp22* i*wide+j+128; delete tmp2; for(i=0;inWide;i+) for(j=0;jnHeight;j+) tmpi*nWide+j=tmp1(nWide-1-i)*nWide+j; delete tmp1; void iWvltTrans(BYTE *tmp,long nWide,long nHeight,int n) int i,j; long wide,height; BYTE *tmp2,*tmp1; tmp1=new BYTEnHeight*nWide; for(i=0;ik; height=nHeightk; tmp2=new BYTEheight*wide; /列变换 for(i=0;iwide;i+) for(j=0;jheight;j+) tmp2i*wide+j=tmp1i*nWide+j; for(i=0;iwide/2;i+) for(j=0;jheight;j+) tmp12*i*nWide+j=tmp2i*wide+j; tmp1(2*i+1)*nWide+j=tmp2(i+wide/2)*wide+j+tmp2i* wide+j-128; /行变换 for(i=0;iwide;i+) for(j=0;jheight;j+) tmp2i*wide+j=tmp1i*nWide+j; for(i=0;iwide;i+) for(j=0;jheight/2;j+) tmp1i*nWide+2*j=tmp2i*wide+j; tmp1i*nWide+2*j+1=tmp2i*wide+height/2+j+tmp2i*wi de+j-128; delete tmp2; for(i=0;inWide;i+) for(j=0;jnHeight;j+) tmpi*nWide+j=tmp1(nWide-1-i)*nWide+j; delete tmp1; void shade(BYTE *pic,BYTE *sPic,long wide,long height,long nWide,long nHeight,int n) int i,j,x,y; long w,h; BYTE *tmp; w=wide/8; h=height/8; for(i=0;iheight;i+) for(j=0;j250)pici*wide+j=250; if(pici*wide+j5)pici*wide+j=5; tmp=new BYTE64; for(i=0;ih;i+) for(j=0;jw;j+) for(x=0;x8;x+) for(y=0;y8;y+) tmpx*8+y=pic(x+i*8)*wide+j*8+y; cWvltTrans(tmp,8,8,n); for(x=0;x8;x+) for(y=0;y3)tmpx*8+y=128; tmp36=sPici*nWide+j/16+128; tmp37=tmp36; tmp38=tmp36; tmp39=tmp36; tmp44=tmp36; tmp45=tmp36; tmp46=tmp36; tmp47=tmp36; tmp52=tmp36; tmp53=tmp36; tmp54=tmp36; tmp55=tmp36; tmp60=tmp36; tmp61=tmp36; tmp62=tmp36; tmp63=tmp36; /else tmp37=128; iWvltTrans(tmp,8,8,n); for(x=0;x8;x+) for(y=0;y8;y+) pic(x+i*8)*wide+j*8+y=(BYTE)tmpx*8+y; delete tmp; voidgetshade(BYTE*pic,BYTE*sPic,longwide,long height,long nWide,long nHeight,int n) int i,j,x,y; long w,h; BYTE *tmp; BYTE t16; w=wide/8; h=height/8; tmp=new BYTE64; for(i=0;ih;i+) for(j=0;jw;j+) for(x=0;x8;x+) for(y=0;y8;y+) tmpx*8+y=pic(x+i*8)*wide+j*8+y; cWvltTrans(tmp,8,8,n); t0=(tmp36-128); t1=(tmp37-128); t2=(tmp38-128); t3=(tmp39-128); t4=tmp44-128; t5=tmp45-128; t6=tmp46-128; t7=tmp47-128; t8=tmp52-128; t9=tmp53-128; t10=tmp54-128; t11=tmp55-128; t12=tmp60-128; t13=tmp61-128; t14=tmp62-128; t15=tmp63-128; sPici*w+j=0; for(x=0;x16;x+) sPici*w+j+=tx;/+t1+t2+t3; if(donoise=1|dozz=1) sPici*w+j=getvalue(t,16); pici*wide+j=sPici*w+j; delete tmp; void noise(BYTE *pic,long wide,long height) int innoise; long i,j; for(i=0;iheight;i+) for(j=0;j31500) pici*wide+j=0; void DITONG(BYTE *pic,long wide,long height,int n) int i,j; long w,h; float *tmp; w=wide/8; h=height/8; tmp=new floatwide*height; for(i=0;iheight;i+) for(j=0;jwide;j+) tmpi*wide+j=pici*wide+j; DCT2(tmp,wide); for(i=0;iheight;i+) for(j=0;j(height/8) IDCT2(tmp,wide); for(i=0;iheight;i+) for(j=0;jwide;j+) pici*wide+j=(BYTE)fix(tmpi*wide+j); delete tmp; BYTE getvalue(BYTE *t,int n) int i,j; BYTE k; for(i=0;in;i+) for(j=i+1;jn;j+) if(ti1;n+) i=i/2;for(i=0;inUm/2;i+) angle=-(i*PI*2)/nUm; Wni.re=cos(angle); Wni.im=sin(angle); for(j=0;jnUm;j+) aj=tj; for(j=0;jnUm;j+) p=0; for(i=0;in;i+) if(j tj=ap; delete a; unsigned long uLength = 1; /段的长度 unsigned long uHalf = 0; /段长度的一半 unsigned long uCount = 0; /段的数量 Complex cw; /WH(x) Complex c1; /G(x) + WH(x) Complex c2; /G(x) - WH(x) for(unsigned long b = 0; b n; b+) uLength=11; uCount=nUm(b+1); for(unsigned long j=0;juCount;j+) for(unsigned long k=0;kuHalf; k+) cw= complexMul(tk+j*uLength+uHalf,Wn(k*uCount)%(nUm/2) ); c1 =complexAdd(tk+j*uLength,cw); c2 =complexSub(tk+j*uLength,cw); tk+j*uLength = c1; tk+j*uLength+uHalf = c2; delete Wn; void DCT(float *t,unsigned nUm) int i; Complex *p; Complex wn; float temp1,temp2,ph; ph=-(PI/(2*nUm); temp1=sqrt(1/(float)nUm); temp2=sqrt(2/(float)nUm); p=new Complex2*nUm; for(i=0;i2*nUm;i+) pi.im=0; if(inUm)pi.re=ti; elsepi.re=0; FFT(p,2*nU

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论