python图像边缘检测

问题描述

有没有一种快速方法提取python中的水平、垂直、对角、反对角边,每个边都必须是一个单独的矩阵

this is the edges equations

我这样做似乎很慢,可能有一些索引问题

def ImageEdges(arr):
    Harr,Varr,Darr,Marr= 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] - arr[i,j+1])            
            Darr[i,j+1])   
            Marr[i,j-1])            

    return Harr,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