在小波降噪尺度上(分三次分解)设置阈值降噪,然后重构图片,同时显示原图片和降噪图片的差异

本文介绍了去噪方法,特别是小波基在信号处理中的应用,包括小波分解、重构原理,以及如何通过阈值处理去除噪声。讨论了不同小波函数的特点和选择,以及在图像处理中的具体应用,如阈值设置逻辑和自适应阈值方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

去噪和小波基都是在信号处理中常用的方法。

  1. 目标:去噪和小波基都旨在从信号中去除噪音或不需要的成分,以提取出所需的信息。

  2. 原理:去噪方法通过在时域或频域对信号进行滤波,从而抑制或减小噪音的影响。小波基是一组基函数,可以将信号分解成不同的频率和时间分量,通过选择适当的小波基函数,可以更好地表示和分析信号。

  3. 分解与重构:去噪和小波基都涉及信号的分解和重构过程。去噪方法通常通过将信号分解成不同频率分量,并根据噪声的特性抑制或滤除某些频率分量。小波基方法利用小波基函数将信号分解成不同尺度的频率分量,并通过选择性保留或丢弃某些分量来进行信号处理。

  4. 适用性:去噪方法更适合于对噪声的特性有一定了解,并且可以通过某些统计方法进行建模的情况。小波基方法对信号的结构信息和频率分布有较高的要求,适用于分析具有非平稳性质或局部特征的信号。

尽管去噪和小波基在某些方面有相似之处,但它们也有不同的应用场景和适用性。在实际应用中,通常需要根据具体问题的需求和信号特性选择合适的方法。

代码如下:

import numpy as np
import cv2
import pywt

# 1. 读取原图(彩色图像)
original_image = cv2.imread('zss.jpg')

# 将彩色图像转换为YUV色彩空间,以便独立处理亮度(Y)通道
yuv_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2YUV)

# 对亮度通道进行小波降噪
wavelet_name = 'db1'
level = 3
y_channel = yuv_image[:,:,0]
coeffs_y = pywt.wavedec2(y_channel, wavelet=wavelet_name, level=level)

# 定义一个包含各个分解级别阈值的列表(您可以在这里调整阈值)
thresholds = [10, 40, 30] # 这里的阈值仅为示例,实际应用时根据需要调整

# 对每个尺度上的细节系数应用相应的阈值
coeffs_thresh_y = list(coeffs_y)
for i in range(level):
coeffs_thresh_y[-(i+1)] = [pywt.threshold(arr, thresholds[i], 'soft') for arr in coeffs_thresh_y[-(i+1)]]
denoised_y_channel = pywt.waverec2(coeffs_thresh_y, wavelet=wavelet_name)

# 将降噪后的亮度通道替换回YUV图像中
denoised_yuv_image = yuv_image.copy()
denoised_yuv_image[:,:,0] = denoised_y_channel

# 转换回BGR色彩空间
denoised_bgr_image = cv2.cvtColor(denoised_yuv_image, cv2.COLOR_YUV2BGR)

# 计算并保存原始图像和降噪后图像的差异
difference_image = abs(original_image.astype(np.float64) - denoised_bgr_image.astype(np.float64))
difference_image = cv2.convertScaleAbs(difference_image) # 将差异图像转换为8位整型便于显示和保存

# 5. 将降噪后的图片、原始图片以及差异图片保存到本地
cv2.imwrite('denoised_image.jpg', denoised_bgr_image)
cv2.imwrite('original_image.jpg', original_image)
cv2.imwrite('difference_image.jpg', difference_image)

# 加载已保存的图像(这里加载不是必须的,因为我们已经有内存中的变量,但此处为了与原逻辑保持一致)
original_image = cv2.imread('original_image.jpg')
denoised_image = cv2.imread('denoised_image.jpg')
difference_image = cv2.imread('difference_image.jpg')

# 确定新图像的宽度(假设我们希望并排显示)
new_width = original_image.shape[1] * 2 + difference_image.shape[1]

# 创建一个空白的新图像用于存放合并后的图片
combined_image = np.zeros((max(original_image.shape[0], denoised_image.shape[0], difference_image.shape[0]), new_width, 3), dtype=original_image.dtype)

# 将原图、降噪后的图片和差异图片复制到新图像上
combined_image[:original_image.shape[0], :original_image.shape[1]] = original_image
combined_image[:denoised_image.shape[0], original_image.shape[1]:original_image.shape[1]+denoised_image.shape[1]] = denoised_image
combined_image[:difference_image.shape[0], original_image.shape[1]+denoised_image.shape[1]:] = difference_image

# 设置窗口大小并显示图片
cv2.namedWindow("Original vs Denoised vs Difference", cv2.WINDOW_NORMAL)
cv2.resizeWindow("Original vs Denoised vs Difference", 800, 600) 

# 显示组合图像
cv2.imshow("Original vs Denoised vs Difference", combined_image)

