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

文章目录

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

写在前面

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

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

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

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

1 多分辨率处理

1.1 图像金字塔

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

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

  • pyrDown()

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

  • pryUp()

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

代码如下:

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的回归。但是这样做有一个明显的缺陷,即小物体本身具有的像素信息较少,在下采样的过程中极易被丢失,所以就有了利用图像金字塔的方式进行多尺度变化增强。然后进一步就有了特征金字塔的网络结构,能在增加极小的计算量的情况下,处理好物体检测中的多尺度变化问题。

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

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

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

2 小波

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

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

2.1 连续小波变换

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

将任意L2(R)空间中的函数f(t)在小波基下展开,称这种展开为函数f(t)的连续小波变换(CWT)。其表达式为:
WTf(a,τ)=<f(t),ψa,r(t)>=1a∫Rf(t)ψ∗(t−τa)dtW T_{f}(a, \tau)=<f(t), \psi_{a, r}(t)>=\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​1​∫R​f(t)ψ∗(at−τ​)dt

2.2 离散小波变换

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

3 python×小波

3.1 python小波变换

pywt.dwt2()

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

代码如下:

import numpy as np
import pywt
import cv2
import matplotlib.pyplot as pltimg = 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小波去噪

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

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

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

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

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

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

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

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

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

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

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

    目录 引言: 一.背景 1.1 图像金字塔 1.2 子带编码 1.3 哈尔变换 二.多分辨率展开 2.1 级数展开 2.2 尺度函数 2.3 小波函数 三.一维小波变换 3.1 小波级数展开 3.2 ...

  3. 数字图像处理----第七章

    数字图像处理----第七章 7.1点.线和边缘检测` 7.1.1 点检测 嵌在图像的恒定或近似恒定区域中的孤立点的检测,原理上非常简单.使用图7.1中的模板时,若|R≥T(T是一个非负阈值),则我们说 ...

  4. 数字图像处理知识点梳理——第七章 小波和多分辨率处理

    文章目录 前言 1 背景 2 多分辨率展开 函数的伸缩和平移 级数展开 尺度函数 小波函数 3 一维小波变换 离散小波变换 连续小波变换 4 快速小波变换 5 二维小波变换 6 小波变换和Fourie ...

  5. 数字图像处理——第七章(小波变换和多分辨率处理)

    小波变换和小波包变换 一.基础 1.1 图像金字塔 1.2 子带编码 1.3 哈尔变换(Haar) 二.多分辨率展开 2.1 级数展开 2.2 尺度函数 2.3 小波函数 三.小波变换 3.1 一维小 ...

  6. 数字图像处理——第五章 图像复原与重建

    数字图像处理--第五章 图像复原与重建 文章目录 数字图像处理--第五章 图像复原与重建 写在前面 1 图像退化/复原过程的模型 2 噪声模型 2.1 高斯噪声 2.2 椒盐噪声 3 仅有噪声的复原- ...

  7. 数字图像处理第五章——几何变换与图像配准

    数字图像处理第五章 数字图像处理---几何变换与图像配准 (一)点变换 (二)仿射变换 (三)投影变换 (四)应用于图像的几何变换 (五)MATLAB 中的图像坐标系统 5.1 输出图像位置 5.2 ...

  8. 数字图像处理第四章——图像复原(下)

    数字图像处理第四章 数字图像处理---图像复原 (三)仅有噪声的复原--空间滤波 3.1 空间噪声滤波器 3.2 自适应空间滤波 (四)退化函数建模 (五)维纳滤波 (六)约束的最小二乘法(规则化)滤 ...

  9. 数字图像处理——第六章 彩色图像处理

    数字图像处理--第六章 彩色图像处理 文章目录 数字图像处理--第六章 彩色图像处理 1 彩色模型 1.1 RGB彩色模型 1.2 CMY 和CMYK彩色模型 1.3 HSI彩色模型 2 伪彩色图像处 ...

最新文章

  1. Java互联网架构 百度云_java互联网架构师
  2. ML之MLiR:利用多元线性回归法,从大量数据(csv文件)中提取五个因变量(输入运输任务总里程数、运输次数、三种不同的车型,预测需要花费的小时数)来预测一个自变量
  3. yum 安装jdk_03Centos安装JDK
  4. 关于NFS服务器的原理总结和mount挂载
  5. 前端分页功能的实现以及原理
  6. opensource项目_Best of Opensource.com:年度最佳20篇文章
  7. kali 安装volatility_电子取证技术之实战Volatility工具
  8. PhysioToolkit 软件目录
  9. anaconda升级sklearn版本
  10. c++ 中引用()的用法和应用实例
  11. 美团外卖返利小程序-饿了么外卖返利公众号系统 – 程序侠
  12. 蓝屏出现STOP:0X00000077是什么原因造成
  13. 时分秒表达式java_java 时分秒正则表达式
  14. 漫谈中国数字电视标准的诞生
  15. [学习笔记]ARM_DSP库——基础函数(相反数、偏移、移位、减法、比例因子)
  16. 966. 元音拼写检查器
  17. 10个SaaS的常见问题解答告诉你SaaS是什么
  18. CentOS6-yun install wget失败
  19. Koch Curve
  20. FIREFOX打不开GMAIL问题解决

热门文章

  1. 微信小程序获取手机系统信息
  2. JLOI2011 飞行路线
  3. 微信小程序开发工具的基本应用
  4. 1137 - Sin your life sin公式 + 枚举
  5. struts2笔记01-环境搭建
  6. sqlserver trigger
  7. 音频编辑大师 3.3 注冊名 注冊码
  8. 一起学WP7 XNA游戏开发(八. 让3d model动起来)
  9. [C++对象模型][6]sizeof与对象内存布局
  10. rb c语言,C语言,RB和RBT什么区别啊???这里的typedef 什么作用???