【图像处理】小波变换(Wavelet Transform,WT)
文章目录一、小波变换的基本原理1、概述2、傅里叶变换与小波变换的关系3、连续小波变换与离散小波变换4、按小波基特性分类二、图像小波变换1、概述2、原理详解1图像小波 - 分解DWT2图像小波 - 重构Inverse DWT3、算法流程4、优势三、函数详解1pywt.dwt2()计算二维离散小波变换2D DWT2pywt.idwt2()计算二维离散小波逆变换2D IDWT四、项目实战在图像领域小波变换是一种重要的多尺度、多分辨率分析工具能够有效地提取图像的时频局部信息广泛应用于图像压缩、去噪、特征提取、纹理分析等多个方面。一、小波变换的基本原理1、概述小波变换Wavelet TransformWT是一种时频分析方法属于多分辨率分析Multi-Resolution Analysis, MRA工具。它通过一组由平移和伸缩操作生成的基函数小波函数对信号进行分解能够同时捕捉局部细节信息高频和整体轮廓信息低频。底层原理小波变换入门超清晰的思路图像处理小波变换2、傅里叶变换与小波变换的关系在信号处理领域傅里叶变换Fourier Transform, FT和小波变换Wavelet Transform, WT都是将信号从时间域映射到频域的重要工具但侧重点不同。3、连续小波变换与离散小波变换对比维度连续小波变换CWT离散小波变换DWT采样方式尺度和位移连续采样尺度和位移离散采样通常指数/整数序列冗余性高系数数量多低系数少计算高效计算复杂度高低适合快速算法时间-频率分辨率可在任意时间和频率精细分析多分辨率分析分辨率随尺度变化系数对齐不严格对齐原信号对齐原信号MODWT 除外能量守恒不严格正交 DWT 保证能量守恒适用对象时间序列信号分析图像和信号均可应用场景瞬态信号检测、精细特征分析、时频可视化如地震信号、心电图分析图像压缩JPEG2000、图像去噪、边缘检测、多尺度特征提取工业检测、医学影像优缺点优点分析精细可视化好缺点数据量大计算量高优点计算快、适合工业应用缺点分辨率固定局部细节可能不如 CWT 精细4、按小波基特性分类基函数的选择影响变换的平滑度、正交性和边缘保留能力。类型说明特点应用Haar小波最简单的阶跃型小波计算速度快正交性好但不平滑快速压缩、初学演示Daubechies小波dbN光滑、紧支撑、正交能量集中边缘保留效果好图像压缩、去噪SymletssymNDaubechies改进近似对称对称性更好减少相位失真图像去噪、边缘检测Coiflets高消失矩正交小波能量集中平滑性强特征提取、信号分析Biorthogonal小波双正交、对称可分离低频和高频滤波器边缘保留好JPEG2000压缩、去噪Morlet、Mexican Hat等连续小波主要用于连续小波变换类似高斯包络正弦波适合频率分析时频分析、瞬时频率检测二、图像小波变换1、概述图像小波变换是将二维图像信号进行多尺度、多方向分解的过程。它通过小波函数和尺度函数将图像分为低频Approximation和高频Detail部分以便针对不同频率进行分析、处理或压缩。低频子带LL图像的整体结构信息轮廓、亮度分布高频子带LH、HL、HH图像的细节信息水平、垂直、对角纹理或边缘2、原理详解1图像小波 - 分解DWT图像小波变换通常采用二维离散小波变换2D-DWT1行变换对图像的每一行做一维小波变换得到低频和高频行信号低频行 → 保留行方向的轮廓信息高频行 → 保留行方向的边缘/细节2列变换对行变换结果的每一列再做一维小波变换其将图像分解为四个子带LL低频-低频图像整体轮廓LH低频-高频水平边缘HL高频-低频垂直边缘HH高频-高频对角纹理与噪声这样一层分解完成后可以进一步对 LL 子带做二级分解实现多尺度分解。3多尺度分解Multi-level Decomposition每一层 LL 子带可以作为下一层输入继续分解多层分解能实现逐渐抽象的图像信息提取第一层 LL保留主要轮廓第二层 LL更粗略的整体结构高频子带依旧保留各层的边缘和纹理信息这种多层分解是图像压缩和去噪的基础。记忆口诀低频看轮廓高频看细节行列分两次四宫格呈现。子带包含信息常用处理方式LL低频图像整体轮廓压缩保留、增强对比度LH高频水平边缘阈值去噪、边缘增强HL高频垂直边缘阈值去噪、边缘增强HH高频对角纹理及噪声去噪、纹理分析阈值处理Thresholding常用于去噪保留幅值大的系数抑制噪声系数修改用于图像增强、压缩或特征提取2图像小波 - 重构Inverse DWT定义将处理后的子带通过逆小波变换组合回原图原理逆向执行列变换 → 行变换 → 恢复完整图像特点正交小波能量守恒重构无失真双正交小波重构精确同时可实现滤波器对称性减少边缘伪影3、算法流程选择小波基Haar、Daubechies、Symlet 等二维分解对行 → 列做一维小波变换多尺度迭代分解可选子带处理压缩、去噪、增强或提取特征图像重构逆小波变换恢复处理后图像4、优势多分辨率分析低频-高频分离边缘和纹理信息明确局部特征提取能有效保留局部结构信息去噪能力强通过阈值处理高频子带去除噪声压缩效率高高频系数可量化或舍弃实现图像压缩JPEG2000三、函数详解1pywt.dwt2()计算二维离散小波变换2D DWT############################################################################################# # 函数功能计算二维离散小波变换2D DWT将二维信号如图像分解为低频和高频分量。 # 函数说明pywt.dwt2(data, wavelet, modesymmetric, axes(-2, -1)) # 参数说明 # data输入二维数组通常是灰度图像或二维信号。 # wavelet小波基名称如 haar, db1, db2, coif1 等或小波对象。 # mode信号边界扩展模式用于处理边界效应。常见取值 # - symmetric默认 # - periodization # - constant、reflect、nearest、mirror # axes指定进行小波变换的轴默认对最后两个轴进行变换适合二维图像。 # 返回值 # 返回一个元组 (cA, (cH, cV, cD)) # cA低频近似系数Approximation coefficients。 # cH水平方向细节系数Horizontal detail coefficients。 # cV垂直方向细节系数Vertical detail coefficients。 # cD对角线方向细节系数Diagonal detail coefficients。 # 功能描述 # - 将二维信号分解为低频部分和三个高频细节部分有助于图像压缩、特征提取、去噪等。 # 示例 import pywt import numpy as np import matplotlib.pyplot as plt # 构造一个简单二维信号灰度图像 data np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]], dtypenp.float32) # 进行二维离散小波变换 cA, (cH, cV, cD) pywt.dwt2(data, wavelethaar) # 输出结果 print(低频近似系数 cA:\n, cA) print(水平细节系数 cH:\n, cH) print(垂直细节系数 cV:\n, cV) print(对角线细节系数 cD:\n, cD) #############################################################################################2pywt.idwt2()计算二维离散小波逆变换2D IDWT############################################################################################# # 函数功能计算二维离散小波逆变换2D Inverse Discrete Wavelet Transform, 2D IDWT将二维小波分解系数重建为原始二维信号如图像。 # 函数说明pywt.idwt2(coeffs, wavelet, modesymmetric) # 参数说明 # coeffs二维小波系数可以是 (cA, (cH, cV, cD)) 形式 # 其中 cA 为低频近似系数cH、cV、cD 为水平、垂直、对角线细节系数。 # wavelet小波基名称如 haar, db1, db2, coif1 等或小波对象需与 dwt2 使用的小波一致。 # mode信号边界扩展模式用于处理边界效应。常见取值 # - symmetric默认 # - periodization # - constant、reflect、nearest、mirror # 返回值 # 返回重建后的二维数组与原始输入二维信号形状相同。 # 功能描述 # - 将二维小波分解系数重建回原始信号用于图像重建、压缩恢复、去噪后重构等。 # 示例 import pywt import numpy as np import matplotlib.pyplot as plt # 构造一个简单二维信号灰度图像 data np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]], dtypenp.float32) # 进行二维离散小波变换 cA, (cH, cV, cD) pywt.dwt2(data, wavelethaar) # 使用逆变换重建原始信号 reconstructed pywt.idwt2((cA, (cH, cV, cD)), wavelethaar) # 输出重建结果 print(重建后的二维信号:\n, reconstructed) #############################################################################################四、项目实战pip install opencv-python pywavelets matplotlibimportcv2importpywtimportmatplotlib.pyplotasplt plt.rcParams[font.sans-serif][SimHei]# 用来正常显示中文标签plt.rcParams[axes.unicode_minus]False# 用来正常显示负号# 1. 读取图像灰度模式imgcv2.imread(../image/image.jpg,cv2.IMREAD_GRAYSCALE)imgcv2.imread(rD:\py\BC\brightness_51.2-1.tif,cv2.IMREAD_GRAYSCALE)# 替换为真实图像路径ifimgisNone:print(图像不存在)exit()# 2. 执行 2D 离散小波变换DWTcoeffs2pywt.dwt2(img,haar)# haar 是最简单的小波可以换成 db2, sym4 等LL,(LH,HL,HH)coeffs2# LL低频部分整体亮度与结构# LH水平高频垂直边缘# HL垂直高频水平边缘# HH对角高频纹理和噪声# 3. 显示分解结果titles[低频 LL,水平高频 LH,垂直高频 HL,对角高频 HH]fig,axesplt.subplots(1,4,figsize(10,4))fori,ainenumerate([LL,LH,HL,HH]):axes[i].imshow(a,cmapgray)axes[i].set_title(titles[i])axes[i].axis(off)plt.tight_layout()plt.show()#################################################################################### 4. 将分解结果重新组合成图像重构reconstructed_imgpywt.idwt2(coeffs2,haar)# 5. 显示原图与重构图plt.figure(figsize(10,4))plt.subplot(1,2,1),plt.imshow(img,cmapgray),plt.title(原图),plt.axis(off)plt.subplot(1,2,2),plt.imshow(reconstructed_img,cmapgray),plt.title(小波重构图),plt.axis(off)plt.tight_layout()plt.show()