- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试用 C 实现小波变换,但我以前从未做过。我读过一些关于小波的文章,理解“增长子空间”的想法,以及 Mallat 的单边滤波器组本质上是相同的想法。
但是,我对如何实际实现 Mallat 的快速小波变换一头雾水。这是我目前的理解:
高通滤波器 h(t) 为您提供细节系数。对于给定的尺度 j,它是母小波 W(t) 的反射、扩张和归一化版本。
g(t) 就是弥补差异的低通滤波器。应该是h(t)的正交镜
要获得第 j 级的细节系数或近似系数,您需要分别将信号 block 与 h(t) 或 g(t) 进行卷积,然后将信号下采样 2^{j} (即取每2^{j}个值)
但是这些是我的问题:
当我知道 h(t) 时,如何找到 g(t)?
如何计算此变换的逆?
你有任何我可以引用的 C 代码吗? (是的,我在 wiki 上找到了,但没有用)
我想用一些代码来表达的是:
一个。这是过滤器
B.这是转换(非常明确)C.) 这是逆变换(同样适用于傻瓜)
感谢您的耐心等待,但似乎没有第 1 步 - 第 2 步 - 第 3 步等带有明确示例的指南(这不是 HAAR,因为所有系数都是 1,这让事情变得困惑)。
最佳答案
fwt 的 Mallat 配方非常简单。如果您查看 matlab 代码,例如 script通过 Jeffrey Kantor,所有步骤都很明显。
在 C 中,工作量要多一些,但这主要是因为您需要处理自己的声明和分配。
首先,关于您的总结:
关于您的问题:
使用此信息,并给定 len
个double
类型的信号 x
,缩放 h
和f
系数(也是 double
类型)的小波 g
滤波器,以及分解级别 lev
,这 block 代码实现 Mallat fwt:
double *t=calloc(len+f-1, sizeof(double));
memcpy(t, x, len*sizeof(double));
for (int i=0; i<lev; i++) {
memset(y, 0, len*sizeof(double));
int len2=len/2;
for (int j=0; j<len2; j++)
for (int k=0; k<f; k++) {
y[j] +=t[2*j+k]*h[k];
y[j+len2]+=t[2*j+k]*g[k];
}
len=len2;
memcpy(t, y, len*sizeof(double));
}
free(t);
它使用一个额外的数组:一个“工作区”t
来复制近似值 c
(输入信号 x
开始)下一次迭代。
请参阅此示例 C program ,您可以使用 gcc -std=c99 -fpermissive main.cpp
编译并使用 ./a.out
运行。
逆向也应该遵循这些思路。祝你好运!
关于C代码小波变换及解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22947469/
我使用 lire, java对于图像检索项目,我想为输入图像的每个像素计算 gabor 小波的振幅 ref here . lire 库中的默认函数返回一个下采样的特征向量。我想要的是 gabor 小波
我目前有一个 Java 程序可以获取图像中每个像素的 rgb 值。我还有一种在二维值矩阵上计算 Haar 小波的方法。但是我不知道应该为计算 Haar 小波的方法赋予哪些值。我应该平均每个像素的 rg
我正在尝试对图像进行小波分析,我需要一些多尺度分解方法。我正在试验 PyWavelets 包。但是,dwt2 和 idwt2 方法仅提供单一比例。我可以重复这些方法,并将单尺度分解应用于图像的较小区域
我是 OpenCV 和 gabor 过滤器的新手,只想获得这样的 gabor 小波: 我在 Java 中使用这个 OpenCV 代码: double sigma_bar = 40; double th
我正在尝试从声音文件(.wav)中获取特征; 我尝试过 stft 来获取 2D 特征(x 是时间,y 是频率) 我尝试过 pywt,但得到的是一维数组。如果我输入一个 1D (1000,) wav 数
我是一名优秀的程序员,十分优秀!