离散(逆)Haar(2D)变换实现

信息处理 图像处理 matlab 离散信号 小波
2021-12-21 04:19:41

我对 Haar 变换及其逆变换的实现感兴趣,这样组合时总是会产生恒等运算。我的输入是给定范围内的离散序数 - 我需要 Haar 变换的输出是类似的离散序数(或定点)数。

我的工作基础是,如果我的输入信号包含范围内均匀分布的样本0..(2n1)而且,我的转换后的信号也是如此,那么原则上,我的原始信号应该由逆 haar 完美地再现。

我已经使用 GNU Octave 涉足了这个(Matlab)实现:

http://people.sc.fsu.edu/~jburkardt/m_src/haar/haar.html

它使用双精度值...迫使我使用 round() 来建立转换后数据的离散表示,以便将转换后的表示拟合到与原始数据相同的状态空间中。不出所料,我发现我需要再次使用 round() 来处理逆变换的输出。

对于大多数信号值来说,round(haar_2d_inverse(round(haar_2d(signal)))) 并不完全是恒等函数,这可能不足为奇……有趣的是,在重构信号 - 看起来大致对称(在少数重构样本上 +1 或 -1),这似乎几乎与 n 的选择无关。

我想知道是否有适用于序数样本的 haar_2d 和 haar_2d_inverse 的“更好”实现?异常是 Haar 实现本身的结果还是我在中间阶段应用 round() 的方式?如果是后者,我可以在四舍五入之前通过缩放来纠正这个问题吗?

1个回答

我认为在 2D Haar 中,2如果在两个方向上同时应用变换,则不需要。它的形式是a+b+c+d2,它只需要定点实现,Q 点是根据级别数选择的。我曾用它在 C 中为嵌入式系统实现 Haar,它可以在没有舍入/截断错误的情况下工作。

笔记:
我的代表不是 50 岁,所以发布作为答案。如果有人可以将它移到评论中,那就太好了。