我只是使用 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]......如果我只想获取图像的边缘能量,我怎么能从这个函数的输出中得到呢?
你能解释一下吗?提前致谢!
所述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
Run Code Online (Sandbox Code Playgroud)