【问题标题】:How can I implement a complex sinusoidal function?如何实现复杂的正弦函数?
【发布时间】:2017-01-25 17:08:49
【问题描述】:
以下是二维复正弦函数,
u0 和 v0 分别代表 X 和 Y 方向的基频。
我需要以目前的形式实现该正弦函数,以便我可以绘制它并将其保存在位图图像文件中。
如何表示 j(虚数)?
我应该分别为 u0 和 v0 分配什么值来绘制该正弦函数?
谁能给我任何提示?
编辑:
这是我的用例: ... ...我需要使用空间和频域方程来实现 Gabor 滤波器。在链接...http://www.cs.utah.edu/~arul/report/node13.html...,你可以看到有几个方程。 (14) 是空间域的 Gabor 滤波器方程。 (15)是频域Gabor滤波器的方程。因此,我的问题。
【问题讨论】:
-
你为什么要强调在这个现在的形式??在sin 形式中,在 c# 中实现会简单得多..
-
@TaW,这是我的用例: ... ...我需要使用空间和频域方程来实现 Gabor 滤波器。在链接...cs.utah.edu/~arul/report/node13.html...,你可以看到有几个方程。 (14) 是空间域的 Gabor 滤波器方程。 (15)是频域Gabor滤波器的方程。因此,我的问题。
-
标签:
c#
image-processing
bitmap
complex-numbers
trigonometry
【解决方案1】:
-
你需要用真正的数学来实际计算复数值
为此,您可以利用这个常用公式(通常用于 DFT/DFFT):
e^(j*x) = cos(x) + j*sin(x)
现在由于您没有复数,因此您需要将复数处理为 2 元素向量 cplx = re + j*im 所以:
e^(-j*2*pi*(u0*x+v0*y)) = cos(-2*pi*(u0*x+v0*y)) + j*sin(-2*pi*(u0*x+v0*y))
---------------------------------------------------------------------------
re(x,y) = cos(-2*pi*(u0*x+v0*y))
im(x,y) = sin(-2*pi*(u0*x+v0*y))
-
绘制值
复杂域有 2 个部分 (re,im),您的函数是 2D,因此您可以看到 4D 图。您需要将其转换为人类可以理解的东西,我可以通过多种方式获取 3D 图表,其中:
-
x,y 是位置(与输入变量相同)
-
z 是实部 re
-
color 是虚部 im 编码为色标(类似于 IR 图像)或灰度
不要忘记旋转投影图,以便从稍微倾斜的一侧看到它而不隐藏重要特征。此处查看带有颜色编码的 3D 图形示例:
粗略的输出风格取决于您的任务,您需要查看/强调什么是重要的,什么不是。例如,您可以绘制 2D 功率图:
-
x,y 是位置(与输入变量相同)
-
color 是 sqrt(re*re+im*im) 编码为色阶或灰度
或者您可以创建 2 个单独的图,一个用于 re,一个用于 im,请参见此处的一些示例: