图像处理-小波变换

摘要:
在图像处理中,二进小波常被用作小波变换函数,它被2的整数幂除。在极端情况下,JPEG图像只保留反映图像外观的基本信息,并且会丢失精细的图像细节。小波变换是一种现代频谱分析工具。它可以检查本地时域过程的频域特性和本地频域过程的时域特性。因此,即使对于非平稳过程,它也很容易处理。它可以将图像转换成一系列小波系数,这些系数可以被有效地压缩和存储

 什么是小波?

“小”指的是具有衰减性;“波”指的是具有波动性,其振幅正负相间的振荡形式趋于不规则、不对称,均值为0的波形,类似于下面的:

图像处理-小波变换第1张

 图像处理-小波变换第2张

小波的种类:

图像处理-小波变换第3张

Matlab查看小波种类:

>> wavemngr('read',1)

ans =

  71×44 char 数组

    '===================================         '
    'Haar              →→haar                    '
    '===================================         '
    'Daubechies        →→db                      '
    '------------------------------              '
    'db1→db2→db3→db4→                            '
    'db5→db6→db7→db8→                            '
    'db9→db10→db**→                              '
    '===================================         '
    'Symlets           →→sym                     '
    '------------------------------              '
    'sym2→sym3→sym4→sym5→                        '
    'sym6→sym7→sym8→sym**→                       '
    '===================================         '
    'Coiflets          →→coif                    '
    '------------------------------              '
    'coif1→coif2→coif3→coif4→                    '
    'coif5→                                      '
    '===================================         '
    'BiorSplines       →→bior                    '
    '------------------------------              '
    'bior1.1→bior1.3→bior1.5→bior2.2→            '
    'bior2.4→bior2.6→bior2.8→bior3.1→            '
    'bior3.3→bior3.5→bior3.7→bior3.9→            '
    'bior4.4→bior5.5→bior6.8→                    '
    '===================================         '
    'ReverseBior       →→rbio                    '
    '------------------------------              '
    'rbio1.1→rbio1.3→rbio1.5→rbio2.2→            '
    'rbio2.4→rbio2.6→rbio2.8→rbio3.1→            '
    'rbio3.3→rbio3.5→rbio3.7→rbio3.9→            '
    'rbio4.4→rbio5.5→rbio6.8→                    '
    '===================================         '
    'Meyer             →→meyr                    '
    '===================================         '
    'DMeyer            →→dmey                    '
    '===================================         '
    'Gaussian          →→gaus                    '
    '------------------------------              '
    'gaus1→gaus2→gaus3→gaus4→                    '
    'gaus5→gaus6→gaus7→gaus8→                    '
    '===================================         '
    'Mexican_hat       →→mexh                    '
    '===================================         '
    'Morlet            →→morl                    '
    '===================================         '
    'Complex Gaussian  →→cgau                    '
    '------------------------------              '
    'cgau1→cgau2→cgau3→cgau4→                    '
    'cgau5→cgau6→cgau7→cgau8→                    '
    '===================================         '
    'Shannon           →→shan                    '
    '------------------------------              '
    'shan1-1.5→shan1-1→shan1-0.5→shan1-0.1→      '
    'shan2-3→shan**→                             '
    '===================================         '
    'Frequency B-Spline→→fbsp                    '
    '------------------------------              '
    'fbsp1-1-1.5→fbsp1-1-1→fbsp1-1-0.5→fbsp2-1-1→'
    'fbsp2-1-0.5→fbsp2-1-0.1→fbsp**→             '
    '===================================         '
    'Complex Morlet    →→cmor                    '
    '------------------------------              '
    'cmor1-1.5→cmor1-1→cmor1-0.5→cmor1-1→        '
    'cmor1-0.5→cmor1-0.1→cmor**→                 '
    '===================================         '
    'Fejer-Korovkin    →→fk                      '
    '------------------------------              '
    'fk4→fk6→fk8→fk14→                           '
    'fk18→fk22→                                  '
    '===================================         '

