以下代码是我的numpy和tensorflow的FFT2D的python代码。 我不知道为什么结果如此不同。 有人帮我弄清楚这个问题吗?
# use numpy fft2 ===========
f = np.fft.fft2(img)
f = np.fft.fftshift(f)
f_l = f * filter
f_l = np.fft.ifftshift(f_l)
f_l = np.fft.ifft2(f_l)
f_np = np.real(f_l)
#===========================
input_placeholder = tf.compat.v1.placeholder(tf.float32,
shape=[height, width, 1],
name='input')
# use tensorflow fft2d ===========
tf_filter = tf.convert_to_tensor(filter, dtype=tf.float32)
tf_filter_comx = tf.expand_dims(tf.complex(tf_filter, tf.zeros(tf_filter.shape)),2)
fft_org = tf.fft2d(tf.cast(input_placeholder, tf.complex64))
fft_org = tf.signal.fftshift(fft_org, axes=[0,1])
fft_filter = fft_org * tf_filter_comx
fft_filter = tf.ifft2d(tf.signal.ifftshift(fft_filter, axes=[0,1]))
fft_filter = tf.real(fft_filter)
#================================
sess = tf.Session(config=tf.ConfigProto(device_count={'GPU': 0}))
sess.run(tf.global_variables_initializer())
sess.run(tf.local_variables_initializer())
with sess.as_default():
feed_dict = {input_placeholder: np.expand_dims(img, axis=2)}
f_tf = sess.run(fft_filter, feed_dict=feed_dict)
f_np = util.normalize_ndarray(f_np) * 255
f_np = f_np.astype(np.uint8)
f_tf = util.normalize_ndarray(f_tf) * 255
f_tf = f_tf.astype(np.uint8)
cv2.imshow("numpy", f_np)
cv2.imshow("tensorflow", f_tf)
cv2.waitKey()
f_np(numpy)和f_tf(tensorflow)的结果如下所示:
该滤波器是低通滤波器。