gpt4 book ai didi

opencv - OpenCV的离散傅立叶变换的实际输出公式是什么?

转载 作者:行者123 更新时间:2023-12-02 16:17:30 25 4
gpt4 key购买 nike

OpenCV的DFT函数可以将DFT结果作为真实和复杂的输出值给出。

对于复杂的结果,公式如下:exp(-2 * piij * k / N)其中i = sqrt(-1)(Reference)

实际输出的公式是什么?

我猜这是formula,但我不确定。

最佳答案

让我们下订单。
DFT将N个元组的复数值(对应于2 * N个实数值)作为输入,并将N个元组的复数值作为输出。
没有用于实际的DFT,对于复杂的输出值没有DFT。
您可能是指所有输入值均为实数的情况,即每个虚部均为0(且未指定)。
这是DFT的实际实现中经常需要的。
在这种情况下,您总会得到N个元组的复数值,但是有一些有趣的事情可以将结果的内在维数减小为与输入等价的N个实数值的等价物(请注意,我已经写了“等价物” ,它们仍然很复杂)。
我举一个例子。
N = 7
输入
索引0、1、2、3、4、5、6
实部,0,2,4,4,1.5,7,-3,3
虚部,0,0,0,0,0,0,0

输出值
索引0、1、2、3、4、5、6
实部, 14.5,-4.763307302,3.286089778,-5.772782476 ,-5.772782476,3.286089778,-4.763307302
虚部,0, -3.656303338,-0.287959068,11.26880763 ,-11.26880763,0.287959068,3.656303338

请注意,在14个输出值中,实际上只有7个是必需的(粗体),因为第一虚部始终为0,某些值取决于其余值。

现在,我将向您展示OPENCV如何处理这种情况:

 double values[7] = {0, 2, 4, 1.5, 7, -3, 3};
Mat x(Size(1,7), CV_64F, values);
Mat X;
dft(x, X);
cout << "X = "<< endl << X << endl;

它仅输出严格需要的值。

附注:您链接的第二个公式是具有无限输入值的FT,而不是我们正在谈论的离散版本。
除此之外,它与第一个相同(请记住欧拉公式:e ^ ix = cosx + isinx)

更新了
复杂输入的示例,但虚部为空。那是上面的例子,但是输入复杂。
 double values[14] = {0,0,  2,0,    4,0,    1.5,0,  7,0,    -3,0,   3,0};
Mat x(Size(1,7), CV_64FC2, values);
Mat X;
dft(x, X, DFT_COMPLEX_OUTPUT);
cout << "X = "<< endl << X << endl ;

关于opencv - OpenCV的离散傅立叶变换的实际输出公式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31817329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com