连续小波变换

Continuous Wavelet Transform,CWT

${ m{C}}(scale,position) = int_{ - infty }^{ + infty } {f(t)psi (scale,position,t)dt} $

小波变换是将信号f(t)与被缩放和平移的小波函数$psi ()$之积在信号存在的整个期间里求和的结果,CWT变换结果是小波系数C

缩放因子scale越小,表示小波越窄,信号频率越高;

缩放因子scale越大,表示小波越宽,信息频率越低

二维离散小波变换

将二维信号在不同尺度上的分解,得到原始信息的近似值和细节值。

分解的结果为近似分量水平细节分量垂直细节分量对角细节分量

每通过一次小波变换后,图像被分为四分之一的子频带区域,分别包含了相应频带的小波系数,LL频带是图像内容的缩略图,保持了原图的内容信息,LH频带含有水平方向的高频边缘信息,HL频带含有竖直方向的高频边缘信息,HH频带含有对角方向的高频边缘信息,反映了水平和竖直方向上图像灰度的综合变换

图像处理-小波变换第4张

小波变换

小波一次变换实际就是对图像既进行行变换又进行列变换,其结果是左上角显示缩小为原来的四分之一的图像,右上角是图像的行变换结果,左下角是图像的列变结果,而右下角则是对图像进行45度边缘检测的处理结果

百度百科:

离散小波变换是对基本小波的尺度和平移进行离散化。在图像处理时,常采用二进小波作为小波变换函数,即用2的整数次幂进行划分。

余弦变换是最经典的谱分解工具,是指整个时域过程的频域特征或整个频域过程的时域特征,故对于平稳过程,他有很好的效果,但对于非平稳过程,他却有诸多不足。在JPEG中,离散余弦变换将图像压缩为8×8 的小块,然后依次放入文件中,这种算法靠丢弃频率信息实现压缩,因而图像的压缩率越高,频率信息被丢弃的越多。在极端情况下,JPEG图像只保留了反映图像外貌的基本信息,精细的图像细节都损失了。

小波变换是现代谱分析工具,他既能考察局部时域过程的频域特征,又能考察局部频域过程的时域特征,因此即使对于非平稳过程,处理起来也得心应手。他能将图像变换为一系列小波系数,这些系数可以被高效压缩和存储,此外,小波的粗略边缘可以更好地表现图像,因为他消除了DCT压缩普遍具有的方块效应。

在数字图像处理中,需要将连续的小波及其小波变换离散化。一般计算机实现中使用二进制离散处理,将经过这种离散化的小波及其相应的小波变换成为离散小波变换(简称DWT)。实际上,离散小波变换是对连续小波变换的尺度、位移按照2的幂次进行离散化得到的,所以也称之为二进制小波变换。

虽然经典的傅里叶变换可以反映出信号的整体内涵,但表现形式往往不够直观,并且噪声会使得信号频谱复杂化。在信号处理领域一直都是使用一族带通滤波器将信号分解为不同频率分量,即将信号f(x)送到带通滤波器族Hi(x)中。

小波分解的意义就在于能够在不同尺度上对信号进行分解,而且对不同尺度的选择可以根据不同的目标来确定

对于许多信号,低频成分相当重要,它常常蕴含着信号的特征,而高频成分则给出信号的细节或差别。人的话音如果去掉高频成分,听起来与以前可能不同,但仍能知道所说的内容;如果去掉足够的低频成分,则听到的是一些没有意义的声音。在小波分析中经常用到近似与细节。近似表示信号的高尺度,即低频信息;细节表示信号的高尺度,即高频信息。因此,原始信号通过两个相互滤波器产生两个信号。

图像处理-小波变换第5张

通过不断的分解过程,将近似信号连续分解,就可以将信号分解成许多低分辨率成分。理论上分解可以无限制的进行下去,但事实上,分解可以进行到细节(高频)只包含单个样本为止。因此,在实际应用中,一般依据信号的特征或者合适的标准来选择适当的分解层数。

