Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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
C++ CUDA循环卷积_C++_Math_Cuda_Fft_Convolution - Fatal编程技术网

C++ CUDA循环卷积

C++ CUDA循环卷积,c++,math,cuda,fft,convolution,C++,Math,Cuda,Fft,Convolution,在FFT2D文件中 图1和图2中指出: 假设图像大于卷积核,即 通常情况下,在实践中,卷积核需要 扩展到图像大小并根据图1填充。尽可能 如图2和图3所示(见下文),使用 扩展核等价于带初始值的循环卷积 卷积核 如果我对一个元素执行内核和映像之间的卷积,并尝试对同一元素执行扩展内核和映像之间的卷积,则会产生不同的结果 我在某个地方读到,“循环卷积”与经典的“卷积”相同,对吗?否则我该如何解释呢?不,循环卷积,也称为a,与常规卷积不同。内核以循环卷积的形式“环绕” 以x=[12345]和h=[12

在FFT2D文件中

图1和图2中指出:

假设图像大于卷积核,即 通常情况下,在实践中,卷积核需要 扩展到图像大小并根据图1填充。尽可能 如图2和图3所示(见下文),使用 扩展核等价于带初始值的循环卷积 卷积核

如果我对一个元素执行内核和映像之间的卷积,并尝试对同一元素执行扩展内核和映像之间的卷积,则会产生不同的结果


我在某个地方读到,“循环卷积”与经典的“卷积”相同,对吗?否则我该如何解释呢?

不,循环卷积,也称为a,与常规卷积不同。内核以循环卷积的形式“环绕”

x=[12345]
h=[1235]
为例:

首先翻转
h
并用零填充:
h'=[0 0 3 2 1]
。然后,要获得第一个元素,您需要使用通常的点积:

(x*h)[0] = 0*1 + 0*2 + 3*3 + 2*4 + 1*5
要获得第二个元素,请将内核移动1,然后再次点:

(x*h)[1] = 0*1 + 1*2 + 2*3 + 3*4 + 0*5
第三个也一样。不过,要获得第四个,内核将环绕,以便获得:

(x*h)[3] = 2*1 + 3*2 + 0*3 + 0*4 + 1*5

“正则”卷积不是一个标准术语,事实上“正则”是“周期”或“循环”的同义词。有一点是明确的,谢谢。你知道矩阵之间的循环卷积是如何执行的吗?FFT总是执行循环卷积。如果您不想这样做,则需要同时填充图像和内核,然后裁剪结果。