我正在根据 Mallat 的书实现一个非常基本的正向和反向 DWT。没有什么花哨的、简单低效的 matlab 代码(概念证明比运行时更重要,所以我不专注于优化)。它几乎可以工作。我在顶部和左侧边缘出现失真。我将发布一些 lichtenstein 的图片的链接(需要 10 分才能发布)以展示这种行为。
http://postimg.org/image/igy8cv7hn/
从上到下:
* 5 次迭代后。
* 经过一些拆包迭代后,您可以看到顶部和左侧边缘的失真在增长。
* 解压和扭曲。
我正在使用对称边界条件(我已经实现了整体和一半,它没有太大的区别)和 Haar。尽管使用 CDF 具有相同的效果(失真略有不同,但沿整个边缘的位置相同)。由于图片的其余部分被完美地转换和反转,因此整个实现很可能没有任何问题。它必须是某种索引偏移量。很明显,失真的扩展是双向的——在逆循环的每一步中,它的大小都会翻倍。两天多的指数变化导致没有突破。
我在这里粘贴了代码(我意识到人们不太可能想要预先使用 100 行外国代码,但我有点绝望)。运行起来非常简单(尽管就像我说的那样很慢 - 可能需要一分钟才能运行):
runbackward(runforward(rgb2gray(imread('lichtenstein.png')), 5),5)
任何基于代码的帮助或高级诊断想法将不胜感激。