How to make a 2D Gaussian Filter in Tensorflow?

后端 未结 1 642
Happy的楠姐
Happy的楠姐 2020-12-17 15:14

How can I implement a 2D low pass (also known as blurring) filter in Tensorflow using a gaussian kernel?

相关标签:
1条回答
  • 2020-12-17 15:22

    First define a normalized 2D gaussian kernel:

    def gaussian_kernel(size: int,
                        mean: float,
                        std: float,
                       ):
        """Makes 2D gaussian Kernel for convolution."""
    
        d = tf.distributions.Normal(mean, std)
    
        vals = d.prob(tf.range(start = -size, limit = size + 1, dtype = tf.float32))
    
        gauss_kernel = tf.einsum('i,j->ij',
                                      vals,
                                      vals)
    
        return gauss_kernel / tf.reduce_sum(gauss_kernel)
    

    Next, use tf.nn.conv2d to convolve this kernel with an image:

    # Make Gaussian Kernel with desired specs.
    gauss_kernel = gaussian_kernel( ... )
    
    # Expand dimensions of `gauss_kernel` for `tf.nn.conv2d` signature.
    gauss_kernel = gauss_kernel[:, :, tf.newaxis, tf.newaxis]
    
    # Convolve.
    tf.nn.conv2d(image, gauss_kernel, strides=[1, 1, 1, 1], padding="SAME")
    
    0 讨论(0)
提交回复
热议问题