基于DCT的图像数字水印算法

基于DCT的图像数字水印算法

【摘要】信息革命使人类的社会与生活产生了深刻的变化。数字产品知识产权保护问题尤为突出,使用加密、数字签名等技术已经不能够有效的解决这一问题。本文结合隐蔽通信和数字水印两个主要的应用背景,对图像压缩编码算法进行研究,选取MATLAB进行实验仿真,研究了图象信息隐藏的理论模型和若干技术。

【关键词】:信息隐藏     数字水印     DCT  

目录

河南农业大学

1引言

2知识点

2.1离散余弦变换(DCT)

2.2 离散小波变换(DWT

2.3 数字水印技术

3水印嵌入及提取过程

3.1  matlab函数介绍

3.2基于DCT数字水印算法的matlab实现源代码实例

4   结论

5  参考文献

附录

1引言

信息隐藏的两个主要技术分支是数字水印和信息伪装。数字水印以版权保护为基本应用点,已得到深入的研究和广泛的应用,并逐渐走向产业化。信息伪装以隐蔽通信为应用背景,通过隐藏秘密消息的存在性来保证通信的安全性。

数字水印技术是用信号处理的方法在声音,图像或视频等数字化多媒体数据中嵌入隐蔽信息的行为。通过隐藏在多媒体内容中的信息,可以达到确认内容创建者,购买者或判断内容是否真实完整的目的。是保护数字媒体信息安全的有效方法。关于数字水印的研究开始于二十世纪九十年代中期,随着网络和多媒体技术的发展,数字水印技术也得到了人们越来越多的关注。

2知识点

2.1离散余弦变换(DCT)      在视频压缩中,最常用的变换方法是DCT,DCT被认为是性能接近K-L变换的准最佳变换,变换编码的主要特点有:
(1)在变换域里视频图像要比空间域里简单。
(2)视频图像的相关性明显下降,信号的能量主要集中在少数几个变换系数上,采用量化和熵编码可有效地压缩其数据。
(3)具有较强的抗干扰能力,传输过程中的误码对图像质量的影响远小于预测编码。通常,对高质量的图像,DMCP要求信道误码率,而变换编码仅要求信道误码率。
  对图像进行压缩,给高频系数大间隔量化,低频部分小间隔量化。DCT是正交变换,它可以将8×8图像空间表达式转换为频率域,只需要用少量的数据点表示图像;DCT产生的系数很容易被量化,因此能获得好的块压缩;DCT算法的性能很好,它有快速算法,如采用快速傅立叶变换可以进行高效的运算,因此它在硬件和软件中都容易实现;而且DCT算法是对称的,所以利用逆DCT算法可以用来解压缩图像。

为什么采用8x8的图像块,其原因是由于计算量和像素之间关系的数量,许多研究表明,在15或20个像素之后,像素间的相关性开始下降。就是说,一列相似的像素通常会持续15到20个像素那么长,在此之后,像素就会改变幅度水平(或反向)。

一维DCT正交变换的公式为

二维DCT逆变换公式

 

2.2 离散小波变换(DWT)

 DWT具有很好的时域—频域特性,在DWT域嵌入数字水印具有明显的优点。原始图像经过一级小波分解后分成4个频率带,分别是低频LL1、水平HL1、垂直LH1 及对角线HH1。以此类推,第二小波分解对低频频率带LL1 进一步分解成以上4 个频率带。本文将原始图像进行三级小波分解,得到HLi,LHi,HHi 和LL3 共10 个频率带,其中i=1…3,LL3 为低频频率带.

2.3 数字水印技术   

 所谓数字水印技术就是将数字、序列号、文字、图像标志等版权信息嵌入到多媒体数据中,以起到保护版权、秘密通信、数据文件的真伪鉴别和产品标志等作用。数字水印技术自1993 年被提出以来,由于其在信息安全和经济上的重要地位,发展较为迅速。目前,数字水印技术已经在数字产品版权保护、票据防伪、数据隐藏、隐藏通信等方面均均得到广泛应用

数字水印的分类方法有很多种,按数字水印的隐藏位置划分,可以将其分为空间域数字水印和变换域数字水印。

3水印嵌入及提取过程

3.1  matlab函数介绍

数据输入输出函数

imread()和imwrite():可以读写bmp,jpg/jpeg, tif/tiff, png, hdf, pcx, wxd格式文件。读索引文件时,还可以得到相应的调色板数据。

auread()、auwrite()、wavread()和wavwrite():可以方便地读写auwav文件,并可控制其中的位及频率。

  图像显示

imshow():显示一幅图像;imfinfo():可以得到读入图像的信息。如文件的大小、格式、格式版本号、图像的高度、宽度、颜色类型(真彩色,灰度图还是索引图)等。

  变换频函数

对信号采用不同的变换,是实现频域法水印的至关重要的一步,MATLAB中对一维信号和二维信号分别提供了各种变换和逆变换函数。

攻击函数

旋转:rotate()可以对图像进行任意角度的旋转;

剪裁:imcrop()可以按精确定位的各点坐标进行剪裁;

滤波:filter()filter2()可实现对一维信号和二维信号的滤波;

抖动:dither()对图像进行抖动;抖动攻击考验水印鲁棒性的一个很好的攻击;

jpeg压缩:imwrite()jpgquality参数能对图像进行可控jpg压缩;

加各种噪声:imnoise()可以对图像加入各种噪声,如白噪声、椒盐噪声等,加入噪声是对水印鲁棒性考验的一种常见的攻击;

放大/缩小:imresize()可以以指定的插值方法来对图像进行放大和缩小。

3.2基于DCT数字水印算法的matlab实现源代码实例  

        

  1.                                                   ( b )    

如上图所示图A 为原始图片,图B为原始水印图片  

打开matlab程序进行DCT压缩,选择正确的操作方法(选用附录中第一个源代码)进行实验,可得到如下图所示的结果。进行比较分析,可得到理想的结果,符合实验目的。

在matlab经DCT运算后生成的结果如上图所示    

( 通过对比观察,在电脑上分析原图像整体比水印后的图片黯淡)

4   结论

总之,信息隐藏技术是多媒体通信和多媒体信号处理领域中近年来新兴的研究方向,他为信息安全提供了一种新的思路,为我们研究信息安全提供了一个新的方向。

虽然信心隐藏技术已经兴起,但是没有发展到可实用的阶段,使用密码加密仍是网络信息传输的安全手段,虽然目前对信息隐藏的研究有了很大的进展,如何建立不可感知性的数学度量模型,信息隐藏的容量上限如何 计算等等,信息隐藏的对立面-隐藏分析如何得到同步发展;如何对信息隐藏进行分析和分类;如何找到信息隐藏技术自己的理论依据,形成完善和科学的理论体系等等。在信息隐藏这门技术上我们仍然任重而道远啊 。

信息隐藏是一项崭新的技术领域,也是多媒体技术、网络技术研究的前沿,应用前景十分广阔,必将吸引广大图像、语音、网络、人工智能等领域的研究者加入到这一行列,从而推动信息安全技术更快的发展。

5  参考文献

[1] 金聪.数字水印理论与技术.北京:清华大学出版社,2008.8

[2] 董长虹等.Matlab 图像处理与应用.北京:国防工业出版社,2004.1

[3] 杨义先.数字水印基础教程.北京:人民邮电出版社,2007.6

[4] 黄达人,刘九芬,黄继武.小波变换域图像水印嵌入对策和算法.软件学报,2002,13(07)

[5]张军,等.数字图像的自适应公开水印技术.计算机学报.2002(12)

[6]郭文强,张宗橙.信息论与编码. 第2版. 北京:清华出版社.2009

[7]王丽娜、张焕国,信息隐藏技术与应用,北京:北京师范大学中文图书基藏库,2003

附录

Matlab程序 DCT压缩代码如下:

M=256;  %原图像长度

N=32;   %水印图像长度

K=8;

I=zeros(M,M);

II=zeros(K,K);

B=zeros(M,M);

Idct=zeros(K,K);

D=zeros(M,M);

%读取原图像

I=imread('C:\Users\Administrator\Desktop\liu.jpg');

subplot(2,2,1);

%显示原图像

imshow(I);

title('原图像');

%读取原图像

G=imread('C:\Users\Administrator\Desktop\niu.bmp');

subplot(2,2,2);

%显示原图像

imshow(G);

title('水印序列');

%嵌入水印

T=1;

for m=1:N

    for n=1:N

        x=(m-1)*K+1;

        y=(n-1)*K+1;

       II=I(x:x+K-1,y:y+K-1);%将原图分成8*8的子块

      Idct=dct2(II);%对子块进行DCT变换

if x==1&y==1

    alfa=0.002;

else

    alfa=0;

end                                    

  B=Idct*(1+alfa*mark(T));%嵌入水印

 Bidct=idct2(B);%进行DCT反变换

I(x:x+K-1,y:y+K-1)=Bidct;

 T=T+1;

end

end

subplot(2,2,3);

imshow(I);%显示嵌入水印后的图像

title('tu');imwrite(I,'嵌入后的图像.bmp');

%进行相关性比较

     figure;

for i=1:50

    if  i==10;

       mark2=mark1';

    else

      mark2=randn(1024,1);

    end

    %计算相关值

   c=(mark2'*mark)/sqrt(mark2'*mark2);

stem(i,c);

    hold on;

end

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值