#png #nifti
Вопрос:
Многие медицинские изображения, которые у нас есть, состоят из черных изображений. Я попытался устранить их, преобразовав файлы NIfTI в серию PNG, удалив PNG и преобразовав обратно. Кто-нибудь знает лучший способ сделать это?
Ответ №1:
Вы могли бы сделать это с помощью SimpleITK, но вы заменяете черные изображения чем-то другим? Или вы просто сжимаете оставшиеся изображения вместе? Это испортит 3d-положение 2d-срезов.
Если вы хотите просто взять черный ломтик и свернуть оставшиеся ломтики, вы сделаете что-то вроде этого:
import SimpleITK as sitk
img = sitk.ReadImage("your_3d_image.nii")
slices = []
# Extract the Z slices into a list
for i in img.GetDepth():
slices.append(img[i])
# Remove whichever slices you don't like
slices.remove(42)
# Create a new 3d image by joining together the remaining slices
new_img = sitk.JoinSeries(slices)
sitk.WriteImage(new_img, "your_new_3d_image.nii")
Комментарии:
1. да, действительно, простое удаление фрагмента без учета влияния на сопоставление изображения с миром может привести к возникновению всевозможных проблем…
2. Спасибо, это действительно полезно.
Ответ №2:
Достаточно легко извлечь фрагмент в python/matlab:
import nibabel as nb;
import numpy as np;
img = nb.load ( "MNI152_T1_2mm_brain_mask.nii.gz" );
imgvol = np.array ( img.dataobj );
imgvol = imgvol [ :, :, 1:90 ]; # remove 1st and last
newimg = nb.Nifti1Image ( imgvol, img.affine );
newimg.to_filename ( "/tmp/newimg.nii.gz" );
или что-то подобное, но (при условии, что вы получаете 3D-сканирование и что каждый срез соответствует определенной позиции): это эффективно перемещает все срезы выше тех, которые вы удаляете, вниз на 1 позицию среза каждый.
Это имеет эффект, который вы можете сразу увидеть в (лучшем) средстве просмотра: начало системы координат (заданной формами Q и S) теперь находится в другой, более высокой точке изображения.
Я не думаю, что это то, чего ты хочешь? В противном случае это все, что нужно сделать.