对于一些小背景,我正在使用一堆复值过滤器进行大量的图像过滤。 我分别生成过滤器的实部和虚部(以这种方式更有效),并将它们存储在两个单独的数组中。
我关注如何在opencv中执行dft的this guide。
基本上,我必须
我这样做,而且速度相当慢。我最初认为我需要一个更快的FFT库,但基于Visual Studio的分析器,事实证明cv :: split()和cv :: merge()比实际的DFT花费的时间多一个数量级。实际上,大部分运行时都花在这两个函数上。
整个拆分/合并对我来说似乎有点多余,而且它们是最耗时的功能这一事实非常烦人。有没有更快的方法来做我想做的事情?
答案 0 :(得分:1)
OpenCV矩阵以交错格式存储。这意味着对于具有通道A和B的双通道图像,将以ABABABAB
的顺序存储4x1矩阵。如果您有两个不同的平面,则可以使用AAAA
和BBBB
。
说服DFT对非交错输入进行操作可能是最困难的。但是,您可能首先将过滤器存储为双通道矩阵吗?
要计算两个通道的幅度,您可以循环遍历所有元素并在其上调用cv :: norm或自行进行计算。您可以使用SSE和/或TBB进一步加快速度。
所以至少你保存了一次转换。