Это право Numpy изменить форму? - PullRequest
1 голос
/ 07 января 2020

Я только что начал с Python и Numpy.

Я нашел этот фрагмент кода:

def preprocessing(FLAIR_array, T1_array):

    brain_mask = np.ndarray(np.shape(FLAIR_array), dtype=np.float32)
    brain_mask[FLAIR_array >=thresh] = 1
    brain_mask[FLAIR_array < thresh] = 0
    for iii in range(np.shape(FLAIR_array)[0]):
        brain_mask[iii,:,:] = scipy.ndimage.morphology.binary_fill_holes(brain_mask[iii,:,:])  #fill the holes inside brain

    FLAIR_array -=np.mean(FLAIR_array[brain_mask == 1])      #Gaussion Normalization
    FLAIR_array /=np.std(FLAIR_array[brain_mask == 1])

    rows_o = np.shape(FLAIR_array)[1]
    cols_o = np.shape(FLAIR_array)[2]
    FLAIR_array = FLAIR_array[:, int((rows_o-rows_standard)/2):int((rows_o-rows_standard)/2)+rows_standard, int((cols_o-cols_standard)/2):int((cols_o-cols_standard)/2)+cols_standard]

Что они делают в последней строке? В этом:

FLAIR_array[:, int((rows_o-rows_standard)/2):int((rows_o-rows_standard)/2)+rows_standard, int((cols_o-cols_standard)/2):int((cols_o-cols_standard)/2)+cols_standard]

FLAIR_array имеет такую ​​форму: [48,240,240].

48 - количество изображений. 240, 240 - это его высота и остроумие.

Или, может быть, они его нарезают.

Ответы [ 2 ]

1 голос
/ 07 января 2020

Трудно сказать, так как стандартная строка не определена внутри функции. Но если вы переписываете его как (отбрасывая некоторые из int (..) для повышения читабельности)

rows_center = int(rows_o/2)
cols_center = int(cols_o/2)
delta_rows = int(rows_standard)
delta_cols = int(cols_standard)
FLAIR_array = FLAIR_array[:, rows_center - rows_delta/2:rows_center + rows_delta/2, cols_center - cols_delta/2:cols_center + cols_delta/2]

Кажется, что они извлекают для каждого изображения небольшую обрезку с центром в row_center и cols_center с числом строки и столбцы равны delta_rows, delta_cols

1 голос
/ 07 января 2020

Да, они выполняют только Numpy нарезку (а не изменение формы) на FLAIR_array, результирующие размеры которых будут:

  • Все элементы в 0-м измерении сохраняются из исходного массива (как указано :)
  • Элементы int((rows_o-rows_standard)/2) до int((rows_o-rows_standard)/2)+rows_standard - 1 используются из первого измерения из исходного массива
  • Элементы int((cols_o-cols_standard)/2) до int((cols_o-cols_standard)/2)+cols_standard - 1 используются из 2-го измерения из исходного массива
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...