在tensorflow中使用gabor过滤器,或使用任何其他过滤器而不是默认过滤器

时间:2017-04-06 06:43:15

标签: python opencv tensorflow deep-learning convolution

我想在CNN中使用gabor过滤器。使用convolution2d函数如何将其更改为将输入图像转换为gabor滤镜,而不是默认的高斯滤镜?

2 个答案:

答案 0 :(得分:4)

这里有一些代码可以用作应用使用OpenCV库创建的常量(非学习)Gabor过滤器的指南:

    TEST_METHOD(test_App)
    {
        Test t;
        t.getCDetails();
        t.getBDetails();
    }

答案 1 :(得分:0)

下面是执行相同操作的功能:

def gabor_filtering(image) :
   """
   Using Gabor Filters to repair
   motion blurriness in an image.
   """
   theta = [0, 45, 90, 135]
   filtered_images = []
   sharpen_kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
   for th in theta :
      kernel = cv2.getGaborKernel(ksize = (3, 3), sigma = 5, lambd = 5, theta = th, 
               gamma = 0.25)
      kernel = tf.expand_dims(kernel, 0)
      kernel = tf.expand_dims(kernel, 0)
      kernel = tf.cast(kernel, tf.float32)
      filtered_images.append(tf.nn.conv2d(image, kernel, strides=[1, 1, 1, 1], 
                             padding='SAME'))
   final_img = tf.math.maximum(tf.math.maximum(filtered_images[0], 
   filtered_images[1]), tf.math.maximum(filtered_images[2], filtered_images[3]))

   #Sharpening the image
   sharpen_kernel = tf.expand_dims(sharpen_kernel, 0)
   sharpen_kernel = tf.expand_dims(sharpen_kernel, 0)
   sharpen_kernel = tf.cast(sharpen_kernel, tf.float32)
   return tf.nn.conv2d(final_img, sharpen_kernel, strides=[1, 1, 1, 1], 
                       padding='SAME')

在这里,我正在使用Gabor滤镜来处理图像中的运动模糊。我正在使用4个具有不同theta值的不同内核。我将其余参数保持不变,但您可以根据需要进行更改。

应用4个内核后,我将对所有4个过滤图像进行逐像素最大值。这样可以增强边缘并平滑无边缘的部分。最后,我要锐化图像。

希望这会有所帮助:)