python图像边缘检测
python中是否有快速提取水平、垂直、对角和反对角边的方法,每个边都必须是单独的矩阵 我这样做似乎很慢,可能有一些索引问题python图像边缘检测,python,image-processing,edge-detection,Python,Image Processing,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,
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])
(注意,我按照第一个索引被视为“垂直”的惯例,交换了Harr
和Varr
的定义)
看看您是否不熟悉Python的切片表示法,一些细节将取决于您是否需要任何填充,以便为所有数组获得相同的输出维度。假设你没有,那么这应该可以做到:
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])
(注意,我按照第一个索引被视为“垂直”的惯例,交换了Harr
和Varr
的定义)
看看您是否不熟悉Python的切片符号