Implementing a high-pass filter in tensorflow

I need to extract high frequencies from a tensorflow image. Basically the functionality from the ndimage.gaussian_filter(img, sigma)

following code works as expected:

import tensorflow as tf
import cv2
img = cv2.imread(imgpath, cv2.IMREAD_GRAYSCALE)
img = cv2.normalize(img.astype('float32'), None, 0.0, 1.0, cv2.NORM_MINMAX)

# Gaussian Filter
K = np.array([[0.003765,0.015019,0.023792,0.015019,0.003765],
[0.015019,0.059912,0.094907,0.059912,0.015019],
[0.023792,0.094907,0.150342,0.094907,0.023792],
[0.015019,0.059912,0.094907,0.059912,0.015019],
[0.003765,0.015019,0.023792,0.015019,0.003765]], dtype='float32')

# as tensorflow constants with correct shapes
x = tf.constant(img.reshape(1,img.shape[0],img.shape[1], 1))
w = tf.constant(K.reshape(K.shape[0],K.shape[1], 1, 1))


with tf.Session() as sess:
    # get low/high pass ops
    lowpass = tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='SAME')
    highpass = x-lowpass

    # get high pass image
    l = sess.run(highpass)
    l = l.reshape(img.shape[0],img.shape[1])

    imshow(l)

      

However, I don't know how to get the Gaussian weights in a tensorflow with a given sigma.

+3


source to share


1 answer


just refer this tflearn extension - http://tflearn.org/data_augmentation/ here you can find add_random_blur (sigma_max = 5.0) which randomly blur the image by applying a random sigma Gaussian filter (0., sigma_max).



0


source







All Articles