在 tensorflow 中使用 gabor 过滤器,或任何其他过滤器而不是默认过滤器
using gabor filter in tensorflow , or any other filter instead of default one
我想在我的 CNN 中使用 gabor 过滤器。使用 convolution2d 函数如何将其更改为将输入图像转换为我的 gabor 过滤器,而不是默认的高斯过滤器?
这里有一些代码,您可以将其用作指南,以应用使用 OpenCV 库创建的常量(非学习)Gabor 滤波器:
import tensorflow as tf
import cv2
# Create a 3x3 Gabor filter
params = {'ksize':(3, 3), 'sigma':1.0, 'theta': 0, 'lambd':15.0, 'gamma':0.02}
filter = cv2.getGaborKernel(**params)
# make the filter to have 4 dimensions.
filter = tf.expand_dims(filter, 2)
filter = tf.expand_dims(filter, 3)
# Apply the filter on `image`
answer = tf.conv2d(image, filter, strides=[1, 1, 1, 1], padding='SAME')
下面是执行相同操作的函数:
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 个过滤图像中获取像素方面的最大值。这加强了边缘并平滑了none-边缘部分。最后我在锐化图像。
希望这对您有所帮助:)
我想在我的 CNN 中使用 gabor 过滤器。使用 convolution2d 函数如何将其更改为将输入图像转换为我的 gabor 过滤器,而不是默认的高斯过滤器?
这里有一些代码,您可以将其用作指南,以应用使用 OpenCV 库创建的常量(非学习)Gabor 滤波器:
import tensorflow as tf
import cv2
# Create a 3x3 Gabor filter
params = {'ksize':(3, 3), 'sigma':1.0, 'theta': 0, 'lambd':15.0, 'gamma':0.02}
filter = cv2.getGaborKernel(**params)
# make the filter to have 4 dimensions.
filter = tf.expand_dims(filter, 2)
filter = tf.expand_dims(filter, 3)
# Apply the filter on `image`
answer = tf.conv2d(image, filter, strides=[1, 1, 1, 1], padding='SAME')
下面是执行相同操作的函数:
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 个过滤图像中获取像素方面的最大值。这加强了边缘并平滑了none-边缘部分。最后我在锐化图像。
希望这对您有所帮助:)