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

一、背景意义

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

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

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

二、预备知识点

2.1离散余弦变换(DCT)

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

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

一维DCT正交变换的公式为:

v2-6995e5894af9fd1de8c3b1bef15431f1_b.jpg

二维DCT逆变换公式:

v2-24f859d90e5cb2ee1e802ba424365891_b.jpg


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函数介绍

  1. 数据输入输出函数

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

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

② 图像显示

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

③ 变换频函数

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

④攻击函数

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

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

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

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

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

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

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

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


基于DCT的图像数字水印算法_第1张图片

基于DCT的图像数字水印算法_第2张图片
  1. ( b )

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

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



基于DCT的图像数字水印算法_第3张图片


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

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



四、源代码

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

mark2=randn(1024,1);

end

%计算相关值

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

stem(i,c);

hold on;

end

你可能感兴趣的:(算法,python,机器学习,人工智能,计算机视觉)