美文网首页
tensorflow 形态学膨胀与腐蚀

tensorflow 形态学膨胀与腐蚀

作者: snowpigppp | 来源:发表于2019-08-07 10:35 被阅读0次

    在 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-D kernel 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 形态操作是最大和相关。

    # 卷积操作
    output[b, i, j, k] =
            sum_{di, dj, q} input[b, 
                                     strides[1] * i + di,
                                        strides[2] * j + dj, 
                                        q] *
                                        filter[di, dj, q, k]
    

    将其与卷积操作做对比,就是把公式中的乘法取代成了加法,将积分(或者求和)取代成了取最大值。

    离散形式:

    还有一点区别,就是形态学操作中有 rates 这一参数,在上面的代码及公式中也有体现。rates 参数的意思就是形态学操作(腐蚀或者扩张)的输入步幅。
    可以发现和 max-pool 的操作有点点类似。是的,当过滤器的大小等于池内核大小,并全为 0 时, 就是最大池化操作了。

    相关文章

      网友评论

          本文标题:tensorflow 形态学膨胀与腐蚀

          本文链接:https://www.haomeiwen.com/subject/nbnndctx.html