Tensorflow中是否存在卷积函数以应用Sobel滤波器?

时间:2016-02-22 22:35:25

标签: python tensorflow convolution sobel

Tensorflow中是否有任何img方法将Sobel滤镜应用于图像float32(张量为sobel_x = tf.constant([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]], 'float32') result = tf.convolution(img, sobel_x) # <== TO DO THIS 和等级2的张量)?

tf.nn.conv2d

我已经看过tf.nn.conv2d但我看不到如何将它用于此操作。有没有办法使用{{1}}来解决我的问题?

2 个答案:

答案 0 :(得分:13)

也许我在这里错过了一个微妙之处,但似乎您可以使用tf.expand_dims()tf.nn.conv2d()对图像应用Sobel滤镜,如下所示:

sobel_x = tf.constant([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]], tf.float32)
sobel_x_filter = tf.reshape(sobel_x, [3, 3, 1, 1])
sobel_y_filter = tf.transpose(sobel_x_filter, [1, 0, 2, 3])

# Shape = height x width.
image = tf.placeholder(tf.float32, shape=[None, None])

# Shape = 1 x height x width x 1.
image_resized = tf.expand_dims(tf.expand_dims(image, 0), 3)

filtered_x = tf.nn.conv2d(image_resized, sobel_x_filter,
                          strides=[1, 1, 1, 1], padding='SAME')
filtered_y = tf.nn.conv2d(image_resized, sobel_y_filter,
                          strides=[1, 1, 1, 1], padding='SAME')

答案 1 :(得分:1)

Tensorflow 1.8添加了tf.image.sobel_edges(),因此这是最简单,也可能是最强大的方法。