如何在TensorFlow中计算Sobel边缘检测

时间:2019-06-24 16:25:27

标签: python tensorflow

我只是使用TensorFlow计算形状为[16,96,96,1]的张量A的Sobel Edge映射(16是批处理大小,96是图像块大小,1是数量通道(此处仅考虑亮度通道)。

我发现TensorFlow中有一个名为“ tf.image.sobel_edges”的函数,该函数可以返回每个通道的边缘图。对于此函数,它将返回具有[16,96,96,1,2]形状的张量。我不了解最后2个维度的含义.....我的理解是边缘图应为二进制图像,因此输出应为[16,96,96,1],但此输出函数是[16,96,96,1,2] ......如果我只想获取图像的边缘能量,该函数的输出怎么办?

您能解释一下吗?预先感谢!

1 个答案:

答案 0 :(得分:1)

tf.image.sobel_edges文档指出,对于单通道图像,返回的张量包含沿水平轴和垂直轴的图像梯度分量。为了计算该梯度的大小并获得边缘能量图,我们只需要计算这些分量之和的平方根即可,如下所示:

import tensorflow as tf

tf.enable_eager_execution()

img = tf.random.normal(shape=(16,96,96,1),dtype=tf.float32) # replace with your image data

grad_components = tf.image.sobel_edges(img)

grad_mag_components = grad_components**2

grad_mag_square = tf.math.reduce_sum(grad_mag_components,axis=-1) # sum all magnitude components

grad_mag_img = tf.sqrt(grad_mag_square) # this is the image tensor you want