我希望通过行,然后通过列,分别区分我的图像。
导数表示为f [i + 1] -f [i],其中i是像素,f是该像素的值/强度。
有人告诉我这可以通过卷积来完成-d / dx以(1,0,-1)作为行向量而d / dy是相同的向量但以列形式进行卷积。
我的问题是-当使用scipy.signal.convolve2D在python中以mode ='same'进行卷积时,与这些向量进行卷积时,我得到的结果与numpy.diff的结果不同。
说一个3x3矩阵:
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)作为列向量