Пример #1
0
def gaussian_filter_2d_variable_sigma(input, sigmas,
                                      window_radius=None,
                                      border_mode='zero'
                                      ):
    warnings.warn("gaussian_filter_2d_variable_sigma takes forever to compile.")

    def filter_sigma(idx, kernel):
        dimpattern_w = ('x', 'x', 'x', 0)
        dimpattern_h = ('x', 'x', 0, 'x')
        filter_w = kernel.dimshuffle(dimpattern_w)
        blur_w = T.nnet.conv2d(
            padded_input[idx:idx+1], filter_w,
            border_mode=_get_chained_w_h_conv_border(conv_border, 'w'),
            filter_shape=[1, 1, 1, None])
        filter_h = kernel.dimshuffle(dimpattern_h)
        return T.nnet.conv2d(
            blur_w, filter_h,
            border_mode=_get_chained_w_h_conv_border(conv_border, 'h'),
            filter_shape=[1, 1, None, 1])

    ndim = 4
    assert input.ndim == ndim, \
        "there must be {} dimensions, got {}".format(ndim, input.ndim)
    window_radius = gaussian_kernel_default_radius(sigmas, window_radius)
    padded_input, conv_border = add_border(input, window_radius, border_mode)
    kernel = gaussian_kernel_1d(sigmas, window_radius)
    blur, _ = theano.map(
        filter_sigma,
        sequences=[T.arange(sigmas.shape[0]), kernel])
    return blur.reshape(input.shape)
Пример #2
0
def gaussian_filter_2d(input, sigma, window_radius=None,
                       border_mode='zero'):
    bs, ch, h, w = input.shape
    ndim = 4
    assert input.ndim == ndim, \
        "there must be {} dimensions, got {}".format(ndim, input.ndim)
    window_radius = gaussian_kernel_default_radius(sigma, window_radius)
    input = input.reshape((bs*ch, 1, h, w))
    filter_1d = gaussian_kernel_1d(sigma, window_radius)
    dimpattern_w = ('x', 'x', 0, 1)
    dimpattern_h = ('x', 'x', 1, 0)
    filter_w = filter_1d.dimshuffle(dimpattern_w)
    padded_input, conv_border = add_border(input, window_radius, border_mode)

    blur_w = T.nnet.conv2d(
        padded_input, filter_w,
        border_mode=_get_chained_w_h_conv_border(conv_border, 'w'),
        filter_shape=[1, 1, 1, None])
    filter_h = filter_1d.dimshuffle(dimpattern_h)

    blured = T.nnet.conv2d(
        blur_w, filter_h,
        border_mode=_get_chained_w_h_conv_border(conv_border, 'h'),
        filter_shape=[1, 1, None, 1])
    return blured.reshape((bs, ch, h, w))
Пример #3
0
def sobel(img, border_mode='zero'):
    filter = np.array([
        [1, 0, -1],
        [2, 0, -2],
        [1, 0, -1],
    ], dtype=floatx())
    img, conv_border = add_border(img, border=1, mode=border_mode)
    kernel_x = theano.shared(filter[np.newaxis, np.newaxis])
    kernel_y = theano.shared(np.transpose(filter)[np.newaxis, np.newaxis])
    conv_x = T.nnet.conv2d(img, kernel_x, border_mode=conv_border,
                           input_shape=(None, 1, None, None),
                           filter_shape=(1, 1, 3, 3))
    conv_y = T.nnet.conv2d(img, kernel_y, border_mode=conv_border,
                           input_shape=(None, 1, None, None),
                           filter_shape=(1, 1, 3, 3))
    return conv_x, conv_y