Я хочу дифференцировать свое изображение сначала по строкам, а затем отдельно по столбцам.
Производная задается как 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) как вектор-столбец