我只是使用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] ......如果我只想获取图像的边缘能量,该函数的输出怎么办?
您能解释一下吗?预先感谢!
答案 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