2016-03-12 3 views
1

Реферат: Я ищу что-то вроде «numpy.nonzero», но с завихрением. Я хочу искать все индексы, которые содержат любой элемент в третьем измерении, который отличен от нуля. Если какой-либо элемент существует, дайте мне индексы для этого измерения.NumPy: индексы, где третье измерение отличное от нуля (маскирование изображений)

Детали: Мой проект включает в себя вхождение, разбор, а затем вывод модифицированных файлов изображений. Он начинается с преобразования изображения в массив 3D numpy. С помощью этого файла создается маска. Затем он использует «numpy.bitwise_and», чтобы найти, где бит-шаблон маски перекрывается с исходным изображением, а затем выполняет действия на основе этих индексов.

mask = create_mask(self.image) # spare array, same size as self.image 
overlap = np.bitwise_and(self.image, mask) 

indices = [] 
for y, row in enumerate(overlap): 
    for x, col in enumerate(row): 
     if any(col): # any RGB values are not 0 
      indices.append((y,x)) 

for (y, x) in indices: 
    pass # do stuff 

Каков наилучший способ решения этой проблемы? Я уверен, что есть лучший способ, чем наивный подход, показанный выше.

ответ

1

Один NumPythonic способа было бы использовать .any вдоль последней оси, т.е. .any(axis=-1) или просто .any(-1), а затем использовать np.argwhere, чтобы получить соответствующие действительные показатели, например, так -

indices = np.argwhere(overlap.any(-1)) 

Пожалуйста, обратите внимание, что indices будет NumPy массив.

Смежные вопросы