我想获取矩阵梯度,但结果不一致
g = img[0:3, 0:3]
gy, gx = np.gradient(g)
print gy,gx
arr=np.array([[138, 144, 141],[134, 135, 132],[137, 135, 133]])
gy, gx = np.gradient(arr)
print gy,gx
结果不同
数据类型:矩阵
gy = array([[252。,247.,247.],[127.5,123.5,124.],[3.,0.,1.]])
gx = array([[6.,1.5,253.],[1.,127.,253.],[254.,126.,254.]])
数据类型:array
gy = array([[-4。,-9。,-9。],[-0.5,-4.5,-4。],[3.,0.,1.]])
gx = array([[6.,1.5,-3。],[1.,-1。,-3。],[-2。,-2。,-2。]])
答案 0 :(得分:0)
这实际上不是矩阵与数组的问题(尽管使用matrix
是一个坏主意,并且可能导致其他问题)。您的img
具有较小的dtype,可能是uint8
,并且计算溢出。将其首先转换为浮动:
np.gradient(g.astype(float))
演示:
In [7]: arr=np.array([[138, 144, 141],[134, 135, 132],[137, 135, 133]])
In [8]: arr_uint8 = arr.astype('uint8')
In [9]: gx, gy = np.gradient(arr_uint8)
In [10]: gx
Out[10]:
array([[ 252. , 247. , 247. ],
[ 127.5, 123.5, 124. ],
[ 3. , 0. , 1. ]])
In [11]: arr_float = arr_uint8.astype(float)
In [12]: gx, gy = np.gradient(arr_float)
In [13]: gx
Out[13]:
array([[-4. , -9. , -9. ],
[-0.5, -4.5, -4. ],
[ 3. , 0. , 1. ]])