基本定义

x[n]:离散的输入信号,长度为N。

g[n]:low pass filter低通滤波器,可以将输入信号的高频部份滤掉而输出低频部份。

h[n]:high pass filter高通滤波器,与低通滤波器相反,滤掉低频部份而输出高频部份。

 Q:downsampling filter降采样滤波器,如果以x[n]作为输入,则输出y[n]=x[Qn]。此处举例Q=2。

降噪

在小波分析中经常用到近似于细节,近似表示信号的高尺度,即低频信息;细节表示信号的高尺度,即高频信息。

对含有噪声的信号,噪声分量的主要能量集中在小波解的细节分量中。

图像处理-小波变换第6张

程序:

clc; clear all; close all;

load leleccum; % 载入信号数据

s = leleccum;

Len = length(s);

[ca1, cd1] = dwt(s, 'db1'); % 采用db1小波基分解

a1 = upcoef('a', ca1, 'db1', 1, Len); % 从系数得到近似信号

d1 = upcoef('d', cd1, 'db1', 1, Len); % 从系数得到细节信号

s1 = a1+d1; % 重构信号

figure;

subplot(2, 2, 1); plot(s); title('初始电源信号');

subplot(2, 2, 2); plot(ca1); title('一层小波分解的低频信息');

subplot(2, 2, 3); plot(cd1); title('一层小波分解的高频信息');

subplot(2, 2, 4); plot(s1, 'r-'); title('一层小波分解的重构信号');

图像处理-小波变换第7张

总的来说,

小波分解可以使人们在任意尺度观察信号,只需所采用的小波函数的尺度合适。小波分解将信号分解为近似分量【低频】和细节分量【高频】,它们在应用中分别有不同的特点。比如,对含有噪声的信号,噪声分量的主要能量集中在小波分解的细节分量中,对细节分量做进一步处理,比如阈值处理,可以过滤噪声。

Matlab实现

常用函数

图像处理-小波变换第8张

实验1

连续小波分析只需要一个cwt函数

下面的例子是一个包含噪声的正弦波:

1、加载信号

load noissin

可以使用whos显示信号信息

>> whos
  Name          Size              Bytes  Class     Attributes

  Len           1x1                   8  double              
  a1            1x4320            34560  double              
  ca1           1x2160            17280  double              
  cd1           1x2160            17280  double              
  d1            1x4320            34560  double              
  leleccum      1x4320            34560  double              
  noissin       1x1000             8000  double              
  s             1x4320            34560  double              
  s1            1x4320            34560  double  

2、执行连续小波变换

c=cwt(noissin,1:48,'db4');

函数cwt 的参数分别为分析的信号,分析的尺度和使用的小波

返回值c包含了在各个尺度下的小波系数,这里c是一个48*1000的矩阵,每一行与一个尺度相关

3、绘制小波系数

cwt函数可以接受第四个参数,来指定函数在执行结束后是否会绘制连续小波变换系数的绝对值

下面语句就是绘制系数结果:

b=cwt(noissin,1:48,'db4','plot');

图像处理-小波变换第9张

4、选择分析的尺度

cwt函数的第二个参数可以设定任意小波分析的尺度,只要满足以下要求即可:

(1)所有尺度必须是正实数

(2)尺度的增量必须为正

(3)最高尺度不能超过由信号决定的一个最大值

如下面代码可以执行从2开始的偶数尺度计算:

 b=cwt(noissin,2:2:128,'db4','plot');

图像处理-小波变换第10张

上面图像显示信号的周期性

实验2

1、加载信号

load leleccum

截取信号:

s=leleccum(1:3920);
ls=length(s);

2、对信号进行一层小波分解

使用db1小波执行一层小波分解,执行下面语句产生近似低频CA1,高频系数CD1

