Я проверил, будет ли это решение работать на всем вашем изображении, а не на этом небольшом образце, и оно работает.
Я приведу пример только для этого небольшого массива:
import numpy as np
x = np.array([[1, 1, 1, 2, 2, 1, 2],
[1, 1, 1, 2, 2, 1, 2],
[1, 1, 1, 2, 2, 1, 2],
[1, 1, 1, 2, 2, 1, 2],
[3, 3, 3, 4, 4, 1, 2],
[3, 3, 3, 4, 4, 1, 2],
[5, 5, 5, 6, 6, 1, 2],
[7, 7, 7, 8, 8, 1, 2],
[7, 7, 7, 8, 8, 1, 2]])
rows_mask = np.insert(np.diff(x[:, 0]).astype(np.bool), 0, True)
columns_mask = np.insert(np.diff(x[0]).astype(np.bool), 0, True)
print(x[np.ix_(rows_mask, columns_mask)])
дает:
[[1 2 1 2]
[3 4 1 2]
[5 6 1 2]
[7 8 1 2]]
Отсюда вы можете вычислить среднее значение.
О получении rows_mask
и columns_mask
вы можете прочитать здесь: Удалите следующие дубликаты в numpyмассив .
Также обратите внимание, что без np.ix_
будут возвращены только диагональные элементы: Индекс логического массива