Различные результаты с использованием размытия по Гауссу на tensorflow и numpy

#python #numpy #tensorflow #scipy

Вопрос:

Я пытаюсь применить размытие по Гауссу к какому-то изображению. В настоящее время я использую 2d-гауссов фильтр tensorflow, который отлично работает, но, попробовав то же самое с гауссовым фильтром scipy, я заметил, что результаты были совсем другими, хотя использовались одни и те же параметры.
Мой код:

 from PIL import Image
import tensorflow as tf
import tensorflow_addons as tfa
from scipy.ndimage.filters import gaussian_filter

def apply_blur_tensor(img, sigma_x=3.5, sigma_y=4.6):
    img_temp = np.asarray(img).astype(float)
    img_temp = tf.convert_to_tensor(img_temp)
    img_temp = tfa.image.gaussian_filter2d(image=img_temp, sigma=(sigma_x, sigma_y), padding='REFLECT')
    img_temp = img_temp.numpy()
    return Image.fromarray(img_temp.astype('uint8'))

def apply_blur_numpy(img, sigma_x=3.5, sigma_y=4.6):
    img_temp = np.asarray(img).astype(float)
    img_temp = gaussian_filter(img_temp, sigma=(sigma_x,sigma_y), mode='reflect')
    return Image.fromarray(img_temp.astype('uint8'))
 

Я полагаю, что я сделал что-то не так с реализацией tensorflow, может кто-нибудь сказать мне, что?

РЕДАКТИРОВАТЬ: Я не позволю мне загружать примеры изображений, надеюсь, кода будет достаточно.

Комментарии:

1. Размер фильтра может отличаться. попробуйте передать дельта-функцию, чтобы получить импульсную характеристику фильтра. Кроме того, вы можете прочитать исходный код и увидеть, что tfa использует постоянный размер фильтра, в то время как scipy имеет стратегию адаптации для своего размера фильтра.