[CA1,CD1]=dwt(s,'db1');

3、从系数中构建低频和高频

从系数CA1和CD1中构建一层低频A1和高频D1:

A1 = upcoef('a',cA1,'db1',1,ls);

D1 = upcoef('d',cD1,'db1',1,ls);

或

A1 = idwt(cA1,[],'db1',ls);

D1 = idwt([],cD1,'db1',ls);

系数重构:

图像处理-小波变换第11张

4、显示低频和高频

subplot(1,2,1); plot(A1); title('Approximation A1')
subplot(1,2,2); plot(D1); title('Detail D1')

图像处理-小波变换第12张

5、使用逆小波变换恢复信号

图像处理-小波变换第13张

A0=idwt(CA1,CD1,'db1',ls);
subplot(2,2,3); plot(A0); title('逆变换 ')

图像处理-小波变换第14张

6、多尺度一维分解

图像处理-小波变换第15张

执行3层信号分解:

[C,L] = wavedec(s,3,'db1');

函数返回3层分解的各组分系数C(连接在一个向量里),向量L里返回的是各组分的长度

7、抽取低频和高频系数

图像处理-小波变换第16张

图像处理-小波变换第17张

从C中抽取3层低频系数

CA3 = appcoef(C,L,'db1',3);

从C中抽取3、2、1层高频系数

CD3 = detcoef(C,L,3);

CD2 = detcoef(C,L,2);

CD1 = detcoef(C,L,1);

或者

[CD1,CD2,CD3] = detcoef(C,L,[1,2,3]);

figure;
subplot(2,2,1); plot(CA3); title('低频系数')
subplot(2,2,2); plot(CD3); title('高频系数三层')
subplot(2,2,3); plot(CD2); title('高频系数二层')
subplot(2,2,4); plot(CD1); title('高频系数一层')

图像处理-小波变换第18张

8、重构三层低频和1,2,3层高频

图像处理-小波变换第19张

从C中重建3层近似

A3 = wrcoef('a',C,L,'db1',3);

从C中重建1、2、3层细节

D1 = wrcoef('d',C,L,'db1',1);

D2 = wrcoef('d',C,L,'db1',2);

D3 = wrcoef('d',C,L,'db1',3);

9、显示分层分解的结果

显示3层分解的结果

subplot(2,2,1); plot(A3);

title('Approximation A3')

subplot(2,2,2); plot(D1);

title('Detail D1')

subplot(2,2,3); plot(D2);

title('Detail D2')

subplot(2,2,4); plot(D3);

title('Detail D3')

图像处理-小波变换第20张

10、从3层分解中重建原始信号

图像处理-小波变换第21张

A0 = waverec(C,L,'db1');
err = max(abs(s-A0))

11、粗糙的去燥信号

使用小波从信号中移除噪声需要辨识哪个或哪些组分包含噪音,然后重建没有这些组分的信号

下面的例子中,连续的低频随着越来越多的高频信息从信号中滤除,噪声变得越来越少,3层低频与原始信号对比会更干净:

figure;
subplot(2,1,1);plot(s);title('Original'); axis off
subplot(2,1,2);plot(A3);title('Level 3 Approximation');axis off

图像处理-小波变换第22张

当然,除去所有高频信息,会失去原始信号中的很多最尖锐的特征,最佳去噪音的方法是通过一种更精细的“阈值”方法,只丢弃部分超过一定范围的细节

12、通过阈值去除噪音

 先看3层分析的高频:

figure;
subplot(3,1,1); plot(D1); title('Detail Level 1'); axis off
subplot(3,1,2); plot(D2); title('Detail Level 2'); axis off
subplot(3,1,3); plot(D3); title('Detail Level 3'); axis off

图像处理-小波变换第23张

从图中可以看到,大多数噪声发生在信号的后面部分,表现在细节上就是出现大波动的地方。如果我们通过设定最大值来限定细节强度,会怎么样呢?这会有降低噪声效果,同时保留不影响的必要细节。这是一种很好的方法。

