图像数字水印+matlab程序文档格式.docx
- 文档编号:18022495
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:19
- 大小:1.21MB
图像数字水印+matlab程序文档格式.docx
《图像数字水印+matlab程序文档格式.docx》由会员分享,可在线阅读,更多相关《图像数字水印+matlab程序文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
在基于DCT的变换编码中,图像是先经分块(8×
8或16×
16)后再经DCT,这种变换是局部的,只反映了图像某一部分的信息。
当然也可以对整幅图像的特点,但是运算速度比分块DCT要慢。
图像经DCT后,得到的DCT图像有三个特点:
一是系数值全部集中到0值附近(从直方图统计的意义上),动态范围很小,这说明用较小的量化比特数即可表示DCT系数;
二是DCT变换后图像能量集中在图像的低频部分,即DCT图像中不为零的系数大部分集中在一起(左上角),因此编码效率很高。
三是没有保留原图像块的精细结构,从中反映不了原图像块的边缘、轮廓等信息,这一特点是由DCT缺乏时局域性造成的。
如下左图3—1是原始图像经过DCT变换后的系数图像为图3—2。
两条线划分出图像的低频、中频和高频分别所在的矩形区域。
可以看出,图像DCT变换后大部分参数接近于零,只有左上角的低频部分有较大的数值,中频部分参数值相对较小,而大部分高频参数值非常小,接近于零。
图3—1:
原图像图3—2:
变换后的系数图像
3.2.3离散余弦变换的数字水印算法
根据离散余弦变换后的参数性质,本文采用了以ZigZag方式重排变换域系数的方法,选出中频分量,用数字水印序列对其进行非线性调制。
水印检测时,待检测图像仍按比方式选择变换域系数,与待水印进行相关运算,与阈值比较来判断是否所含水印。
离散余弦域的数字水印算法的具体实现分为三步:
宿主图像的变换,数字水印的嵌入,数字水印的检测。
3.2.3.1宿主图像的DCT变换
对于N×
N大小的256灰度级的宿主图像I进行N×
N二维离散余弦变换(DCT)。
以ZigZag方式对于DCT变换后的图像频率系数重新排列成一维向量Y={y1,y2,…yN×
N}.
并取出序列中第L+1到L+M的中频系数部分,得到YL={YL+1,YL+2,…,YL+M}
3.2.3.2数字水印的嵌入
假设数字水印W为一服从标准正态分布的随机实数序列,用数字序列表示为W={W1,W2,…WM}。
用W对Y序列中第L+1到L+M的中频系数部分的值进行修改,按以下公式进行:
经过修改的系数序列Y′={Y1′,Y2′,...Y′N×
N}以ZigZag逆变换形式重组,再进行N×
NDCT逆变换,得到嵌有数字水印的图像I′。
3.2.3.3数字水印的检测
待检测的可能含有水印的图像I"
。
假设I"
未损失大量信息,可以近似认为I"
=I′。
在此假设下可以运用统计的方法来检测水印。
(1)待检水印域待检图像中频系数相关性的测定
同样对I′进行DCT变换,以ZigZag方式将DCT系数排成一维向量Y"
={Y1"
Y2"
...YN×
N"
}。
由于假设I"
=I′,则Y"
=Y′。
取出Y"
(等于Y′)中第L+1到L+M的中频系数部分YL"
={YL+1"
YL+2"
’,...YL+M"
假设待检测的数字水印X={X1,X2,...XM}为一符合标准正态分布的实数伪随机序列。
则可以通过待检水印与图像中频系数作相关运算来判断是否所加入了水印。
只有在待检水印为所加入的水印时,才能得到较大的相关值。
否则相关值很小,接近于零。
用符号E表示数学期望,得到:
(2)阈值的确定
根据中心极限定理,参照水印匹配与不匹配两种情况得到阈值为
。
由于原始图像难以得到,因此从实用性出发,阈值定义为:
综上所述,满足
时,则表明检测到匹配水印。
否则,未检测到匹配的水印。
3.3MATLAB工具简介
3.3.1.简介
Matlab是当前在国内外十分流行的工程设计和系统仿真软件包。
它是MathWorks公司于1982年推出的一套高性能的数值计算和可视化软件,它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一人方便的、界面友好的用户环境。
Matlab的推出得到了各个领域专家、学者的广泛关注,其强大的扩展功能为各个领域的应用提供了基础。
由各个专家学者相继推出了MATLAB工具箱,其中的信号处理(signalprocessing)、控制系统(controlsystem)、神经网络(neuralnetwork)、图像处理(imageprocessing)、鲁棒控制(robustcontrol)、非线性系统控制设计(nonlinearsystemcontroldesign)、系统辨识(systemidentification)、最优化(optimization)、模糊逻辑(fuzzylogic)、小波(wavelet)、通信(communication)、统计(statistics)等工具箱,这些工具箱给各个领域的研究和工程应用提供了有力的工具,借助于这些“巨人肩上的工具”,各个层次的研究人员可直观、方便地进行分析、计算及设计工作,从而大大地节省了时间。
3.3.2.MATLAB研究数字水印的优点
1集成了DCT、DWT等函数有丰富的小波函数和处理函数,这不仅方便了研究人员,而且使源程序简洁明了、易实现。
2强大的数学运算功能。
能够方便、高效地实现音频、视频中的大量矩阵运算。
3提供了图像处理工具箱、小波分析工具箱、数字信号处理工具箱。
用来编制跨数字图像处理技术、数字信号处理等多学科的数字水印技术是非常好的选择。
4MATLAB与目前最强大的编程工具——VisualC++具有良好的接口。
3.3.3.MATLAB函数介绍
在介绍函数之前,我们必须明确一点:
作水印程序时,处理的图像数据是二维信号,而声音信号是一维信号。
这里,我们仅仅简单介绍与水印有关的函数。
1数据输入输出函数
imread()和imwrite():
可以读写bmp,jpg/jpeg,tif/tiff,png,hdf,pcx,wxd格式文件。
读索引文件时,还可以得到相应的调色板数据。
auread()、auwrite()、wavread()和wavwrite():
可以方便地读写au和wav文件,并可控制其中的位及频率。
图像显示
imshow():
显示一幅图像;
imfinfo():
可以得到读入图像的信息。
如文件的大小、格式、格式版本号、图像的高度、宽度、颜色类型(真彩色,灰度图还是索引图)等。
变换频函数
对信号采用不同的变换,是实现频域法水印的至关重要的一步,MATLAB中对一维信号和二维信号分别提供了各种变换和逆变换函数。
◆离散余弦变换(DCT)
dct(),dct2():
分别实现一维信号和二维信号的DCT(离散余弦变换);
idct(),idct2():
分别实现一维信号和二维信号的IDCT(逆向离散余弦变换);
◆离散小波变换(DWT)
dwt(),dwt2():
分别实现一维信号和二维信号的DWT(离散小波变换)
idwt(),idwt2():
分别实现一维信号和二维信号的IDWT(离散小波变换);
Wavedec2():
多级二维小波分解函数;
Waveinfo():
提供小波包中所有的小波信息;
攻击函数
对算法进行攻击测试是对水印鲁棒性检测的一种重要手段,一个好的水印算法必须经过各种攻击测试才能对之做出客观的评价。
MATLAB中的许多函数可以直接用来做攻击测试。
旋转:
rotate()可以对图像进行任意角度的旋转;
剪裁:
imcrop()可以按精确定位的各点坐标进行剪裁;
滤波:
filter()和filter2()可实现对一维信号和二维信号的滤波;
抖动:
dither()对图像进行抖动;
抖动攻击考验水印鲁棒性的一个很好的攻击;
jpeg压缩:
imwrite()中jpg和quality参数能对图像进行可控jpg压缩;
加各种噪声:
imnoise()可以对图像加入各种噪声,如白噪声、椒盐噪声等,加入噪声是对水印鲁棒性考验的一种常见的攻击;
放大/缩小:
imresize()可以以指定的插值方法来对图像进行放大和缩小。
第四章:
图像数字水印技术的实现
4.1基于离散余弦变法(DCT)实现数字水印技术
打开原始及水印图像:
subplot(2,2,1)
I=uigetfile('
*.bmp'
'
打开原始彩色图像文件'
);
RGB=imread(I);
image(RGB);
title('
原始彩色图像'
subplot(2,2,2)
打开水印灰度图像文件'
imshow(I);
灰度水印图像'
subplot(2,2,3)
H=imread(I);
J=dct2(H);
imshow(log(abs(J)),[]),colorbar;
水印图像经DCT变换后能量分布情况'
)
运行结果:
水印全过程:
0%水印加入程序
Q=input('
请输入放缩因子的值(建议小于1):
Q='
subplot(2,3,1)
RGB=imread('
浙江台州学院'
jpg'
imshow(RGB);
原始图像'
subplot(2,3,2)
N=dct2(RGB(:
:
3));
imshow(log(abs(N)),[]),colorbar;
Y分量能量分布'
subplot(2,3,4)
I=imread('
lena1'
bmp'
subplot(2,3,5)
M=dct2(I);
imshow(log(abs(M)),[]),colorbar;
水印能量分布'
subplot(2,3,6)
J=M(1:
128,1:
128);
J(128:
364,128:
400)=0;
J=rot90(J);
J(365:
600,401:
750)=0;
N=N+Q*J;
K=idct2(N);
RGB(:
3)=K;
加入水印后图像'
%水印提取程序
subplot(2,3,3)
RGB1=imread('
M=dct2(RGB1(:
M=(N-M)/Q;
B=idct2(M(236:
365,350:
401));
Y=mat2gray(B);
imshow(Y);
提取的水印图像'
水印全过程(经剪切检测水印)
%水印加入程序
subplot(3,3,1)
MM'
subplot(3,3,2)
imshow(RGB(:
B分量'
subplot(3,3,3)
B分量能量分布'
subplot(3,3,4)
subplot(3,3,5)
subplot(3,3,7)
464,128:
364)=0;
J(465:
800,365:
600)=0;
subplot(3,3,8)
I=imcrop(RGB,[11598798]);
subplot(3,3,9)
subplot(3,3,6)
J=RGB1(:
3);
X=J(1:
799,1:
599);
N=dct2(I(:
M=dct2(X);
B=idct2(M(337:
464,237:
364));
经放缩后提取的水印图像'
水印全过程(经空域压缩检测水印)
程序源代码
P=input('
请输入您所希望的图像放缩系数值(建议取值不要小于0.5):
P='
I=imresize(RGB,P,'
nearest'
压缩P倍图像'
J=imresize(I,1/P,'
imshow(J);
再放大P倍还原图像'
N=dct2(J(:
):
4.2图像水印的dwt算法
%以下是水印提取算法
clearall;
clc;
%保存时间
start_time=cputime;
figure
(1);
%读出原始图像
subplot(1,2,1);
input=imread('
2.jpg'
imshow(input);
%读出水印图像
subplot(1,2,2);
watermarked_image=imread('
watermarked.bmp'
imshow(watermarked_image,[]);
水印图像'
%三色分离
input=double(input);
watermarked_image=double(watermarked_image);
inputr=input(:
1);
watermarked_imager=watermarked_image(:
inputg=input(:
2);
watermarked_imageg=watermarked_image(:
inputb=input(:
watermarked_imageb=watermarked_image(:
%水印图像R的分解
[Cwr,Swr]=WAVEDEC2(watermarked_imager,2,'
haar'
%图像R的分解
[Cr,Sr]=WAVEDEC2(inputr,2,'
%水印图像G的分解
[Cwg,Swg]=WAVEDEC2(watermarked_imageg,2,'
[Cg,Sg]=WAVEDEC2(inputg,2,'
%水印图像B的分解
[Cwb,Swb]=WAVEDEC2(watermarked_imageb,2,'
%图像B的分解
[Cb,Sb]=WAVEDEC2(inputb,2,'
%提取水印小波系数
%提取水印R的小波系数
r=0.06;
fork=0:
3
whr(k+1,:
)=Cwr(1+size(Cwr,2)/4+k*size(Cwr,2)/16:
...
size(Cwr,2)/4+(k+1)*size(Cwr,2)/16)-...
Cr(1+size(Cr,2)/4+k*size(Cr,2)/16:
size(Cr,2)/4+(k+1)*size(Cr,2)/16);
wvr(k+1,:
)=Cwr(1+size(Cwr,2)/2+k*size(Cwr,2)/16:
size(Cwr,2)/2+(k+1)*size(Cwr,2)/16)-...
Cr(1+size(Cr,2)/2+k*size(Cr,2)/16:
size(Cr,2)/2+(k+1)*size(Cr,2)/16);
wdr(k+1,:
)=Cwr(1+3*size(Cwr,2)/4+k*size(Cwr,2)/16:
3*size(Cwr,2)/4+(k+1)*size(Cwr,2)/16)-...
Cr(1+3*size(Cr,2)/4+k*size(Cr,2)/16:
3*size(Cr,2)/4+(k+1)*size(Cr,2)/16);
end
whr=(whr(1,:
)+whr(2,:
)+whr(3,:
)+whr(4,:
))/(4*r);
wvr=(wvr(1,:
)+wvr(2,:
)+wvr(3,:
)+wvr(4,:
wdr=(wdr(1,:
)+wdr(2,:
)+wdr(3,:
)+wdr(4,:
war=(Cwr(1:
size(Cwr,2)/16)-Cr(1:
size(Cr,2)/16))/r;
%提取水印G的小波系数
g=0.03;
whg(k+1,:
)=Cwg(1+size(Cwg,2)/4+k*size(Cwg,2)/16:
size(Cwg,2)/4+(k+1)*size(Cwg,2)/16)-...
Cg(1+size(Cg,2)/4+k*size(Cg,2)/16:
size(Cg,2)/4+(k+1)*size(Cg,2)/16);
wvg(k+1,:
)=Cwg(1+size(Cwg,2)/2+k*size(Cwg,2)/16:
size(Cwg,2)/2+(k+1)*size(Cwg,2)/16)-...
Cg(1+size(Cg,2)/2+k*size(Cg,2)/16:
size(Cg,2)/2+(k+1)*size(Cg,2)/16);
wdg(k+1,:
)=Cwg(1+3*size(Cwg,2)/4+k*size(Cwg,2)/16:
3*size(Cwg,2)/4+(k+1)*size(Cwg,2)/16)-...
Cg(1+3*size(Cg,2)/4+k*size(Cg,2)/16:
3*size(Cg,2)/4+(k+1)*size(Cg,2)/16);
e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 数字 水印 matlab 程序