数字图像处理 第七章小波和多分辨率处理

文章目录

  • 数字图像处理 第七章小波和多分辨率处理
  • 引言
  • 7.1背景
    • 7.1.1图像金字塔
    • 7.1.2子带编码
    • 7.1.3哈尔变换
  • 7.2小波
    • 7.2.1连续小波
    • 7.2.2离散小波

数字图像处理 第七章小波和多分辨率处理

引言

尽管20世纪50年代末起傅里叶变换就一直是基于变换的的图像处理的基石,但近年来出现了一种新的名为小波变换的变换使得压缩、传输和分析图像变得更加容易。与为正弦函数的傅里叶变换不同, 小波变换基于一些小型波,称为小波,它具有变化的频率和有限的持续时间。本章将从多分辨率的角度来审视基于小波的变换。

7.1背景

我们应该先了解一下两个概念,小波与多分辨率。
小波是指小区域、长度有限、均值为0的波形。小是指信号具有衰减性,波指信号具有波动性。而分辨率理解为图像的像素点个数,也就是图片的大小,当我们观察图像时,通常我们看到的是相似的纹理和灰度级连成的区域,它们相结合形成了物体。如果物体的尺寸较小或对比度较低,这时我们会以较高的分辨率来处理它们;如果物体的尺寸较大或对比度较高,则只要求粗略的观察就足够了。如果较小物体和较大物体一或 对比度较低和对比度较高的物体同时存在,上面那种情况下以不同的分辨率对它们进研究将具有优势。

7.1.1图像金字塔

图像金子塔是一种以多个分辨率来表示图像的一种有效且概念简单的结构,最初应用于机器视觉和图像压缩,一个图像金字塔是一系列以金字塔形状排列的、分辨率逐步降低的图像结合。
数字图像处理 第七章小波和多分辨率处理_第1张图片

图像金字塔可以通过梯次向下采样获得,直到达到某个终止条件才停止采样,在向下采样中,层级越高,则图像越小,分辨率越低。

我们可以利用opencv中的两个函数来创建图像金字塔,如pyrDown()和pryUp()。pyrDow()先对图像进行高斯平滑,然后再进行降采样(将图像尺寸行和列方向缩减一半);pryUp()先对图像进行升采样,然后再进行高斯平滑。

进行实验所用代码如下:

img = cv2.imread(" E:\\picture\\tupian.png ")
img = img[:, :, [2, 1, 0]]

lower = cv2.pyrDown(img)
lower1 = cv2.pyrDown(lower)
higher = cv2.pyrUp(lower1)
higher1 = cv2.pyrUp(higher)

plt.figure(dpi = 180)

plt.subplot(151)
plt.imshow(img)
plt.title(str(img.shape[0:2]))

plt.subplot(152)
plt.imshow(lower)
plt.title(str(lower.shape[0:2]))

plt.subplot(153)
plt.imshow(lower1)
plt.title(str(lower1.shape[0:2]))

plt.subplot(154)
plt.imshow(higher)
plt.title(str(higher.shape[0:2]))

plt.subplot(155)
plt.imshow(higher1)
plt.title(str(higher1.shape[0:2]))

plt.tight_layout()
plt.show()

7.1.2子带编码

另外一种与多分辨率分析相关的重要图像技术是子带编码。在子带编码中,一幅图像被分解为一组频带受限的分量,称为子带。因为分解和重建是借助于数字滤波器实现的,所以我们的讨论从数字信号滤波开始。
数字图像处理 第七章小波和多分辨率处理_第2张图片
我们可以看到,这是一个数字滤波器,它是由三个基本部件组成,即延迟单元、乘法器和加法器。
所需用的延时序列为
数字图像处理 第七章小波和多分辨率处理_第3张图片
输入序列与延时序列分别于常数相乘并求和就可以产生滤波后的输出序列。

7.1.3哈尔变换

第三个也是最后一个与多分辨率分析紧密联系在一起的是哈尔变换。它主要的作用是其基函数是已知最古老的也是最简单的正交小波。
可以用矩阵来表示
T=HFH的转置,F是一个NN的图像矩阵,H是一个NN的哈尔变换矩阵,T是一个N*N的变换结果。

这样我们可以简单的写出一个二维的哈尔矩阵
数字图像处理 第七章小波和多分辨率处理_第4张图片
当然当N=4时,我们可以得到四维的矩阵,如图所示
数字图像处理 第七章小波和多分辨率处理_第5张图片

可以利用代码实现图像分解的过程,代码以及结果如下

img = cv2.imread('E:\\picture\\tupian.png', 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()

数字图像处理 第七章小波和多分辨率处理_第6张图片

实现将原图分解为水平、垂直、对角线特征。

7.2小波

我们可以从现有的定义有,一般的小波级数展开、离散小波变换和连续小波变换。他们可以对应在傅里叶域中的对应形式分别是傅里叶级数展开、离散傅里叶变换、积分傅里叶变换。且小波变换是是一种新的变换分析方法,它继承和发展了短时傅立叶变换局部化的思想,同时又克服了窗口大小不随频率变化等缺点,能够提供一个随频率改变的“时间-频率”窗口,是进行信号时频分析和处理的理想工具。

7.2.1连续小波

连续小波变换将一个连续函数变换成两个连续变量(平移和尺度)的高赘余度函数。连续的平方可积函数f(x)的连续小波变换与实数值小波的关系定义为:
数字图像处理 第七章小波和多分辨率处理_第7张图片

其中
数字图像处理 第七章小波和多分辨率处理_第8张图片

7.2.2离散小波

对于连续小波而言,尺度a、时间t和与时间有关的偏移量τ都是连续的。如果利用计算机计算,就必须对它们进行离散化处理,得到离散小波变换。就如傅里叶级数展开一样,当待展开的函数是离散的时,得到的系数就称为离散小波变换(DWT)其系数为:
数字图像处理 第七章小波和多分辨率处理_第9张图片

这样我们就可以从一维扩展到二维函数。在二维情况下,需要一个二维尺度函数和三个三维小波。但是他每个都是两个一维函数的乘积。
这些小波度量函数的变化——图像的灰度变化——沿着不同方向的变化,比如水平边缘和垂直边缘。
下面用代码获得二维小波作用下图片的近似图像、纵向、横向、对角特征。

代码如下

import numpy as np
import pywt
import cv2
import matplotlib.pyplot as plt

img = cv2.imread('E:\\picture\\tupian.png',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()

实验结果如下
数字图像处理 第七章小波和多分辨率处理_第10张图片

你可能感兴趣的:(计算机视觉,opencv,python)