Следующий пример ясно иллюстрирует мой вопрос:
предположим, что это массив 'arr'
>>import numpy as np
>>from skimage.util.shape import view_as_blocks
>>arr=np.array([[1,2,3,4,5,6,7,8],[1,2,3,4,5,6,7,8],[9,10,11,12,13,14,15,16],[17,18,19,20,21,22,23,24]])
>>arr
array([[ 1, 2, 3, 4, 5, 6, 7, 8],
[ 1, 2, 3, 4, 5, 6, 7, 8],
[ 9, 10, 11, 12, 13, 14, 15, 16],
[17, 18, 19, 20, 21, 22, 23, 24]])
Я сегментировал этот массив на 2 * 2 блока, используя:
>>img= view_as_blocks(arr, block_shape=(2,2))
>>img
array([[[[ 1, 2],
[ 1, 2]],
[[ 3, 4],
[ 3, 4]],
[[ 5, 6],
[ 5, 6]],
[[ 7, 8],
[ 7, 8]]],
[[[ 9, 10],
[17, 18]],
[[11, 12],
[19, 20]],
[[13, 14],
[21, 22]],
[[15, 16],
[23, 24]]]])
У меня есть другой массив "cor"
>>cor
(array([0, 1, 1], dtype=int64), array([2, 1, 3], dtype=int64))
В "cor" 1-й массив ([0,1,1]) дает координаты строк, а 2-й массив ([2,1,3]) дает координаты соответствующих столбцов в последовательном порядке.
Теперь моя работа состоит в том, чтобы получить доступ к сегментам img, позиционные координаты которых [0,2], [1,1] и [1,3] (взяты из «cor». X из 1-го массива и соответствующие y из 2-го массива ) автоматически, читая "кор".
В приведенном выше примере
img[0,2]= [[ 5, 6], img[1,1]= [[11, 12], img[1,3]=[[15, 16],
[ 5, 6]], [19, 20]] [23, 24]]
затем найдите среднее значение каждого сегмента отдельно.
ie. img[0,2]=5.5 img[1,1]=15.5 img[1,3]=19.5
Теперь проверьте, что его средние значения меньше среднего значения всего массива "img".
Здесь среднее значение img составляет 10,5. следовательно, только среднее значение img [0,2] меньше 10,5.
Поэтому, наконец, верните координату сегмента img [0,2], т. Е. [0,2], как вывод в последовательном порядке, если в любом другом большом массиве существует больше сегментов.
##expected output for above example:
[0,2]