#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 имеет стратегию адаптации для своего размера фильтра.