目录
引言:
一、背景
1.1 图像金字塔
1.2 子带编码
1.3 哈尔变换
二、多分辨率展开
2.1 级数展开
2.2 尺度函数
2.3 小波函数
三、一维小波变换
3.1 小波级数展开
3.2 离散小波变换
3.3 连续小波变换
四、快速小波变换
五、二维小波变换
尽管20世纪50年代末起傅里叶变换就一直是基于变换的的图像处理的基石,但近年来出现了一种新的名为小波变换的变换使得压缩、传输和分析图像变得更加容易。与基函数为正弦函数的傅里叶变换不同,小波变换基于一些小型波,称为小波,具有变化的频率和有限的持续时间。本章将从多分辨率的角度来审视基于小波的变换,这样将简化它们的数学和物理解释,同时将从影响多分辨率理论形成的图像处理技术的概述入手阐述该理论的基本概念。
我们所观察到的物体是由相似的纹理和灰度级连城的区域相结合形成的。对于不同尺寸或不同对比度的物体我们通常选用不同的分辨率去研究,而如果大尺寸、小尺寸/高对比度、低对比度同时存在的话,就需要使用多分辨率处理对其加以操作了。从数学角度看,图像可以看成是一个具有局部变化的统计特性灰度值的二维阵列。
图像金子塔是一种以多个分辨率来表示图像的一种有效且概念简单的结构,最初应用于机器视觉和图像压缩,一个图像金字塔是一系列以金字塔形状排列的、分辨率逐步降低的图像结合。
金字塔底部是待处理图像的高分辨率表示,顶部则包含一个低分辨率近似,越往金字塔上层移动,尺寸和分辨率越低。基础级J大小为:或N*N,其中,顶点级0的大小为1*1(单个像素)。第P+1级金字塔中的像素总数为:
上图为一个构建两个密切联系的图像金字塔的简单系统,第j-1级近似输出提供,提供建立一个近似值金字塔所需的图像,第j级预测残差输出用于构建一个补充的预测残差金字塔。残差金字塔则仅包含输入图像的一个降低分辨率的近似。近似和预测残差金字塔都以一种迭代方式进行计算,步骤如下:
1、计算第j级输入图像降低的分辨率近似,可通过滤波并对滤波后的结果以2为因数进行下采样来完成。在两种操作将在下一阶段中描述。将得到的近似放在近似金字塔的第j-1级。
2、由步骤1中产生的降低的分辨率近似创建第j级输入图像的一个估计。这通过对产生的近似与第j级图像进行上采样和滤波来完成。得到的预测图像与第j级输入图像的维数相同。
3、计算2中预测图像与1中输入之间的差,结果放入残差金字塔的第j级。
上采样和下采样被用于加倍和减半计算得到降低近似和预测图像的空间维数,对于给定的整数变量n和一维取样序列f(n),上采样序列可以表示为:
基2的下采样的互补操作定义为:
上采样可以看成是每一个样本后面插入0,下采样 则可以看成是每隔一个样本丢弃一个样本。
子带编码是另一种与多分辨率相关的重要图像处理技术,在子带编码中,一幅图像被分解为一组频带受限的分量,称为子带,由于执行了分解,所以子带可以重组在一起无误差的重构原始图像。
图为一个数字滤波器,由三个基本部件组成,即延时单元、乘法器和加法器。延时序列为:
输入序列与延时序列分别于常数相乘并求和就可以产生滤波后的输出序列。
当输入序列为离散单位冲激时:
上图为6个功能上相关的滤波器的冲激响应,c、d中滤波器响应是a图的顺序反转形式:
记第5张图以下式定义:
则第6张图序列就可以写成:
以上的序列可以说明,在规定的两个滤波器之间的关系时,符号反转、顺序反转和调制是可以合并在一起的。
二带子带编码和解码系统
上图中可以看出一个子带编码系统由分析滤波器和综合滤波器组成。同时,两者的冲激响应必须按照:
或者:
两者之一联系起来,上式中的被看成是交叉调制,并且满足双正交条件:
哈尔变换的基函数是已知的最古老也是最简单的正交小波,可用:
F是一个N*N的图像矩阵,H是一个N*N的哈尔变换矩阵,T是一个N*N的变换结果。转置是必要的,因为H是非对称的。H中包含哈尔基函数 ,定义为:
对于哈尔变换矩阵,假设N=2,那么一个2*2的哈尔矩阵的第一行使用,z=0/2,1/2来计算。第二行,z=0/2,1/2来计算。因此一个2*2的哈尔矩阵为:
当N为4时:
import cv2
import numpy as np
import matplotlib.pyplot as plt
import pywt.data
img = cv2.imread('D:\\picture\\tupian.jpg', 0) # 将图像转为灰色图像
titles = ['original', 'shuiping', 'chuizhi', 'duijiaoxian']
coeffs2 = pywt.dwt2(img, 'haar')
LL, (LH, HL, HH) = coeffs2 # 查看分解结果
fig = plt.figure(figsize=(12, 3))
for i, a in enumerate([LL, LH, HL, HH]):
ax = fig.add_subplot(1, 4, i + 1)
ax.imshow(a, interpolation="nearest", cmap=plt.cm.gray)
ax.set_title(titles[i], fontsize=10)
ax.set_xticks([])
ax.set_yticks([])
fig.tight_layout()
plt.show()
信号或函数f(x)通常可以被很好地分解为一系列展开函数的线性组合:
k是有限或无线和的整数下标,是具有实数值的展开系数,是具有实数值的展开函数。如果展开是唯一的,也就是说对于任何给定的c只有一组与之对应,那么就称为基函数,并且展开集合{}就称为可这样表示的一类函数的基.可展开的函数形成了个函数空间,称为展开集合的闭合跨度,表示为:
系数可以表示为:
考虑由整数平移和实数二值尺度、平方可积函数组成的展开函数集合,即{},其中
若将j限制为某个指定的值,如,则得到的展开集合就是{}的一个子集。可将子空间定义为:
由此可以写出:
一般的,对于任意j,在k上跨越的子空间可以表示为:
尺度函数与小波函数空间之间的关系
根据上图给出的空间对应关系,可以给出小波集合{}:
用到先前提及的尺度函数,可以写为:
f(x)可表示为:
小波函数的展开可以表示为:
是任意的开始尺度,和是的改写形式,一般被称为近似或尺度系数,
称为细节或小波系数。如果展开函数形成一个正交基或紧框架,展开系数的计算变为:
就如傅里叶级数展开一样,当待展开的函数是离散的时,得到的系数就称为离散小波变换(DWT)其系数为:
反向DWT:
当待展开函数为连续的时,得到的就是连续小波变换(CWT),连续小波变换将一个连续函数变换为两个连续变量的高度冗余函数。
连续的平方可积函数f(x)的连续小波变换与实数值小波的关系定义为:
其中:
s和分别称为尺度参数和平移参数。
其中
快速小波变换FWT是一种实现离散小波变换DWT的高效计算,多分辨的详细等式为:
用对x尺度化,用k对它进行平移,并令m=2k+n,给出:
上面我们了解过了连续函数的小波级展开系数,由此我们可以得到:
式子代入得:
计算得:
FWT分析滤波器组
由上图可以写出:
其中,卷积是在n=2k,k>=0时直接求值。上述公式为快速计算小波变换的定义式,对于一个长度为的序列,涉及的数学操作次数约为O(M),即乘法和加法的次数与输入序列的长度呈线性关系。用FWT分析滤波器组执行的卷积所涉及的乘法和加法的次数与进行卷积序列的长度成正比。
一维变换可很容易地扩展到像图像这样的二维函数。在二维情况下,需要一个二维尺度函数和三个二维小波。每个都是两个一维函数的乘积。除去产生一维结果的乘积后,剩下的乘积产生可分离的尺度函数:
以及可分离的“方向敏感”小波:
度量沿列方向的变化(水平边缘)、响应沿行方向的变化(垂直边缘)、度量对应对角线方向的变化。方向敏感是中可分离性的自然结果;并不会增加二维变换的复杂性。
给定可分离的二维尺度函数和小波函数,一维DWT便可直接拓展到二维。定义尺度函数与平移基函数:
大小为M*N的图像的离散小波变换为:
和一维情况相似,是一个任意的开始尺度,系数定义f(x,y)在尺度处的近似。系数对尺度j>=附加了水平、垂直和对角方向的细节。当=0时,N=M=,有j=0,1,2...J-1和m=n=0,1,2...-1。
f(x,y)可以通过离散小波反变换得到:
二维DWT同样也可以通过使用数字滤波器和下取样器来实现,利用可分离的二维尺度函数和小波函数,我们可以简单的取出f(x,y)的行的一维FWT,然后,取结果列的一维FWT。
分析滤波器组
综合滤波器组的重建算法类似一维情况,情况图如下:
利用python编码获得二维小波作用下图片的近似图像、纵向边缘特征、横向边缘特征、对角特征
img = cv2.imread('D:\\picture\\tupian.jpg',0) # 图像读取
img = np.array(img) #
LLY,(LHY,HLY,HHY) = pywt.dwt2(img, 'haar') # 观察图像的近似图像、纵向边缘特征(、横向边缘特征、对角特征
plt.figure(figsize=(50, 10))
plt.subplot(2, 2, 1)
plt.imshow(LLY, cmap="Greys")
plt.subplot(2, 2, 2)
plt.imshow(LHY, cmap="Greys")
plt.subplot(2, 2, 3)
plt.imshow(HLY, cmap="Greys")
plt.subplot(2, 2, 4)
plt.imshow(HHY, cmap="Greys")
plt.show()