Понимание производных на изображении, а также функции извилистого сигнала Сципи - PullRequest
0 голосов
/ 10 ноября 2018

Я хочу дифференцировать свое изображение сначала по строкам, а затем отдельно по столбцам.

Производная задается как f [i + 1] -f [i], где i - пиксель, f - значение / интенсивность этого пикселя.

Меня учили, что это можно сделать путем свертки - с d / dx, свертываемым с (1,0, -1) в качестве вектора строки, и d / dy в качестве того же вектора, но в форме столбца.

Мой вопрос: при свертывании в python с использованием scipy.signal.convolve2D, с mode = 'same', при свертывании с этими векторами я получаю результаты, отличные от numpy.diff.

Скажем для матрицы 3х3:

5 4 3

2 1 1 

3 2 5

Слияние с (1,0, -1) дает мне

-4 2 4

-1 1 1

-2 -2 2

В то время как дифференциал Numpy дает мне:

-3 -3 -2

 1  1  4

У меня есть следующие вопросы:

1.) При свертывании изображения NxN с ядром, например (1,0, -1), функция свертывает каждую строку по вектору?

2.) Почему мои результаты отличаются? Я понимаю, что формы разные, и у результата numpy есть еще один ряд, но я могу понять, что, поскольку он не включает исходный ряд 0

def deriv(image):
    """
    :param im: 2D image
    :return: magnitude of the derivative
    """
    #Horizontal Derivative
    dx = convolve2d(im, DX, mode='same')
    print('dx', dx)
    #Vertical Derivative
    dy = convolve2d(im, DY, mode='same')
    print('dy', dy)
    magnitude = np.sqrt(np.abs(dx)**TWO + np.abs(dy)**TWO)
    return magnitude

Отпечатки только для того, чтобы я проверил их значения, прежде чем рассчитать величину.

DX = (1,0, -1)

DY = (1,0, -1) как вектор-столбец

...