场景:图像分割,一般会用将groud truth编码为背景通道和前景通道
现对groud truth计算Distrance transform
from scipy.ndimage import distance_transform_edt
import torch
temp1 = torch.from_numpy(seg_array == 2).view(1,DHW[0],DHW[1],DHW[2])*1
temp0 = 1- temp1
target = torch.cat([temp1,temp0],0)
target_dt = distance_transform_edt(target ).astype(np.float32)
结果如下图所示,毫无变化。
原因:两个通道恰巧相反,无法求Distrance transform
解决方案:
两个通道单独求Distrance transform,结果如下图所示。
temp = torch.from_numpy(seg_array == 2).view(1,DHW[0],DHW[1],DHW[2])
target = one_hot([2,DHW[0],DHW[1],DHW[2]], temp)*1#<class 'torch.Tensor'>
target_dt0 = distance_transform_edt(target[0,:,:,:]).astype(np.float32)
target_dt1 = distance_transform_edt(target[1, :, :, :]).astype(np.float32)