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

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

文章目录

  • 数字图像处理——第七章 小波和多分辨率处理
    • 写在前面
    • 1 多分辨率处理
      • 1.1 图像金字塔
      • 1.2 多尺度和多分辨率的区别
    • 2 小波
      • 2.1 连续小波变换
      • 2.2 离散小波变换
    • 3 python×小波
      • 3.1 python小波变换
      • 3.2 python小波去噪

写在前面

先理解下两个概念,小波和多分辨率。

小波必然不是这个小波

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

小波是指小区域、长度有限、均值为0的波形。小是指信号具有衰减性,波指信号具有波动性。

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

小波变换类似于傅里叶变换,都是把函数用一组正交基函数展开,选取不同的基函数给出不同的变换。例如傅里叶变换,选择的是sin和cos;而小波变换,选取基函数的方式更加灵活,可以根据要处理的数据的特点(比如某一段上信息量比较多),在不同尺度上采用不同的频宽来对已知信号进行分解,从而尽可能保留多一点信息,同时又避免了原始傅里叶变换的大计算量。

分辨率通俗理解为图像的像素点个数,也就是图片的大小,例如1920×1080。当我们观察图像时,通常我们看到的是相似的纹理和灰度级连成的区域,它们相结合形成了物体。如果物体的尺寸较小或对比度较低,那么我们通常以较高的分辨率来研究它们;如果物体的尺寸较大或对比度较高,则只要求粗略的观察就足够了。如果较小物体和较大物体一或 对比度较低和对比度较高的物体同时存在,以不同的分辨率对它们进研究将具有优势。

1 多分辨率处理

1.1 图像金字塔

以多个分辨率来表示图像的一种有效且概念简单的结构是图像金字塔图像金字塔最初用于机器视觉和图像压缩,一个图像金字是一系列以金字塔形状排列的、分辨率逐步降低的图像集合。图像金字塔可以通过梯次向下采样获得,直到达到某个终止条件才停止采样,在向下采样中,层级越高,则图像越小,分辨率越低。

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

OpenCV实现了用于创建图像金字塔的两个函数pyrDown()和pryUp()

  • pyrDown()

    先对图像进行高斯平滑,然后再进行降采样(将图像尺寸行和列方向缩减一半)

  • pryUp()

    先对图像进行升采样(将图像尺寸行和列方向增大一倍),然后再进行高斯平滑

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

代码如下:

import cv2
import matplotlib.pyplot as plt
import numpy as np 
img = cv2.imread("  ")
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()

在早些年的目标检测中,很多网络都利用单个高层特征,比如说Faster R-CNN利用下采样四倍的卷积层Conv4,进行后续的物体的分类和bounding box的回归。但是这样做有一个明显的缺陷,即小物体本身具有的像素信息较少,在下采样的过程中极易被丢失,所以就有了利用图像金字塔的方式进行多尺度变化增强。然后进一步就有了特征金字塔的网络结构,能在增加极小的计算量的情况下,处理好物体检测中的多尺度变化问题。

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

1.2 多尺度和多分辨率的区别

这个问题还没研究透彻,一时没有很好的说法,之后会继续添加新的理解。

多分辨率就是上述的图像金字塔。图像金字塔我理解成:解决多尺度问题?

2 小波

φ a , b ( t ) = 1 a φ ( t − b a ) \varphi_{a, b}(t)=\frac{1}{\sqrt{a}} \varphi\left(\frac{t-b}{a}\right) φa,b(t)=a 1φ(atb)

其中,a被称为缩放参数,b被称为移动或位置参数。从公式可以看出,小波主要进行缩放和平移两个操作。缩放:压缩或伸展基本小波,缩放系数越小,小波越窄。
平移:小波的延迟或超前。
小波的缩放因子越小,小波越窄,信号的频率越高,度量信号的细节变化。
小波的缩放因子越大,小波越宽,信号的频率越低,度量信号的粗糙程度。

2.1 连续小波变换

小波变换是一种新的变换分析方法,它继承和发展了短时傅立叶变换局部化的思想,同时又克服了窗口大小不随频率变化等缺点,能够提供一个随频率改变的“时间-频率”窗口,是进行信号时频分析和处理的理想工具。与傅里叶变换不同,小波变换的主要要素是不同缩放和不同位置的小波。通过缩放母小波的宽度来获得信号的频率信息,通过平移母小波的位置来获得信号的时间信息。

将任意L2(R)空间中的函数f(t)在小波基下展开,称这种展开为函数f(t)的连续小波变换(CWT)。其表达式为:
W T f ( a , τ ) = < f ( t ) , ψ a , r ( t ) > = 1 a ∫ R f ( t ) ψ ∗ ( t − τ a ) d t W T_{f}(a, \tau)==\frac{1}{\sqrt{a}} \int_{R} f(t) \psi^{*}\left(\frac{t-\tau}{a}\right) d t WTf(a,τ)=<f(t),ψa,r(t)>=a 1Rf(t)ψ(atτ)dt

