Python Numpy-通过测试相邻索引获得索引位置

Python Numpy-通过测试相邻索引获得索引位置,python,image-processing,numpy,Python,Image Processing,Numpy,我正在使用的numpy是Python。我将图像加载到numpy二维数组中,如下所示: [ [...], # row0 [...], # row1 [...], # row2 ... ] 我需要获得所有像素的所有索引位置,其中北、南、东或西相邻像素(以下仅一个)具有特定值。在我的例子中,如果4个相邻像素中的任何一个为0。最简单的方法可能是使用以下方法定位所有零: import numpy as np # a is the image array z_indices = np.wh

我正在使用的numpy是Python。我将图像加载到numpy二维数组中,如下所示:

[
  [...], # row0
  [...], # row1
  [...], # row2
  ...
]

我需要获得所有像素的所有索引位置,其中北、南、东或西相邻像素(以下仅一个)具有特定值。在我的例子中,如果4个相邻像素中的任何一个为0。

最简单的方法可能是使用以下方法定位所有零:

import numpy as np
# a is the image array
z_indices = np.where(a == 0)

然后只计算零像素的相邻索引(零索引的+1,-1的所有组合)。如果一个点与两个不同的零像素相邻,则必须删除重复项。

如果a是原始阵列,请定义一组切片:

from scipy import *

a = ones((12,22))
a[5,10] = a[5,12] = 0

a_ = a[1:-1, 1:-1]
aE = a[1:-1, 0:-2]
aW = a[1:-1,   2:]
aN = a[0:-2, 1:-1]
aS = a[  2:, 1:-1]

a4 = dstack([aE,aW,aN,aS])
num_adjacent_zeros = sum(a4 == 0, axis=2)
print num_adjacent_zeros

ys,xs = where(num_adjacent_zeros == 1)
# account for offset of a_
xs += 1 
ys += 1

print '\n hits:'
for col,row in zip(xs,ys):
  print (col,row)
采用较小的
a_uu
的原因是,我不知道您想对边缘情况做什么,例如,北方像素可能不存在

我构建了一个相邻零计数的数组,并使用它来获得恰好与一个零相邻的位置。输出:

[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 1 0 2 0 1 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]

 hits:
(10, 4)
(12, 4)
(9, 5)
(13, 5)
(10, 6)
(12, 6)

我现在正在这样做。有更好的方法吗?@miki725:如果你尝试过什么,通常最好在原始问题中说明。什么是逻辑运算。很抱歉我是numpy的新手。好的,请稍等,我会详细说明我的回答。谢谢你的详细说明。想知道你在这里做了什么。所有这些功能对我来说还是陌生的。