scipy和mahotas都实现了distance transform,但从图示来看,计算结果还是稍微有所差别的,个人比较倾向于使用scipy。
Code
import SimpleITK as sitk
import numpy as np
import mahotas
from scipy.ndimage import distance_transform_edt
import matplotlib.pyplot as plt
seg_name = './segmentation-4.nii'
slice= 1#507
seg_array = sitk.GetArrayFromImage(sitk.ReadImage(seg_name, sitk.sitkFloat32))#(841, 512, 512)
seg_array = seg_array[506:509]# for quickly calculation
print(seg_array.shape)
# scipy
plt.subplot(221);plt.imshow(seg_array[slice]);plt.title('scipy:seg_slice')
dmap = distance_transform_edt(seg_array==1).astype(np.float32)# foreground
plt.subplot(222);plt.imshow(dmap[slice]);plt.title('dmap==1')
dmap = distance_transform_edt(seg_array>=1).astype(np.float32)# foreground
plt.subplot(223);plt.imshow(dmap[slice]);plt.title('dmap>=1')
dmap = distance_transform_edt(seg_array>=2).astype(np.float32)# foreground
plt.subplot(224);plt.imshow(dmap[slice]);plt.title('dmap>=2')
plt.show()
#mahotas
plt.subplot(221);plt.imshow(seg_array[slice]);plt.title('mahotas:seg_slice')
dmap = mahotas.distance(seg_array==1)#(841, 512, 512)
plt.subplot(222);plt.imshow(dmap[slice]);plt.title('dmap==1')
dmap = mahotas.distance(seg_array>=1)
plt.subplot(223);plt.imshow(dmap[slice]);plt.title('dmap>=1')
dmap = mahotas.distance(seg_array>=2)
plt.subplot(224);plt.imshow(dmap[slice]);plt.title('dmap>=2')
plt.show()