tensorflow和numpy之间的fft2d结果不同

时间:2020-02-06 12:32:54

标签: python numpy tensorflow

以下代码是我的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)的结果如下所示:

该滤波器是低通滤波器。

enter image description here

0 个答案:

没有答案