注意到CD1,CD2,CD3是向量,那么我们就可以通过直接操纵这些向量来达到目的,即设置这些向量小于其峰值或平均值的一部分,然后就可以由这些设定了阈值的系数重建新的细节信号D1、D2、D3

实际去噪过程中,可以使用ddencmp函数来计算默认的阈值参数,然后用wdencmp函数来执行实际的去噪过程,代码如下

[thr,sorh,keepapp] = ddencmp('den','wv',s);
clean = wdencmp('gbl',C,L,'db1',3,thr,sorh,keepapp);

注意wdencmp使用了第6步中小波分解的结果C、L,另外指定了db1小波来做分析,指定全局阈值选项gb1.

详细参见ddencmp函数和wdencmp函数。

显示原始信号和去噪信号如下:

figure;
subplot(2,1,1); plot(s(2000:3920)); title('Original')
subplot(2,1,2); plot(clean(2000:3920)); title('denoised')

图像处理-小波变换第24张

这里我们只绘制了原始信号中包含噪声的部分,特别注意我们是如何在移除了噪声的情况下仍保持原有的尖锐细节的,这也是小波分析强大的地方。

参考

1、知乎1   知乎2

2、博客园1

3、CSDN1

4、Matlab实现1   Matlab实现2

5、数字图像处理(杨淑莹)

免责声明:文章转载自《图像处理-小波变换》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用百度翻译的API接口[持续集成]Jenkins 自动化部署 Maven 工程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【试题汇总】图像处理职位面试题汇总(1)

Matlab编程部分 1. Matlab 中读、写及显示一幅图像的命令各是什么? 解:第一、Matlab中读图像函数是imread( )。imread 函数用于读入各种图像文件,其一般的用法为:[X,MAP]=imread(‘filename’,‘fmt’) 其中,X,MAP分别为读出的图像数据和颜色表数据,fmt为图像的格式,filename为读取的...

小波变换教程(四)

译文转:https://blog.csdn.net/alihouzi/article/details/45190303 原文转:http://users.rowan.edu/~polikar/WTpart1.html 五、终极解决方案:小波变换         小波变换是这样一种变换:它提供了信号的时频表示(还有一些变换可以提供这些信息,如短时傅立叶变化...

小波变换教程(六)

译文转:https://blog.csdn.net/alihouzi/article/details/45190303 原文转:http://users.rowan.edu/~polikar/WTpart1.html        那么,我们怎样把这些时间信息加到频率图中去呢?让我们更进一步的看一下这个问题。         傅立叶变换有什么缺点?它不适...

AAC帧格式及编码介绍

参考资料: AAC以adts格式封装的分析:http://wenku.baidu.com/view/45c755fd910ef12d2af9e74c.html aac编码介绍:http://wenku.baidu.com/view/0de48034f111f18583d05a65.html AAC音频压缩编码标准的ADTS与LATM的格式分析:http:/...

数字图像处理_图像基本运算

图像基本运算 1点运算  线性点运算是指输入图像的灰度级与输出图像呈线性关系。s=ar+b  (r为输入灰度值,s为相应点的输出灰度值)。  当a=1,b=0时,新图像与原图像相同;  当a=1,b≠0时,新图像是原图像所有像素的灰度值上移或下移,是整个图像在显示时更亮或更暗;  当a>1时,新图像对比度增加;  当a<1时,新图像对比度降低;  当a<0...

图像处理常用边缘检测算子总结(转)

  不同图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像。需要说明的是:边缘和物体间的边界并不等同,边缘指的是图像中像素的值有突变的地方,而物体间的边界指的是现实场景中的存在于物体之间的边界。有可能有边缘的地方并非边界,也有可能边界的地方并无边缘,因为现实世界中的物体是三维的,而图像只具有二维信息,从三维到二维的投影成像不可避免的会丢失一部分...