在 TensorFlow 中,提供 tf.nn.dilation2d
和 tf.nn.erosion2d
这两种形态学网络层,分别对应着形态学操作上的膨胀和腐蚀操作。
tf.nn.erosion2d(
value,
kernel,
strides,
rates,
padding,
name=None
)
tf.nn.dilation2d(
input,
filter,
strides,
rates,
padding,
name=None
)
拿膨胀来说明,在文档中提到:
Computes the grayscale dilation of 4-D
value
and 3-Dkernel
tensors.
详细一点,灰度的 2D 形态操作如下:
output[b, y, x, c] =
max_{dy, dx} input[b,
strides[1] * y + rates[1] * dy,
strides[2] * x + rates[2] * dx,
c] +
filter[dy, dx, c]
意思就是,filter
(kernel
) 中的值被添加到图像中的每一位置的值中,然后取最大值作为输出值。
这里的 filter
也称为 structuring function
。因为在形态学中,filter
就是 structure elements
。
也就是说,灰度的 2D 形态操作是最大和相关。
将其与卷积操作做对比,就是把公式中的乘法取代成了加法,将积分(或者求和)取代成了取最大值。
离散形式:
可以发现和 max-pool
的操作有点点类似。是的,当过滤器的大小等于池内核大小,并全为 0 时, 就是最大池化操作了。
[1]. tf.nn.dilation2d [2]. Tensorflow dilation behave differently than morphological dilation