Нарезка трехмерного массива против проецирования его - PullRequest
0 голосов
/ 06 ноября 2019

Ссылка на файл массива

Я новичок в обработке изображений и пытаюсь понять проекцию. Поэтому, когда у нас есть 3D-изображение, это просто трехмерный массив, и я просматриваю его, вырезая 2D-массив из 3D-массива. Чтобы сделать ортогональную проекцию, я просто суммирую массивы вдоль одной оси. Вот мой код для этого:

import numpy as np
import matplotlib.pyplot as plt

#shape of the 'image' array is (256, 256, 176) so i am assuming there are 256 slices and row and column of each slice is 256x176
image = np.load('brain_ct.npy')

#when i sum along axis 0 or axis 1, the image shows up as blank with some warnings
#(Warning: converting a masked element to nan)
#only summing up along axis 2 works (not sure why is that)
collapsed = np.sum(image, axis=2)

plt.imshow(collapsed, cmap='gray')

Я не уверен, почему суммирование по осям 0 и 1 не работает. Кроме того, я не уверен, что ось 2 (сверху / вниз / сторона) дает мне? Наконец, если суммирование по одной оси дает ортогональную проекцию, как я могу выполнить наклонную и перспективную проекцию. Есть ли матрица преобразования, на которую мне нужно умножить координаты изображения?

Спасибо всем.

1 Ответ

1 голос
/ 06 ноября 2019

Появляется ошибка, показывающая, что вы загружаете numpy.ma.MaskedArray, а не массив NumPy. Однако я не понимаю, почему вы не получите ошибку по оси = 2, поскольку любые маскированные точки будут проецироваться вдоль каждого измерения. Возможно, вы замаскировали всю плоскость, а затем суммирование по 0 просто даст вам массив nans. Я не уверен, но может случиться так, что np.sum не будет правильно обрабатывать замаскированные массивы, и вам следует вместо этого использовать image.sum(), который может лучше знать, как обращаться с масками. Если вы поделитесь своим файлом .npy, мы можем предоставить более персонализированный ответ.

В общем, суммирование - это один из способов проецирования, но вы также можете сделать max(), который является наиболее распространенной формой объемного проецирования. .

Что касается наклонных проекций, это гораздо больше, чем можно кратко суммировать в SO-ответе, но в целом да, вы хотите преобразовать свое изображение и затем выполнить проекцию. Вы можете посмотреть модуль scipy.ndimage для получения дополнительной информации об этом.

...