# 添加标题
cv2.putText(combined_image, "Original Image", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2)
cv2.putText(combined_image, "Denoised Image", (original_image.shape[1]+10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2)
cv2.putText(combined_image, "Difference Image", (original_image.shape[1] + denoised_image.shape[1]+10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2)

# 更新显示内容
cv2.imshow("Original vs Denoised vs Difference", combined_image)

# 按任意键关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

高频低尺度降噪较大时的差异图片。在这里插入图片描述一些相关信息:

1、不同小波函数的作用:

小波函数在信号处理、图像处理等领域有着广泛的应用,不同种类的小波函数有不同的特性,主要体现在以下几点:

  1. 基函数的局部性:•不同小波函数能够提供不同程度的空间和频率局部化。例如,Haar小波具有很好的空间定位能力,但其频率分辨率较低;而Daubechies小波(如Db2, Db4等)则能在保持一定的空间定位的同时,提高频率解析度。
  2. 紧支性:•紧支撑小波函数意味着它们在有限区间内非零,并迅速衰减到零。这样可以在有限范围内分析信号细节,而不像傅里叶变换那样需要在整个时间或空间域上考虑全局周期性。
  3. 多分辨率分析:•小波函数通过尺度变化可以实现多尺度分析,这对于捕捉信号中的不同频段信息特别有用。比如Coiflet小波、Symlet小波等,在进行多尺度分解时,可以更精确地表示复杂信号结构。
  4. 方向选择性:•有些小波如Morlet小波、Cohen-Daubechies-Feauveau (CDF) 9/7小波(用于JPEG2000压缩标准)等具有更好的方向选择性,对于图像中边缘和其他定向特征有良好的表现。
  5. 稀疏表示:•某些小波如Curvelets、Shearlets等对图像的奇异性(如尖锐边缘)有优异的稀疏表示能力,这有助于数据压缩和噪声抑制。
    总结来说,不同小波函数的选择取决于具体应用的需求,包括但不限于图像压缩、去噪、边缘检测、图像融合、图像分割等任务。每种小波都有其独特的时频特性,适用于不同的场景。

2、什么是小波的阈值:

在小波降噪过程中,这里的阈值指的是对小波系数进行处理时使用的阈值。
在小波分析中,原始信号被分解成不同频率和方向的小波系数,其中一部分系数可能主要由噪声贡献。
为了去除噪声并保留图像的结构信息,在重构信号之前,可以对这些小波系数施加一个阈值处理。thresholds = [10, 40, 30] 这个列表中的阈值分别对应各个分解级别的细节系数。
例如:
•对于第一层(最低频)的细节系数,使用阈值 10 来判断哪些系数是“信号”成分(大于阈值),哪些是“噪声”成分(小于阈值)。
大于阈值的系数保留不变或仅作轻微调整(根据所用阈值函数,这里使用的是软阈值函数),而小于阈值的系数则设为零或接近零的值。
•同理,第二层和第三层的细节系数将分别应用阈值 40 和 30 进行类似处理。
通过设置不同的阈值,可以灵活控制在不同尺度上对噪声的抑制程度,从而在保持图像细节的同时达到降噪效果。

3、阈值设置逻辑:

在小波降噪中,通常情况下,随着尺度的提高(即高频部分),阈值应该设置得越大。这是因为:

  1. 频率特性:•小波分解过程中,低频系数主要包含图像的主要结构和轮廓信息,这部分需要尽量保留;而高频系数包含了图像的细节和噪声,噪声成分相对较高。
  2. 噪声分布:•实际噪声通常在高频区域更为显著,也就是说,高频的小波系数更可能被噪声污染。为了去除噪声,我们需要设定较高的阈值来滤除这些波动较大的高频分量。
  3. 保真度与平滑度:•较大的阈值有助于消除高频噪声,但过度的大阈值可能导致过多的边缘和细节丢失。因此,在实际应用中,要根据具体情况权衡信噪比提升与图像细节保留之间的关系,合理设置不同尺度下的阈值。
  4. 自适应阈值方法:•在某些自适应阈值算法中,如SureShrink、VisuShrink等,会依据小波系数的统计特性自动调整各个尺度的阈值,通常在高频部分采用相对较大阈值以降低噪声的影响。
    总之,在小波降噪中,随着尺度增加,为了更好地抑制噪声并保护图像的主体结构和重要细节,通常选择增大阈值,但这并非绝对规律,具体的阈值设置应根据实际应用场景和需求进行细致分析和适当调整。

4、小波处理中的全部阈值

在数字图像的小波降噪中,除了上述提到的软阈值(soft thresholding)之外,还有其他类型的阈值方法,这些方法依据不同的准则来选择和处理小波系数:

  1. 硬阈值 (Hard Thresholding): 这是最简单的一种阈值方法。对于每一个小波系数,如果其绝对值大于阈值,则保留原始值;否则,将其置为零。数学表达式为:•如果 |w_i| >
    T,则 w_i’ = w_i•否则,w_i’ = 0
  2. 半软阈值 (VisuShrink/Hard Thresholding with Shift): 它是在硬阈值基础上的一个变种,当系数绝对值小于阈值时,不是简单地置零,而是减去阈值的符号(类似于软阈值的处理方式)。这种阈值通常用于
    VisuShrink 方法。
  3. 自适应阈值: 阈值不是固定的,而是根据每个子带或每个位置的小波系数分布特性进行动态调整。比如基于局部噪声估计、Bayesian 等理论框架计算阈值。
  4. 全局阈值与局部阈值结合: 全局阈值适用于整个图像所有尺度上的小波系数,而局部阈值则是针对各个分解层或者每个像素邻域内的小波系数设定不同的阈值。
  5. SureShrink 和 MinimaxiShrink: 这些是更复杂的统计方法,它们利用了小波系数的概率分布模型,计算出最优阈值以达到最小均方误差或最大化信噪比的目的。
  6. 其他非线性阈值函数: 除了以上标准的阈值函数外,还可以设计和使用其他的非线性阈值函数,只要能够有效区分信号和噪声即可。在实际应用中,选择哪种阈值方法取决于具体应用场景以及对图像内容保真度、降噪程度的需求。

5、噪声类型和建议的小波函数

在数字图像处理中,小波变换由于其多分辨率和时频局部化特性,在去除不同类型噪声方面表现出色。 不同类型的噪声可以对应不同的小波去噪策略:

  1. 高斯白噪声:•高斯噪声通常具有均匀的能量分布,可采用软阈值或硬阈值的小波去噪方法。常见的小波如Daubechies小波系列(如Db4、Db6等)因其良好的正交性和紧支性而被广泛使用。
  2. 椒盐噪声(Salt-and-Pepper Noise):•椒盐噪声表现为随机的黑点和白点。对于这种突变性质的噪声,可以选择应用基于小波域的检测与修复技术,或者结合形态学操作进行预处理后再进行小波去噪。
  3. 泊松噪声:•泊松噪声常见于低光成像和图像采集过程中,它与信号强度相关。针对这类噪声,可以在小波域内运用适合泊松分布特性的统计模型进行去噪,例如考虑噪声在每个尺度上的统计特性来调整阈值。
  4. 块状噪声 或 斑点噪声:•这类噪声常出现在有固定模式重复或间歇性出现的大面积变化区域。选择方向敏感性较强且能较好捕捉块状结构的小波函数,比如离散二进制小波(DBWavelets)、曲线小波(Curvelets)或者剪切波小波(Shearlets),可以帮助更好地分离出噪声部分。
  5. 混合噪声:•实际图像往往包含多种噪声类型,这时可以综合运用各种去噪方法,例如结合小波变换和自适应阈值技术,或者采用非线性滤波器配合小波变换以提高去噪性能。
  6. 在具体实施过程中,根据噪声特征选择合适的小波基,并通过合适的阈值选取策略(如SureShrink、VisuShrink、Bayesian等)对小波系数进行修剪,从而实现噪声的有效抑制和图像细节的保持。

6、图像处理中的小波尺度分解和高低频的关系

在图像处理中,小波树并不直接等同于通常所说的小波变换的高频和低频系数描述方式,但它们都是基于小波分析的概念,并且都利用了小波变换对信号或图像进行多尺度分析的特点。
小波变换与高低频关系: 在图像处理中,通过离散小波变换(Discrete Wavelet Transform, DWT),图像可以被分解为不同频率成分。
每层DWT将图像数据分解成四个子带:
•LLL (Low-Low-Low) 或 LL: 低频部分,包含图像的大尺度结构、平滑区域及整体轮廓信息。
•LHH, LHLL, HLH, HLLH, etc.: 中间频率部分,混合了较低和较高频率特征,反映了图像中稍微复杂一些的纹理细节。
•HHH (High-High-High): 高频部分,包含了图像中的边缘、细节和噪声等快速变化的信息。
小波树概念: 小波树是一种抽象的数据结构,用来直观地表示经过多级小波变换后得到的系数层次结构。
在该结构中,根节点通常对应于最低频率的小波系数(即图像的全局概貌),而随着向叶子节点方向延伸,所对应的系数则越来越趋向于高频细节。
在小波树中,每一层节点的左分支通常代表更低频率的系数,右分支则倾向于更高频率的系数。
所以,在小波树中,越靠近根部的节点,其对应的系数往往具有更低的频率,存储的是图像的整体或粗略信息;而越远离根部、接近树叶的节点,则对应更高频率的系数,这些系数携带了图像的局部细节和高频特征信息。
在实际应用如图像融合、压缩、去噪等过程中,可以根据需要对小波树的不同层次或节点的系数采用不同的处理策略,比如针对低频系数着重保持图像的基本结构,而对于高频系数可能更多地考虑去除噪声或进行细节融合。

底下这篇文章可以看出小波分解时各个尺度下高频细节重构的图,平常分析图片时可以参考。如果有对比图片,使用此程序进行尺度分解来进行效果差异的区分。

小波尺度分解后,查看每个尺度上高频细节重构的图
https://blog.csdn.net/weixin_42424832/article/details/135997153

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值