python 图像边缘检测

python image edge detection

有没有一种快速的方法来提取python中的水平、垂直、对角线、反对角线边,每个边都必须是一个单独的矩阵 我这样做似乎很慢并且可能有一些索引问题

def ImageEdges(arr):
    Harr , Varr , Darr,Marr= arr*0,arr*0,arr*0,arr*0
    for i in range(arr.shape[0]-1):
        for j in range(arr.shape[1]-1):
            Harr[i,j] = np.abs(arr[i,j] - arr[i+1,j])
            Varr[i,j] = np.abs(arr[i,j] - arr[i,j+1])            
            Darr[i,j] = np.abs(arr[i,j] - arr[i+1,j+1])   
            Marr[i,j] = np.abs(arr[i,j] - arr[i+1,j-1])            

    return Harr,Varr, Darr,Marr

一些细节取决于您是否需要任何填充以获得所有数组的相同输出尺寸。假设您不这样做,那么这应该可以解决问题:

Harr = np.abs(arr[:,:-1]-arr[:,1:])
Varr = np.abs(arr[:-1,:]-arr[1:,:])
Darr = np.abs(arr[:-1,:-1]-arr[1:,1:])
Marr = np.abs(arr[:-1,1:]-arr[1:,:-1])

(请注意,我按照第一个索引被认为是“垂直”的约定交换了 HarrVarr 的定义)

如果您不熟悉 Python 的切片符号,请参阅 https://docs.python.org/3/library/stdtypes.html#common-sequence-operations