擅长:python、mysql、java
<p>这可以通过类似于实现<code>scipy.signal.fftconvolve</code>的方式来实现。在</p>
<p>这里是一个例子,假设我们有一个图像(二维,如果你也有多个通道,你可以用3d代替2个函数)(im)和一个滤波器(例如高斯)。在</p>
<p>首先,对图像进行傅立叶变换并定义<code>fft_lenghts</code>(如果过滤器的形状不同,则很有用,在这种情况下,它将得到零填充)</p>
<pre><code>fft_lenght1 = tf.shape(im)[0]
fft_lenght2 = tf.shape(im)[1]
im_fft = tf.signal.rfft2d(im, fft_length=[fft_lenght1, fft_lenght2])
</code></pre>
<p>接下来,使用滤波器的FFT(注意,对于2d高斯滤波器,请确保中心位于左上角,即仅使用“四分之一”)</p>
^{pr2}$
<p>最后,进行反变换得到卷积图像</p>
<pre><code>im_blurred = tf.signal.irfft2d(im_fft * kernel_fft, [fft_lenght1, fft_lenght2])
</code></pre>