2.2 离散小波变换

对于连续小波而言,尺度a、时间t和与时间有关的偏移量τ都是连续的。如果利用计算机计算,就必须对它们进行离散化处理,得到离散小波变换。为了减小小波变换系数的冗余度,我们将小波基函数:
ψ a , τ ( t ) = 1 a ψ ( t − τ a ) \psi_{a, \tau}(t)=\frac{1}{\sqrt{a}} \psi\left(\frac{t-\tau}{a}\right) ψa,τ(t)=a 1ψ(atτ)
的a、τ限定在一些离散的点上取值。然后进行尺度的离散化和位移的离散化。离散小波变换的定义为:
W T f ( a 0 j , k τ 0 ) = ∫ f ( t ) ψ a 0 j , k 0 ∗ ( t ) d t , j = 0 , 1 , 2 , … , k ∈ Z W T_{f}\left(a_{0}^{j}, k \tau_{0}\right)=\int f(t) \psi_{a_{0}^{j}, k_{0}}^{*}(t) d t, j=0,1,2, \ldots, k \in Z WTf(a0j,kτ0)=f(t)ψa0j,k0(t)dt,j=0,1,2,,kZ

3 python×小波

3.1 python小波变换

pywt.dwt2()

  • 二维小波变换(一维和n维类似):单层变换
  • return:(cA, (cH, cV, cD))要注意返回的值,分别为低频分量,水平高频,垂直高频,对角线高频。高频的值包含在一个tuple中。

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

代码如下:

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

img = cv2.imread("   ")
img = cv2.resize(img, (448, 448))
# 将多通道图像变为单通道图像
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY).astype(np.float32)

plt.figure('二维小波一级变换')
coeffs = pywt.dwt2(img, 'haar')
cA, (cH, cV, cD) = coeffs

# 将各个子图进行拼接,最后得到一张图
AH = np.concatenate([cA, cH], axis=1)
VD = np.concatenate([cV, cD], axis=1)
img = np.concatenate([AH, VD], axis=0)

# 显示为灰度图
plt.imshow(img,'gray')
plt.title('result')
plt.show()

在拼接子图之前,应该先对各个子图进行处理。未处理的情况下,因为高频部分的像素值极小甚至小于0,所以高频区域呈黑色。

3.2 python小波去噪

图像和噪声在经小波变换后具有不同的统计特性:图像本身的能量对应着幅值较大的小波系数,主要集中在低频部分;噪声能量则对应着幅值较小的小波系数,并分散在小波变换后的所有系数中。基于此可设置一个合适的阈值门限,认为大于该阈值的小波系数的主要成份为有用的信号,给予收缩后保留;小于该阈值的小波系数,主要成份为噪声,予以置零剔除;然后经过阈值函数映射得到估计系数;最后对估计系数进行逆变换,就可以实现去噪和重建。去噪时,通常认为低通系数含有大量的图像能量,一般不作处理,只对剩余三个高通部分进行处理。一次阈值去噪并不能完全去除噪声,还需要对未作处理的低频部分再次进行小波分解和阈值去噪,直到实际图像与估计图像的偏差达到最小值。但是,随着分解和去噪次数的增加,小波系数中的噪声能量越来越小,并且趋于分散,去噪的效果将逐渐降低。

目前,小波去噪的方法大概可以分为三大类:

第一类方法(小波变换模极大值去噪法)是利用小波变换模极大值原理去噪,即根据信号和噪声在小波变换各尺度上的不同传播特性,剔除由噪声产生的模极大值点,保留信号所对应的模极大值点,然后利用所余模极大值点重构小波系数,进而恢复信号;

第二类方法(小波系数相关性去噪法)是对含噪信号作小波变换之后,计算相邻尺度间小波系数的相关性,根据相关性的大小区别小波系数的类型,从而进行取舍,然后直接重构信号;

第三类方法(小波变换阈值去造法)是小波阈值去噪方法,该方法认为信号对应的小波系数包含有信号的重要信息,其幅值较大,但数目较少,而噪声对应的小波系数是一致分布的,个数较多,但幅值小。

小波系数相关性去噪法)是对含噪信号作小波变换之后,计算相邻尺度间小波系数的相关性,根据相关性的大小区别小波系数的类型,从而进行取舍,然后直接重构信号;

第三类方法(小波变换阈值去造法)是小波阈值去噪方法,该方法认为信号对应的小波系数包含有信号的重要信息,其幅值较大,但数目较少,而噪声对应的小波系数是一致分布的,个数较多,但幅值小。

你可能感兴趣的:(数字图像处理,python,机器学习,计算机视觉,深度学习,opencv)