问题标签 [wavelet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - CDF 9/7 离散小波变换(卷积)
我正在尝试编写一个简单的自包含程序,该程序使用 CDF 9/7 小波在一维列表上执行单级离散小波变换,然后对其进行重建。我只是使用卷积/滤波器组方法来了解它是如何工作的。换句话说,将列表与滤波器进行卷积以获得比例系数,将列表与不同的滤波器进行卷积以获得小波系数,但仅从每个其他元素开始执行此操作。然后上采样(即在元素之间添加零),将滤波器应用于小波和比例系数,将它们加在一起,并得到原始列表。
我可以让它适用于 Haar 小波滤波器,但是当我尝试使用 CDF 9/7 滤波器时,它不会产生相同的输入。然而,结果列表和原始列表的总和是相同的。
我确定这是卷积中的一个非常愚蠢的错误,但我就是想不通。我已经尝试了一堆卷积的排列,比如将过滤器集中在索引“i”上,而不是从它的左边缘开始,但似乎没有任何效果......这可能是那些会导致的错误之一当我弄清楚时,我拍了拍我的头。
这是代码:
顺便说一句,我从这里的附录中获取了过滤器值:http ://www1.cs.columbia.edu/~rso2102/AWR/Files/Overbeck2009AWR.pdf ,但我已经看到它们在一堆matlab示例代码中使用出色地。
java - 我应该使用什么图像值来生成 haar 小波?
我目前有一个 Java 程序,它将获取图像中每个像素的 rgb 值。我还有一种方法可以在二维值矩阵上计算 Haar 小波。但是我不知道应该为计算 Haar 小波的方法赋予哪些值。我应该平均每个像素的 rgb 值并计算一个 haar 小波吗?或者只使用 r、g、b 中的 1 个。我正在尝试为图像创建一个唯一的指纹。我在其他地方读到这是一个很好的方法,因为我可以取 2 个小波的点积来查看图像彼此之间的相似程度。
请让我知道我应该计算 Haar 小波的值。谢谢杰斯
image-processing - 使用 Daubechies 滤波器进行子带分解
我有以下两个 8 抽头过滤器:
它们在图表上:
我用它来获得近似值(图像的较低子带)。这a(m,n)
在下图中:
我从《 Digital Image Processing, 3rd Edition》一书中得到了系数和图表,所以我相信它们是正确的。星号表示一维卷积(行或列)。向下箭头表示一维(行或列)的下采样。
我的问题是滤波器系数h0
和h1
总和大于 1(确切地说大约是 1.4 或 sqrt(2))。自然,如果我将任何图像与滤镜进行卷积,图像会变得更亮。确实,这就是我得到的(右边的预期结果):
有人可以提出这里的问题吗? 如果卷积滤波器系数总和大于 1,为什么它会起作用?
我有源代码,但它很长,所以我希望避免在这里发布它。如果绝对有必要,我稍后会提出来。
编辑
我正在做的是:
- 分解成子带
- 过滤其中一个子带
- 将子带重构为原始图像
请注意,重点不仅仅是要有一个可显示的子带分解图像——我还必须能够从子带中完美地重建原始图像。因此,如果我缩放过滤后的图像以补偿我的分解过滤器使图像更亮,这就是我必须做的:
- 分解成子带
- 将强度缩放应用于近似子带
- 过滤其中一个子带
- 将逆强度缩放应用于近似子带
- 将子带重构为原始图像
步骤 2 执行缩放。这就是@Benjamin 的建议。问题是步骤 4 变得必要,否则原始图像将无法正确重建。这种更长的方法将起作用。但是,教科书明确表示不对近似子带进行缩放。当然,也有可能是教科书错了。然而,更有可能的是我误解了这一切的运作方式——这就是我问这个问题的原因。
编辑 (2010/7/8)
我写信给这本书的作者以确认。他说你必须执行缩放,尽管书中说了些什么。
python - 如何扩展 pyWavelets 以处理 N 维数据?
这可能是另一个论坛的问题,如果是这样,请告诉我。我注意到只有 14 人关注小波标签。
我在这里有一种优雅的方式将 pywt(pyWavelets 包)中的小波分解扩展到多个维度。如果安装了 pywt,这应该是开箱即用的。测试 1 显示了 3D 数组的分解和重组。所有,要做的就是增加维度的数量,代码可以分解/重组 4、6 甚至 18 维数据。
我在这里替换了 pywt.wavedec 和 pywt.waverec 函数。此外,在 fn_dec 中,我展示了新的 wavedec 函数如何像旧函数一样工作。
但是有一个问题:它将小波系数表示为与数据形状相同的数组。结果,由于我对小波的了解有限,我只能将它用于 Haar 小波。其他像 DB4 的例子,例如在这个严格边界的边缘上流血系数(当前将系数表示为数组列表 [CA,CD1 ... CDN] 不是问题。另一个问题是我只使用了 2 ^N 个边长方体数据。
从理论上讲,我认为应该可以确保不会发生“出血”。这种小波分解和重组的算法在“C 中的数值方法”中讨论 - William Press、Saul A teukolsky、William T. Vetterling 和 Brian P. Flannery(第二版)。虽然这个算法假设在边缘反射而不是其他形式的边缘扩展(如 zpd),但该方法足够通用,可以用于其他形式的扩展。
关于如何将这项工作扩展到其他小波的任何建议?
注意:此查询也发布在http://groups.google.com/group/pywavelets
谢谢,阿乔
matlab - 小波系数阈值
我一直在 Mathematica 和 Matlab 中对图像数据使用小波进行一些实验。我已经确定了 Mathematica 中的一些代码似乎基本上可以满足我的要求,如下所示:
以上通过仅保留 100 个最大系数来执行小波阈值。然而,我更喜欢做同样事情(或或多或少同样事情)的 Matlab 代码。
我一直在尝试使用 Wavelet 工具箱,但到目前为止还没有取得多大成功。到目前为止,我似乎最接近的是使用wavedec2
. 我一直在修补这样的东西:
结果有点相似,但似乎这不是正确的方法。我想让我感到困惑的是这里使用的不同类型的系数(细节和近似值),我不确定在哪里(以及如何)进行阈值处理是合适的。
我应该指出,小波对我来说是非常新的东西,因此任何指导都将不胜感激。
编辑:应该注意的是,threshold(c,100)
在上面的代码片段中,除了c
将前 10000 个最大(绝对)值之外的所有内容都视为一维向量,它仅将所有内容归零。
signal-processing - 脑电小波分析
我想对 EEG 信号进行时频分析。我找到了用于计算小波系数的 GSL 小波函数。如何从该系数中提取实际频带(例如 8 - 12 Hz)?GSL 手册说:
对于前向变换,原始数组的元素被
f_i -> w_{j,k}
压缩三角形存储布局中的离散小波变换替换,其中J
是级别的索引j = 0 ... J-1
,K
是每个级别内的系数的索引,k = 0 ... (2^j)-1
。总层数为J = \log_2(n)
。输出数据具有以下形式,
(s_{-1,0}, d_{0,0}, d_{1,0}, d_{1,1}, d_{2,0}, ..., d_{j,k}, ..., d_{J-1,2^{J-1}-1})
如果我理解正确的输出数组data[]
在位置1
(例如data[1]
)包含频带 2^0 = 1 Hz 的幅度,并且
等等 ...
这意味着我只有频率 1 Hz、2 Hz、4 Hz、8 Hz、16 Hz 的幅度……我怎样才能获得例如以 5.3 Hz 振荡的频率分量的幅度?如何获得整个频率范围的幅度,例如 8 - 13 Hz 的幅度?有什么建议如何获得良好的时频分布?
watermark - 图像上的离散小波变换和 LL 带系数中的水印嵌入,再次执行 IDWT-DWT 时数据丢失?
我正在编写一个图像水印系统,通过使用离散小波变换来转换图像的亮度通道,然后修改 DWT 输出的 LL 频带中的系数,从而在图像的低频带中隐藏水印。然后我做一个反向 DWT 并重建我的图像。
我遇到的问题是,当我修改 DWT 输出中的系数,然后是逆 DWT,然后再次修改 DWT 时,修改后的系数完全不同。
例如,2-scale DWT 的 LL 波段的输出系数之一是 -0.10704,我将这个系数修改为 16.89,然后对我的数据执行 IDWT。然后我获取了 IDWT 的输出并再次对其进行了 DWT,修改为 16.89 的系数变为 0.022。
我相当肯定 DWT 和 IDWT 代码是正确的,因为我已经针对其他库对其进行了测试,并且当滤波器系数和其他参数相同时,每个变换的输出都匹配。(由于舍入误差,在可以预期的范围内)
我遇到的主要问题是我可能不太了解 DWT,我认为 DWT 和 IDWT 应该是合理无损的(除了舍入误差等),但这里似乎并非如此.
我希望更熟悉变换的人可以指出一个可能的问题,是否有可能因为该位置的其他子带(LH、HL、HH)中的系数微不足道,我正在丢失数据?如果是这样,我如何确定这可能发生在哪些系数上?
我的嵌入函数如下,在 LL 频带中选择系数,如果所选位置的 LH、HH 或 HL 频带的绝对值大于相应子频带的平均值,则确定“强”为真。
matlab - N维的小波变换
我遇到了这个惊人的响应Applying MATLAB's idwt2
several times我自己执行来理解它。但是,我无法了解如何将其用于处理 RGB 图像。所以,我有3个问题。
如何将代码应用于仅在输出中显示转换后的图像以及沿行和列的高频和低频分量的 RGB 图像,是否可以将所有分量的融合视为单个图像?我知道我必须使用 cat 运算符,但我不明白该怎么做。
其次,我也得到了一个迷宫般的图像!我很困惑,因为我似乎无法理解原因。我还附上了相同的代码以及显示该图像是如何生成的语句。
db1
3.函数签名中的术语是什么意思dwt
?
代码:
matlab - Matlab - 信号噪声去除
我有一个数据向量,其中包含 -20 20 范围内的整数。
波纹管是一个带有值的图:
这是来自矢量数据的 96 个元素的样本。从上图中可以看出,大部分元素位于区间 -2、2 中。
我想消除数据中的噪音。我想消除低幅度峰值,并保持高幅度峰值,即像索引 74 处的峰值。
基本上,我只想增加高振幅峰值和低振幅峰值之间的对比度,以及是否可以消除低振幅峰值。
你能建议我这样做吗?
我已经尝试过mapstd
函数,但问题是它也会使高振幅峰值正常化。
我正在考虑使用小波变换工具箱,但我不知道如何从小波分解系数中重建数据。
你能推荐我这样做的方法吗?
matlab - 在 Matlab 中使用 Gabor 字典匹配追踪算法
我正在寻找一个使用由 Gabor 原子组成的匹配追踪 (MP) 算法分解信号的 Matlab 函数。
我对自适应信号处理相当陌生。我已经下载了 Wavelab,但它没有使用 Gabor 字典实现 MP 算法。