实施 DWT

信息处理 离散信号 Python 转换 载重吨
2022-02-13 16:50:19

我的任务是实现图像压缩的 5/3 CDF 变换。

鉴于低通和高通的脉冲响应为:

  • h1=[0.5,1,0.5](高通)
  • h2=[0.125,0.25,0.75,0.25,0.125](低通)

假设我想从计算图像的水平 1D DWT 开始。现在假设获得的行的像素是x[n],我们可以计算卷积y[n]=x[n]h[n]. 在卷积过程开始时,我们有部分重叠,然后是完全重叠,然后又是部分重叠。但是由于部分重叠的最后一部分,我们获得了额外的值。

对于高通滤波器,我最终得到了 2 个,而对于低通滤波器,我得到了 4 个。这意味着为行像素获得的值现在稍大一些。关于编程,我该怎么办?我要消除最后几个值吗y[n]将匹配x[n]在尺寸方面?

另一个非常重要的问题,无论如何我已经实现了这个,但我面临一个更大的问题。虽然我对 python 还很陌生,但我实现的算法非常非常慢。有没有比使用卷积更快的方法来实现这一点?我将避免在这里上传代码,因为我不确定我的问题是否适用于这个论坛或堆栈溢出。我会根据要求上传。

1个回答

一般来说,正确处理边界对于小波和滤波器组来说并非易事。对称/反对称滤波器(例如使用双正交小波作为 5/3 或 9/7)有一点帮助。然而,对于二元二次采样,在不过度使用多相矩阵和对称性的情况下,我建议采用以下程序:

  • 选择一个级别L对于迭代分解
  • 找到可以除以的图像大小2L
  • 将原始图像扩展到该大小(对称/反对称,或零填充,但不是最好的)
  • 使用零填充扩展最小的过滤器以匹配最长的过滤器大小,因此两个过滤器具有相同的填充长度。

更聪明/更稀疏的存在,但他们更多地参与。现在系数的数量应该是相似的。至于 Python,这更“与语言相关”,不适合 SE.DSP。在 1D 中,提升方案可以在基本操作方面将计算负担提高 2 倍。