У меня есть матрица NumPy формы (n, height, width)
, содержащая изображения в градациях серого в диапазоне uint8
. Каждый слой (всего n) содержит прогноз из нейронной сети. Я хотел бы сравнить все n layers
и для каждого пикселя получить второе наиболее распространенное значение и создать новую матрицу формы (height, width)
с этим новым значением. Другими словами, я использую голосование за пиксель, чтобы создать новую 2D матрицу из всех матриц в многоуровневой. Я предпочитаю второе наиболее распространенное значение, поскольку самым распространенным является 3 по разным причинам, и я хотел бы игнорировать это; Вот почему я ищу второе наиболее распространенное значение с mode(vote[vote != 3], axis=None)[0][0]
. Ниже приведено рабочее решение. Тем не менее, это не очень быстро, так как я должен медленно повторять. Я хотел бы использовать векторизованное решение для экономии времени.
import numpy
from scipy.stats import mode
n = 84
height = 1872
width = 3128
layered_image = numpy.ndarray(shape=(n, height , width), dtype=numpy.uint8)
image = numpy.ndarray(shape=(height , width), dtype=numpy.uint8)
for i in range(0, height):
for j in range(0, width):
vote = []
for k in range(len(layered_image)):
vote.append(layered_image[k][i][j])
vote = numpy.asarray(vote, dtype=numpy.uint8)
image[i][j] = mode(vote[vote != 3], axis=None)[0][0]
Спасибо за любые предложения.