Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用逆DFT和幅值+重建图像;OpenCV中的相位矩阵_Java_Opencv_Dft - Fatal编程技术网

Java 使用逆DFT和幅值+重建图像;OpenCV中的相位矩阵

Java 使用逆DFT和幅值+重建图像;OpenCV中的相位矩阵,java,opencv,dft,Java,Opencv,Dft,假设使用官方DFT教程(使用java绑定),我将执行以下操作: Mat complexI = new Mat(); Core.merge(planes, complexI); // Add to the expanded another plane with zeros Core.dft(complexI, complexI); // this way the result may fit in the source matrix

假设使用官方DFT教程(使用java绑定),我将执行以下操作:

    Mat complexI = new Mat();
    Core.merge(planes, complexI);         // Add to the expanded another plane with zeros
    Core.dft(complexI, complexI);         // this way the result may fit in the source matrix
    // compute the magnitude
    Core.split(complexI, planes);
    Mat magI = new Mat();
    Core.magnitude(planes.get(0), planes.get(1), magI);
    Mat phasI = new Mat();
    Core.phase(planes.get(0), planes.get(1), phasI);
    Mat newComplexI = new Mat();
    Core.merge(magI, phasI, newComplexI);
    complexI.get(0,0)[0] == newComplex.get(0,0)[0]; // FALSE
发生了什么事?只需将复杂度分解为幅值矩阵和相位矩阵,然后重新组合它们,即可生成不同的矩阵。如果我在调用
Core.dft
之前进行此测试,那么它工作正常。这是因为
Mat
post-dft有浮点数,我们的精度降低了吗?然而,
complexI
newComplexI
之间的差异远大于一个phew小数,有时是数千


如何使用逆dft从mag和相位矩阵正确地重建图像?

本应删除该问题,但该问题被否决,我想其他人也有同样的问题

这是完全有道理的,我只是在问之前觉得这个问题还不够。
complexI
是一个双通道矩阵,表示第一个通道中的
Re
数字和第二个通道中的
Im
。Split基本上给出了两个单通道矩阵,分别包含所有的
Re
Im
编号。使用
magnity
函数基本上计算
sqrt(Re^2+Im^2)
,它给出了一个与
Re
Im
完全不同的数字<代码>相位类似,但使用相位计算公式。获取这两个数字(mag和相位)并将其通过
合并
只需生成一个新的双通道矩阵,其中
Re
现在是
mag
数字,
Im
现在是相位号,与原始数字无关这与
newComplexI
完全不同,正如所料


为了实现我想要的,调用
polarToCart(mag,phase,…)
函数以获取
Re
Im
值。

本应删除该问题,但该问题被升级,我想其他人也有同样的问题

这是完全有道理的,我只是在问之前觉得这个问题还不够。
complexI
是一个双通道矩阵,表示第一个通道中的
Re
数字和第二个通道中的
Im
。Split基本上给出了两个单通道矩阵,分别包含所有的
Re
Im
编号。使用
magnity
函数基本上计算
sqrt(Re^2+Im^2)
,它给出了一个与
Re
Im
完全不同的数字<代码>相位类似,但使用相位计算公式。获取这两个数字(mag和相位)并将其通过
合并
只需生成一个新的双通道矩阵,其中
Re
现在是
mag
数字,
Im
现在是相位号,与原始数字无关这与
newComplexI
完全不同,正如所料

为了实现我想要的,调用
polarToCart(mag,phase,…)
函数以获取
Re
Im