图像数字水印+matlab程序 联系客服

发布时间 : 星期四 文章图像数字水印+matlab程序更新完毕开始阅读9414497ed1f34693dbef3eca

3.3.3. MATLAB函数介绍

在介绍函数之前,我们必须明确一点:作水印程序时,处理的图像数据是二维信号,① 数据输入输出函数

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)

I=uigetfile('*.bmp','打开水印灰度图像文件'); imshow(I);

title('灰度水印图像'); subplot(2,2,3) H=imread(I); J=dct2(H);

imshow(log(abs(J)),[]),colorbar;

title('水印图像经DCT变换后能量分布情况') 运行结果:

②水印全过程:

0%水印加入程序

Q=input('请输入放缩因子的值(建议小于1):Q=') subplot(2,3,1)

RGB=imread('浙江台州学院','jpg'); imshow(RGB);

title('原始图像'); subplot(2,3,2) N=dct2(RGB(:,:,3));

imshow(log(abs(N)),[]),colorbar; title('Y分量能量分布'); subplot(2,3,4)

I=imread('lena1','bmp'); imshow(I);

title('灰度水印图像'); subplot(2,3,5) M=dct2(I);

imshow(log(abs(M)),[]),colorbar; title('水印能量分布'); subplot(2,3,6) J=M(1:128,1:128); J(128:364,128:400)=0; J=rot90(J); J=rot90(J);

J(365:600,401:750)=0; J=rot90(J); J=rot90(J); N=N+Q*J; K=idct2(N); RGB(:,:,3)=K; imshow(RGB);

title('加入水印后图像'); %水印提取程序 subplot(2,3,3)

RGB1=imread('浙江台州学院','jpg'); N=dct2(RGB(:,:,3)); M=dct2(RGB1(:,:,3)); M=(N-M)/Q;

B=idct2(M(236:365,350:401)); Y=mat2gray(B); imshow(Y);

title('提取的水印图像') 运行结果:

③水印全过程(经剪切检测水印)

%水印加入程序

Q=input('请输入放缩因子的值(建议小于1):Q=') subplot(3,3,1)

RGB=imread('MM','jpg'); imshow(RGB); title('原始图像'); subplot(3,3,2) imshow(RGB(:,:,3)); title('B分量'); subplot(3,3,3) N=dct2(RGB(:,:,3));

imshow(log(abs(N)),[]),colorbar; title('B分量能量分布'); subplot(3,3,4)

I=imread('lena1','bmp'); imshow(I);

title('灰度水印图像'); subplot(3,3,5) M=dct2(I);

imshow(log(abs(M)),[]),colorbar; title('水印能量分布'); subplot(3,3,7)