image-processing - 复数数组的离散小波变换(Daubechies 小波)

标签 image-processing complex-numbers wavelet-transform

假设我有一个信号,表示为实数数组 y = [1,2,0,4,5,6,7,90,5,6] 。我可以使用 Daubechies-4 系数 D4 = [0.482962, 0.836516, 0.224143, -0.129409] ,并应用小波变换来接收信号的高频和低频。因此,高频分量将这样计算:

high[v] = y[2*v]*D4[0] + y[2*v+1]*D4[1] + y[2*v+2]*D4[2] + y[2*v+3]*D4[3], 

低频分量可以使用其他 D4 系数排列来计算。


问题是:如果 y 是复数数组怎么办?我是否只是通过复数相乘和相加来接收子带,或者获取幅度和相位是否正确,将它们视为实数,对它们进行小波变换,然后使用公式 real_part = abs * cos(phase) 恢复每个子带的复数数组和imaginary_part = abs * sin(phase)

最佳答案

为了处理复杂数据的情况,您正在查看 Complex Wavelet Transform 。它实际上是 DWT 的简单扩展。处理复杂数据的最常见方法是将实部和虚部视为两个单独的信号,并对每个分量分别执行 DWT。然后您将收到实部和虚部的分解结果。

这通常称为双树复小波变换。我从维基百科中提取的下图可以最好地描述这一点:

来源:Wikipedia

之所以称为“双树”,是因为有两个并行发生的 DWT 分解 - 一个用于实部,一个用于虚部。上图中,g0/h0 表示信号x 实部的低通和高通分量以及g1/h1 > 表示信号x虚部的低通和高通分量。

将实部和虚部分解为各自的 DWT 分解后,您可以将它们组合起来以获得幅度和/或相位,然后继续下一步或执行您想要对它们执行的任何操作。


关于其正确性的数学证明超出了我们讨论的范围,但如果您想了解这是如何得出的,我建议您引用 Kingsbury 于 1997 年发表的规范论文< em>使用复杂小波进行图像处理 - http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=835E60EAF8B1BE4DB34C77FEE9BBBD56?doi=10.1.1.55.3189&rep=rep1&type=pdf 。密切关注使用 CWT 对图像进行噪声过滤 - 这可能就是您正在寻找的内容。

关于image-processing - 复数数组的离散小波变换(Daubechies 小波),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32359901/

相关文章:

python - Cython 中 complex.real 和 creal(complex) 的区别

wavelet - 用于最大重叠离散小波变换的 Python 包(MODWT)

java - Java 中使用 BoofCV 进行小波变换(Haar 或 Daubechies)

algorithm - SURF 算法的输出到底是什么?我如何使用它们进行分类(SVM 等)?

java - 图像卷积代码不能正确显示图像?

python - 复杂转换为 Python Complex

steganography - DWT 如何用于 LSB 替换隐写术

visual-c++ - OpenCV图像显示失败

opencv - 基于机器学习的边缘检测器

c++ - 如何从 C++ 调用复杂参数的 C 函数