Python - sobel x衍生物

时间:2015-09-18 03:31:24

标签: python numpy

通过这里的一些帮助,我想出了一个函数,似乎将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

2 个答案:

答案 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),这似乎是您想要的?