我们有很多医学图像是由黑色图像组成的。我试图通过将NIfTI文件转换为一系列png文件,删除png文件并转换回来来消除它们。有人知道更好的方法吗?
您可以使用SimpleITK做到这一点,但是您是否要用其他东西替换黑色图像?或者你只是把剩下的图像压在一起?这会打乱2d切片的3d位置。
如果你想去掉一个黑色的切片并折叠剩下的切片,你可以这样做:
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")
在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形式给出),现在是在一个不同的,更高的点在图像中。
我不认为这是你想要的?否则就只能这样了