我正在使用程序上的小波,我使用该程序包wavelets
使用该函数创建时间序列的DWT dwt
.该函数返回类的对象dwt
,这与许多时隙的S4对象:W
,V
,levels
,filter
,等.
如何W
作为向量访问?
有谁知道一个好的C/C++小波库用于信号处理?
信号是浮点值或双值,而不是int值.
我目前正在使用SFinGe方法(由Maltoni,Maio和Cappelli)生成合成指纹的链接:http://biolab.csr.unibo.it/research.asp ?organize=Activities&select=&selObj=12&pathSubj= 111%7C%7C12&
其中一个步骤要求我对图像应用不同的gabor滤镜,图像中的每个像素都有一个方向和频率相关联,因此卷积不是通过整个图像上的一个内核完成的,但过滤器必须在此过程中根据需要进行更改在像素的那些属性上,这样,图像上的每个像素以不同的方式被改变.
如果以这种方式应用滤镜,并对图像进行多次卷积(您还必须在每次卷积后对图像进行二值化),您将获得:
一个主指纹,这个图像需要大约20秒生成(这是太慢了,这就是我想用FFT做的原因),因为我不得不执行5次卷积来完成它(你从一些开始随机黑点).
我的过滤器是30x30,图像是275x400.总共有36000个过滤器,每个度数和密度一个(密度从0到100).我正在计划将滤波器的数量从36000减少到9000,因为我可以用这些来覆盖所有角度.此外,所有过滤器都预先计算并存储在过滤器组中.
这是gabor卷积实现的C#中的源代码:
这两种方法执行卷积:
/// <summary>
/// Convolve the image with the different filters depending on the orientation and density of the pixel.
/// </summary>
/// <param name="image">The image to be filtered.</param>
/// <param name="directionalMap">The directional map.</param>
/// <param name="densityMap">The density map.</param>
/// <returns></returns>
public double[,] Filter(double[,] image, double[,] directionalMap, double[,] densityMap)
{
int midX = FILTER_SIZE / 2;
int midY = FILTER_SIZE / 2;
double[,] filteredImage = new double[image.GetLength(0), …
Run Code Online (Sandbox Code Playgroud) 所有.所以,我有一些时间序列数据,我想通过小波变换来处理这样的数据.我对小波的概念比较陌生.我注意到scipy.signal有一些对象,但看起来很薄.是否有图书馆或其他东西可以帮助这个?任何您知道的文档或教程将不胜感激.
我有计算机科学学位,我参加了以下数学课程.
我应该采取哪些其他课程来准备研究小波,重点是实施小波变换?
编辑:
看起来这是因为没有"编程相关"而关闭.那是错的!
小波变换是一种非常常见的图像处理技术,它用于H.264和JPEG2000.图像处理是否超出了StackOverflow的范围?
这可能是针对不同论坛的问题,如果是这样,请告诉我.我注意到只有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上
谢谢,Ajo
import pywt
import sys
import numpy as np
def waveFn(wavelet):
if not isinstance(wavelet, pywt.Wavelet):
return pywt.Wavelet(wavelet)
else:
return wavelet
# given a single dimensional array ... returns the coefficients.
def wavedec(data, wavelet, mode='sym'):
wavelet = waveFn(wavelet)
dLen = len(data)
coeffs = np.zeros_like(data)
level = pywt.dwt_max_level(dLen, wavelet.dec_len)
a = data
end_idx = dLen
for idx in xrange(level):
a, d = …
Run Code Online (Sandbox Code Playgroud) 我有一个数据向量,其中包含-20 20范围内的整数.
贝娄是一个价值观的情节:
这是来自矢量数据的96个元素的样本.从上图可以看出,大多数元素位于区间-2,2中.
我想消除数据中的噪音.我想消除低振幅峰值,并保持高振幅峰值,即像指数74那样的峰值.
基本上,我只想增加高振幅峰值和低振幅峰值之间的对比度,以及是否可以消除低振幅峰值.
你能建议我这样做吗?
我尝试过mapstd
功能,但问题是它还能使高振幅峰值归一化.
我在考虑使用小波变换工具箱,但我不知道如何从小波分解系数中重建数据.
你能给我一个这样做的方法吗?
我想计算具有不同尺度和时移的信号的小波.
在Matlab中使用Wavelet Toolbox中cwt()
提供的函数(连续1-D小波变换),我可以指定我想要的比例作为cwt()的参数,它将返回所有可能的时移:
x = [1, 2, 3, 4];
scales = [1, 2, 3];
wavelet_name = 'db1';
coefs = cwt(x,scales, wavelet_name);
>> coefs =
-0.0000 -0.0000 -0.0000 0.0000
-0.7071 -0.7071 -0.7071 -0.7071
-1.1553 -1.1553 -1.1553 1.7371
Run Code Online (Sandbox Code Playgroud)
我怎样才能在Python中实现这一目标?
到目前为止,这是我的两次尝试:
scipy.signal.cwt
,我找不到我可以传递给scipy.signal.cwt的内置小波函数列表:我想至少拥有最常见的小波函数,如sym2和db1.(例如,参见Matlab的内置小波列表).我有一个.WI图像的大样本我需要转换为例如JPEG,但格式现在似乎已经不存在了.
mimetype是image/wavelet.
压缩算法由Summus开发,Summus是一家现在似乎已经不复存在的美国公司.
最后一个CorelDraw支持该格式是在32位Windows下.如果我沿着硬件路线走下去,我需要能够通过例如REST来调用服务器.
我认为在*nix下djvulibre可能能够打开文件,但我还没有能够测试它.
另一种选择是自己重新实现编解码器.
能够编写脚本是一件好事.
file-format image-processing file-conversion coreldraw wavelet
我正在比较特定信号的 FFT 与 CWT。
我不清楚如何从 CWT 的相应比例图中读取相应的频率和幅度。此外,我的印象是 CWT 相当不精确?
频谱图在预测精确频率方面似乎非常好,但对于 CWT,我尝试了许多不同的小波,结果是一样的。
我监督了什么吗?这不是解决这个问题的合适工具吗?
在下面,您可以找到我的示例源代码和相应的图。
import matplotlib.pyplot as plt
import numpy as np
from numpy import pi as ?
from scipy.signal import spectrogram
import pywt
f_s = 200 # Sampling rate = number of measurements per second in [Hz]
t = np.arange(-10,10, 1 / f_s) # Time between [-10s,10s].
T1 = np.tanh(t)/2 + 1.0 # Period in [s]
T2 = 0.125 # Period in [s]
f1 = 1 / T1 # Frequency …
Run Code Online (Sandbox Code Playgroud)