通过这里的一些帮助,我想出了一个函数,似乎将sobel导数应用于X方向的图像F(x,y) = F(x+1,y) - F(x,y)
我不能使用任何OpenCV函数,我需要2D输出数组比2D输入数组短1列。
但是,我无法弄清楚为什么它仍然没有返回1列更短的输出数组。有人可以发现问题和/或告诉我这是否在正确的轨道上?非常感谢。
output = input[:-1,:]
r,c = input.shape
for i in range(0, r - 1):
output[i] = np.abs(input[i+1] - input[i])
return output
答案 0 :(得分:1)
您可以使用numpy的diff()函数。请参阅its doc here。
以及用于说明其用途的代码段:
import numpy as np
a = np.ones([5, 4])
b = np.diff(a, axis=1)
结果b是一个充满零的(5,3)数组。
如果你想保持你的循环,你可以这样做:
r,c = input.shape
output = np.zeros([r-1, c])
for i in range(0, r - 1):
output[i] = np.abs(input[i+1] - input[i])
print output
编辑:'数学' x对应于第二轴(垂直),y对应于第一轴(水平)。所以要获得F(x + 1,y) - F(x,y),你必须这样做:
r,c = input.shape
output = np.zeros([r, c -1])
for j in range(0, c - 1):
output[:, j] = np.abs(input[:, j+1] - input[:, j])
print output
答案 1 :(得分:0)
我不确定你是不是想创建那样的输出数组。您正在创建输出作为对输入子阵列的引用,因此如果您修改输入,您也可以修改输出,反之亦然。参见:
Numpy array assignment with copy
也就是说,运行您提供input = np.ones([5,5])
的代码段,并在返回后打印output.shape,我得到(4,5)
,这似乎是您想要的?