一个小波变换实例及Matlab实现
- 格式:doc
- 大小:233.50 KB
- 文档页数:6
MATLAB小波变换指令及其功能介绍1 一维小波变换的 Matlab 实现(1) dwt函数功能:一维离散小波变换格式:[cA,cD]=dwt(X,'wname')[cA,cD]=dwt(X,Lo_D,Hi_D)别可以实现一维、二维和 N 维DFT说明:[cA,cD]=dwt(X,'wname') 使用指定的小波基函数 'wname' 对信号X 进行分解,cA、cD 分别为近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D) 使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解。
(2) idwt 函数功能:一维离散小波反变换格式:X=idwt(cA,cD,'wname')X=idwt(cA,cD,Lo_R,Hi_R)X=idwt(cA,cD,'wname',L)函数 fft、fft2 和 fftn 分X=idwt(cA,cD,Lo_R,Hi_R,L)说明:X=idwt(cA,cD,'wname') 由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X 。
'wname' 为所选的小波函数X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重构滤波器 Lo_R 和Hi_R 经小波反变换重构原始信号 X 。
X=idwt(cA,cD,'wname',L) 和 X=idwt(cA,cD,Lo_R,Hi_R,L) 指定返回信号 X 中心附近的 L 个点。
2 二维小波变换的 Matlab 实现二维小波变换的函数别可以实现一维、二维和 N 维 DFT函数名函数功能---------------------------------------------------dwt2 二维离散小波变换wavedec2 二维信号的多层小波分解idwt2 二维离散小波反变换waverec2 二维信号的多层小波重构wrcoef2 由多层小波分解重构某一层的分解信号upcoef2 由多层小波分解重构近似分量或细节分量detcoef2 提取二维信号小波分解的细节分量appcoef2 提取二维信号小波分解的近似分量upwlev2 二维小波分解的单层重构dwtpet2 二维周期小波变换idwtper2 二维周期小波反变换-----------------------------------------------------------(1) wcodemat 函数功能:对数据矩阵进行伪彩色编码函数 fft、fft2 和 fftn 分格式:Y=wcodemat(X,NB,OPT,ABSOL)Y=wcodemat(X,NB,OPT)Y=wcodemat(X,NB)Y=wcodemat(X)说明:Y=wcodemat(X,NB,OPT,ABSOL) 返回数据矩阵 X 的编码矩阵Y ;NB 伪编码的最大值,即编码范围为 0~NB,缺省值 NB=16;OPT 指定了编码的方式(缺省值为 'mat'),即:别可以实现一维、二维和 N 维 DFTOPT='row' ,按行编码OPT='col' ,按列编码OPT='mat' ,按整个矩阵编码函数 fft、fft2 和 fftn 分ABSOL 是函数的控制参数(缺省值为 '1'),即:ABSOL=0 时,返回编码矩阵ABSOL=1 时,返回数据矩阵的绝对值 ABS(X)1. 离散傅立叶变换的 Matlab实现(2) dwt2 函数功能:二维离散小波变换格式:[cA,cH,cV,cD]=dwt2(X,'wname')[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)说明:[cA,cH,cV,cD]=dwt2(X,'wname')使用指定的小波基函数'wname' 对二维信号 X 进行二维离散小波变幻;cA,cH,cV,cD 分别为近似分量、水平细节分量、垂直细节分量和对角细节分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) 使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D 分解信号 X 。
MATLAB 小波变换指令及其功能介绍1 一维小波变换的 Matlab 实现(1 dwt函数功能:一维离散小波变换格式:[cA,cD]=dwt(X,'wname'[cA,cD]=dwt(X,Lo_D,Hi_D别可以实现一维、二维和 N 维 DFT说明:[cA,cD]=dwt(X,'wname' 使用指定的小波基函数 'wname' 对信号X 进行分解,cA 、cD 分别为近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D 使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解。
(2 idwt 函数功能:一维离散小波反变换格式:X=idwt(cA,cD,'wname'X=idwt(cA,cD,Lo_R,Hi_RX=idwt(cA,cD,'wname',L函数 fft、fft2 和 fftn 分 X=idwt(cA,cD,Lo_R,Hi_R,L说明:X=idwt(cA,cD,'wname' 由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X 。
'wname' 为所选的小波函数X=idwt(cA,cD,Lo_R,Hi_R 用指定的重构滤波器 Lo_R 和 Hi_R 经小波反变换重构原始信号 X 。
X=idwt(cA,cD,'wname',L 和 X=idwt(cA,cD,Lo_R,Hi_R,L 指定返回信号 X 中心附近的 L 个点。
2 二维小波变换的 Matlab 实现二维小波变换的函数别可以实现一维、二维和 N 维 DFT函数名函数功能--------------------------------------------------- dwt2 二维离散小波变换wavedec2 二维信号的多层小波分解idwt2 二维离散小波反变换waverec2 二维信号的多层小波重构wrcoef2 由多层小波分解重构某一层的分解信号 upcoef2 由多层小波分解重构近似分量或细节分量 detcoef2 提取二维信号小波分解的细节分量 appcoef2 提取二维信号小波分解的近似分量upwlev2 二维小波分解的单层重构dwtpet2 二维周期小波变换idwtper2 二维周期小波反变换 -----------------------------------------------------------(1 wcodemat 函数功能:对数据矩阵进行伪彩色编码函数 fft、fft2 和 fftn 分格式:Y=wcodemat(X,NB,OPT,ABSOLY=wcodemat(X,NB,OPTY=wcodemat(X,NBY=wcodemat(X说明:Y=wcodemat(X,NB,OPT,ABSOL 返回数据矩阵 X 的编码矩阵 Y ;NB 伪编码的最大值,即编码范围为 0~NB ,缺省值 NB=16; OPT 指定了编码的方式(缺省值为 'mat'),即:别可以实现一维、二维和 N 维 DFTOPT='row' ,按行编码OPT='col' ,按列编码OPT='mat' ,按整个矩阵编码函数 fft、fft2 和 fftn 分 ABSOL 是函数的控制参数(缺省值为 '1'),即: ABSOL=0 时,返回编码矩阵ABSOL=1 时,返回数据矩阵的绝对值 ABS(X1. 离散傅立叶变换的 Matlab实现(2 dwt2 函数功能:二维离散小波变换格式:[cA,cH,cV,cD]=dwt2(X,'wname'[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D说明:[cA,cH,cV,cD]=dwt2(X,'wname'使用指定的小波基函数 'wname' 对二维信号 X 进行二维离散小波变幻;cA ,cH,cV,cD 分别为近似分量、水平细节分量、垂直细节分量和对角细节分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D 使用指定的分解低通和高通滤波器 Lo_D 和Hi_D 分解信号 X 。
matlab中图像小波变换的应用实例如下:1 一维小波变换的Matlab 实现(1) dwt 函数功能:一维离散小波变换格式:[cA,cD]=dwt(X,'wname')[cA,cD]=dwt(X,Lo_D,Hi_D)说明:[cA,cD]=dwt(X,'wname') 使用指定的小波基函数'wname' 对信号X 进行分解,cA、cD分别为近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D) 使用指定的滤波器组Lo_D、Hi_D 对信号进行分解。
(2) idwt 函数功能:一维离散小波反变换格式:X=idwt(cA,cD,'wname')X=idwt(cA,cD,Lo_R,Hi_R)X=idwt(cA,cD,'wname',L)X=idwt(cA,cD,Lo_R,Hi_R,L)说明:X=idwt(cA,cD,'wname') 由近似分量cA 和细节分量cD 经小波反变换重构原始信号X 。
'wname' 为所选的小波函数X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重构滤波器Lo_R 和Hi_R 经小波反变换重构原始信号X 。
X=idwt(cA,cD,'wname',L) 和X=idwt(cA,cD,Lo_R,Hi_R,L) 指定返回信号X 中心附近的L 个点。
2 二维小波变换的Matlab 实现二维小波变换的函数-------------------------------------------------函数名函数功能---------------------------------------------------dwt2 二维离散小波变换wavedec2 二维信号的多层小波分解idwt2 二维离散小波反变换waverec2 二维信号的多层小波重构wrcoef2 由多层小波分解重构某一层的分解信号upcoef2 由多层小波分解重构近似分量或细节分量detcoef2 提取二维信号小波分解的细节分量appcoef2 提取二维信号小波分解的近似分量upwlev2 二维小波分解的单层重构dwtpet2 二维周期小波变换idwtper2 二维周期小波反变换-------------------------------------------------------------(1) wcodemat 函数功能:对数据矩阵进行伪彩色编码格式:Y=wcodemat(X,NB,OPT,ABSOL)Y=wcodemat(X,NB,OPT)Y=wcodemat(X,NB)Y=wcodemat(X)说明:Y=wcodemat(X,NB,OPT,ABSOL) 返回数据矩阵X 的编码矩阵Y ;NB 伪编码的最大值,即编码范围为0~NB,缺省值NB=16;OPT 指定了编码的方式(缺省值为'mat'),即:OPT='row' ,按行编码OPT='col' ,按列编码OPT='mat' ,按整个矩阵编码ABSOL 是函数的控制参数(缺省值为'1'),即:ABSOL=0 时,返回编码矩阵ABSOL=1 时,返回数据矩阵的绝对值ABS(X)(2) dwt2 函数功能:二维离散小波变换格式:[cA,cH,cV,cD]=dwt2(X,'wname')[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)说明:[cA,cH,cV,cD]=dwt2(X,'wname')使用指定的小波基函数'wname' 对二维信号X 进行二维离散小波变幻;cA,cH,cV,cD 分别为近似分量、水平细节分量、垂直细节分量和对角细节分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) 使用指定的分解低通和高通滤波器Lo_D 和Hi_D 分解信号X 。
小波变换是一种在信号和图像处理中广泛应用的工具。
在Matlab 中,你可以使用内置的函数来进行小波变换。
以下是一个基本的示例,显示了如何在Matlab中使用小波变换:
```matlab
首先,我们需要导入图像或者信号
I = imread('lena.bmp'); 导入图像
转换为灰度图像
I = rgb2gray(I);
使用'sym4'小波基进行小波分解
[C, S] = wavedec2(I, 1, 'sym4');
显示小波分解的结果
figure, wave2gray(C, S, -6);
```
在这个例子中,我们首先导入了图像,然后将其转换为灰度图像。
接着,我们使用`wavedec2`函数和`'sym4'`小波基进行小波分解。
最后,我们使用`wave2gray`函数显示小波分解的结果。
这只是使用Matlab进行小波变换的一个基本示例。
实际上,你
可以根据你的需求来选择不同的小波基(例如'haar'、'Daubechies'、'Symlet'、'Coiflet'等)以及进行不同级别的小波分解。
同时,Matlab也提供了其他的小波变换函数,例如`wavelet`和`wfilters`等,可以满足不同的需求。
小波变换原理及在MATLAB中的应用小波变换是一种有效的信号分析方法,可以将时间序列信号按照不同频率分解为时频域上的小波系数。
其原理是利用小波基函数对信号进行多尺度分析,从而揭示信号中的局部特征和潜在信息。
在MATLAB中,小波变换得到了广泛的应用,可以用于信号处理、图像处理、数据压缩等领域。
小波变换原理小波变换的基本原理是将原始信号通过小波基函数的卷积运算,得到不同频率和时域范围的小波系数。
小波基函数是由母小波函数通过平移和尺度变换得到的。
小波基函数具有局部化特性,可以更精准地描述信号的局部特征。
小波变换可以通过连续小波变换(CWT)和离散小波变换(DWT)来实现。
CWT将小波基函数连续地与信号进行卷积,得到连续尺度的小波系数。
而DWT则通过对信号进行多级离散尺度下采样和滤波,从而得到离散的小波系数。
小波系数表示了信号在不同频率和时域范围上的能量分布,可以用于分析信号的频谱特性、辨识信号中的脉冲或噪声等。
小波变换能够同时提供时间和频率信息,比传统的傅里叶变换更符合实际问题的需求。
MATLAB中的小波变换MATLAB提供了丰富的小波变换函数和工具箱,方便用户进行小波分析和处理。
以下是一些常用的小波变换函数及其功能:wavefun函数该函数用于生成不同类型的小波基函数,供小波变换使用。
可以选择不同的小波类型(如“haar”、“db”、“sym”等)和小波尺度,生成对应的小波基函数。
cwt函数该函数实现了连续小波变换(CWT),可以对信号进行连续尺度的小波分解。
可以选择不同尺度和小波基函数进行分析,并可设置阈值进行信号去噪。
dwt函数该函数实现了离散小波变换(DWT),可以对信号进行多级离散尺度的小波分解。
可以选择不同小波基函数和分解层数,得到对应的离散小波系数。
idwt函数该函数实现了离散小波变换的逆变换,可以根据离散小波系数进行重构。
可以选择相同的小波基函数和分解层数,得到原始信号的重构。
wdenoise函数该函数基于小波变换提供了信号去噪的功能。
MATLAB 小波变换指令及其功能介绍1一维小波变换的 Matlab 实现(1)dwt 函数功能:一维离散小波变换格式:[cA,cD]=dwt(X,'wname')[cA,cD]=dwt(X,Lo_D,Hi_D)别可以实现一维、二维和 N 维DFT说明:[cA,cD]=dwt(X,'wname') 使用指定的小波基函数 'wname'对信号 X 进行分解,cA、cD 分别为近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D) 使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解。
(2)idwt 函数功能:一维离散小波反变换格式:X=idwt(cA,cD,'wname')X=idwt(cA,cD,Lo_R,Hi_R)X=idwt(cA,cD,'wname',L)函数 fft、fft2 和 fftn 分X=idwt(cA,cD,Lo_R,Hi_R,L)说明:X=idwt(cA,cD,'wname') 由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X 。
'wname' 为所选的小波函数X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重构滤波器 Lo_R 和Hi_R 经小波反变换重构原始信号 X 。
X=idwt(cA,cD,'wname',L) 和 X=idwt(cA,cD,Lo_R,Hi_R,L) 指定返回信号 X 中心附近的 L 个点。
2二维小波变换的 Matlab 实现二维小波变换的函数别可以实现一维、二维和 N 维 DFT函数名函数功能dwt2 二维离散小波变换wavedec2 二维信号的多层小波分解idwt2 二维离散小波反变换waverec2 二维信号的多层小波重构wrcoef2 由多层小波分解重构某一层的分解信号upcoef2 由多层小波分解重构近似分量或细节分量detcoef2 提取二维信号小波分解的细节分量appcoef2 提取二维信号小波分解的近似分量upwlev2 二维小波分解的单层重构dwtpet2 二维周期小波变换idwtper2 二维周期小波反变换(1)wcodemat 函数功能:对数据矩阵进行伪彩色编码函数 fft、fft2 和 fftn 分格式:Y=wcodemat(X,NB,OPT,ABSOL)Y=wcodemat(X,NB,OPT)Y=wcodemat(X,NB)Y=wcodemat(X)说明:Y=wcodemat(X,NB,OPT,ABSOL) 返回数据矩阵 X 的编码矩阵Y ;NB 伪编码的最大值,即编码范围为 0~NB,缺省值 NB=16;OPT 指定了编码的方式(缺省值为 'mat'),即:别可以实现一维、二维和 N 维 DFTOPT='row' ,按行编码OPT='col' ,按列编码OPT='mat' ,按整个矩阵编码函数 fft、fft2 和 fftn 分ABSOL 是函数的控制参数(缺省值为 '1'),即: ABSOL=0 时,返回编码矩阵ABSOL=1 时,返回数据矩阵的绝对值 ABS(X)1. 离散傅立叶变换的 Matlab 实现(2)dwt2 函数功能:二维离散小波变换格式:[cA,cH,cV,cD]=dwt2(X,'wname')[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)说明:[cA,cH,cV,cD]=dwt2(X,'wname')使用指定的小波基函数'wname' 对二维信号 X 进行二维离散小波变幻;cA,cH,cV,cD 分别为近似分量、水平细节分量、垂直细节分量和对角细节分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) 使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D 分解信号 X 。
在MATLAB中,Morlet小波变换可以通过使用内置的cwt函数来实现。
cwt函数用于执行连续小波变换,它支持多种小波类型,包括Morlet小波。
以下是一个示例代码,演示如何在MATLAB中执行Morlet小波变换:
matlab复制代码
% 创建一个信号
x = sin(2 * pi * 10 * (0:0.01:1)) + randn(size(0:0.01:1));
% 定义Morlet小波的参数
scales = logspace(-1, 2, 128); % 尺度范围
waveletName = 'morl'; % 小波名称
% 执行Morlet小波变换
[cwtmatr, freqs] = cwt(x, scales, waveletName);
% 绘制结果
imagesc(freqs, 1:length(x), abs(cwtmatr));
colormap(jet);
xlabel('Frequency (Hz)');
ylabel('Time (s)');
title('Morlet Wavelet Transform');
在上述示例中,首先创建了一个包含噪声的正弦波信号。
然后,定义了Morlet小波的参数,包括尺度范围和小波名称。
接下来,使用cwt函数执行Morlet小波变换,并将结果存储在cwtmatr和freqs变量中。
最后,使用imagesc函数绘制了变换结果的图像。
请注意,cwt函数的参数可以根据需要进行调整,例如可以更改尺度范围、小波类型等。
MA TLAB语言实现小波变换使用上面的误差分析方法,我们选择比较好的、适合地震数据处理的小波基函数,运用MA TLAB语言编制小波程序来实现小波分析。
3.1 小波变换程序的实现function For-cwt(Filein, Fileout, traces, samples, scale, wavelet)% For-cwt(Filein, Fileout, traces, samples, scale, wavelet)连续小波变换%输入Filein: 原始的地震剖面文件(*.sgy)% Fileout:小波分解剖面文件(*.sgy)% traces: 整个剖面文件的总道数% samples:每一道地震记录的采样点数% scale: 小波变换尺度值% wavlelet:小波类型:′morl′, Morlet小波;′gaus′, Gaussian小波;′mexh′,墨西哥帽子小波%输出生成由输入所指定的小波分解剖面文件Infile=char(Filein)Outfile=char(Fileout)Type=char(wavelet)fp1=fopen(Infile,′r′); %打开一原始的输入文件fp2=fopen(Outfile,′w′); %要写入的小波分解剖面文件cc=fread(fp1,1800,′integer*2′); %读取sgy文件的文件头信息fwrite(fp2,cc,′integer*2′);for k=1:traces %循环处理bb=fread(fp1,120,′integer*2′); %读取sgy文件的道头信息fwrite(fp2,bb,′integer*2′);s=fread(fp1, samples,′integer*2′); %读出一道数据w=cwt(s, scale, wavelet); %小波变换后该道的变换系数数据fwrite(fp2, w,′integer*2′); %将该道的小波变换数据写入到文件中endfclose(fp1);fclose(fp2);function For-dwt(Filein, traces, samples, wavelet)%function For-dwt(Filein, traces, samples, wavelet)离散小波变换%输入Filein: 原始的地震剖面文件(*.sgy)% traces: 整个剖面文件的总道数% samples:每一道地震记录的采样点数% wavelet:小波类型;可供选择的有Daubechies小波、Coiflets小波、Symlets小波等%输出生成不同分层结构的小波分解剖面文件% 本程序以3层分解为例。
1、 求n h 。
1,(),()n n h t t ϕϕ-=
或ˆˆ()(2)/()H ωϕ
ωϕω= 2、 由n h 求n g 。
1(1)n n n g h -=- 或()()i G e H t ωωωπ-=
3、 由n g ,()t ϕ构成正交小波基函数()t φ
1,()()n n t g t φϕ-=∑
或ˆˆ()(/2)(/2)G φ
ωωϕω= Haar 小波的构造
1)、选择尺度函数。
101()0t t ϕ ≤≤⎧=⎨ ⎩其他
易知(n)t ϕ-关于n 为一正交归一基。
2)、求n h
1,(),()n n h t t ϕϕ-
=()2t-n)t dt ϕϕ(
其中
11(2)220n n t t n ϕ+⎧ ≤≤⎪-=⎨⎪ ⎩其他
当n=0时,
11(2)20t t ϕ⎧ 0≤≤⎪=⎨⎪ ⎩其他
当n=1时,
111(21)20t t ϕ⎧ ≤≤⎪-=⎨⎪ ⎩其他
故,当n=0,n=1时
1()(2)0n n t t n ϕϕ =0,=1⎧•-=⎨
⎩其他
当n=0时, ()(2)t t n ϕϕ•-1120t ⎧ 0≤≤⎪=⎨⎪ ⎩其他
当n=1时,
()(2)t t n ϕϕ•-11120t ⎧ ≤≤⎪=⎨⎪ ⎩其他
故
n
h ()2t-n)t dt ϕϕ
(1/0n n ⎧=0,=1⎪=⎨ ⎪⎩其他
3)、求n g 。
11/0(1)1/10n n n n g h n -⎧=⎪⎪=-=-=⎨⎪ ⎪⎩
其他
4)、求()t φ。
1,()()n n t g t φϕ-=∑
=0-1,011,1()()g t g t ϕϕ-+
=(2)(21)t t - =110211120t t ⎧ ≤≤⎪⎪⎪- ≤≤⎨⎪ ⎪⎪⎩
其他 其图形如下:
1、 Haar 尺度函数
101()0t t ϕ ≤≤⎧=⎨ ⎩其他
Haar 尺度函数空间:
}{,(22),(21),(2),(21),(21),j j j j j x x x x x ϕϕϕϕϕ++-- j 为非负的整数,该空间又称为j 级阶梯函数空间j V 。
则
01211j j j V V V V V V -+⊂⊂⊂⊂⊂⊂⊂
随j 的增加,分辨更为精细。
2、 性质
函数集}{/22(2):j j x k k Z ϕ-∈是j V 的一个标准正交基。
0()f x V ∈当且仅当(2)j j f x V ∈。
3、 Haar 小波函数
函数满足两点:(1)φ是1V 的成员;(2)φ与0V 正交。
()x φ=(2)(21)x x ϕϕ--
性质:
()0x dx φ+∞
-∞=⎰
()x φ是对称的、局部支撑的函数;
小波函数空间:(2),j j k
k k Z W a x k a R φ∈-∈∑
j W 是j V 的正交互补,即1j j j V V W +=⊕
函数集}{/22(2):j j x k k Z φ-∈是j W 的一个标准正交基
4、 Haar 小波分解与重建
对Haar 小波,有11(2)((2)(2))j j j x x x φφϕ--=+/2 11(21)((2)(2))/2j j j x x x φφϕ---=-
Haar 小波分解定理:
设:()(2),()j j k
j j k Z f x a x k f x V φ∈=-∈∑
则它可以有如下分解:
11j j j f f ω--=+
11111(2),()j j j k j j k Z
f a x k f x V φ-----∈=-∈∑
11111(2),()j j j k j j k Z
b x k x W ωϕω-----∈=-∈∑
12212
j k k k a a a -++= 12212j k
k k a a b -+-= 把函数f 分解成一个小波空间与一个尺度空间的分量
()2(4)2(41)(42)(43)f x x x x x φφφφ=+-+---
解:按照分解定理,此j=2,;k=0,1,2,3对应的系数是2,2,1,-1;代入公式,得出分解后尺度函数空间元素的系数是2222+=,1102
-=;分解后小波函数空间元素的系数是2202-=,1(1)12
--=;从而 ()2(2)(21)f x x x φϕ=+-
Matlab程序
image1=imread('');
image1=rgb2gray(image1);
subplot(2,2,1);
imshow(image1);
title('original image');
image1=double(image1);
imagew=imread('');
imagew= rgb2gray (imagew);
subplot(2,2,2);
imshow(imagew);
title('original watermark');
[ca,ch,cv,cd]=dwt2(image1,'db1');
[ca1,ch1,cv1,cd1]=dwt2(ca, 'db1');
[cas,chs,cvs,cds]=dwt2(ca1,'db1');
M=512;
N=64;
for i=1:N
for j=1:N
Ca(i,j)=cas(i,j)+*imagew(i,j);
end;
end;
IM=idwt2(Ca,chs,cvs,cds,'db1');
IM1=idwt2(IM,ch1,cv1,cd1, 'db1'); markedimage=double(idwt2(IM1,ch,cv,cd,'db1')); subplot(2,2,3);
colormap(gray(256));
image(markedimage);
title('marked image');
imwrite(markedimage,gray(256),'','bmp'); image1=imread('');
image1=rgb2gray(image1);
image1=double(image1);
imaged=imread('');
[ca,ch,cv,cd]=dwt2(image1,'db1');
[ca1,ch1,cv1,cd1]=dwt2(ca,'db1');
[cas,chs,cvs,cds]=dwt2(ca1,'db1');
[caa,chh,cvv,cdd]=dwt2(imaged,'db1');
[caa1,chh1,cvv1,cdd1]=dwt2(caa,'db1'); [caas,chhs,cvvs,cdds]=dwt2(caa1,'db1');
for p=1:N
for q=1:N
W(p,q)=100*(caas(p,q)-cas(p,q));
end;
subplot(2,2,4);
colormap(gray(256));
image(W);
title('从含水印图像中提取的水印'); imwrite(W,gray(256),'','bmp');。