ITK报错:输入图像物理空间不一致,计算分割指标是否需重采样?
问题解答
核心结论
- 是的,两个分割结果必须处于相同的物理空间,你遇到的错误就是因为两张图像的物理空间参数(原点、像素间距、方向矩阵)不匹配导致的。
- 必须执行重采样操作,将其中一张图像对齐到另一张的物理空间上才能正常计算指标。
错误原因解析
ITK的绝大多数图像运算(包括你代码里的b_contour * (dist_to_a <= tau)这类图像相乘操作)都要求输入图像的物理空间完全一致——原点、像素间距、方向矩阵三个参数必须完全匹配,否则就会抛出Inputs do not occupy the same physical space!的错误。
解决方法:添加重采样步骤
在计算Surface DSC之前,先把其中一张标签图像重采样到另一张的物理空间(建议以手动标注/原始影像的空间为参考)。用ITK的ResampleImageFilter即可实现,修改后的完整代码如下:
import SimpleITK as sitk def resample_to_reference(image, reference_image): """将输入图像重采样到参考图像的物理空间""" resampler = sitk.ResampleImageFilter() resampler.SetReferenceImage(reference_image) # 分割标签是离散值,必须用最近邻插值避免生成非整数标签 resampler.SetInterpolator(sitk.sitkNearestNeighbor) resampler.SetDefaultPixelValue(0) return resampler.Execute(image) def compute_surface_dsc(label_a, label_b, tau=2.0): """Compute Surface Dice From: Nikolov S et al. Clinically Applicable Segmentation of Head and Neck Anatomy for Radiotherapy: Deep Learning Algorithm Development and Validation Study J Med Internet Res 2021;23(7):e26151, DOI: 10.2196/26151 Args: label_a (sitk.Image): A mask to compare label_b (sitk.Image): Another mask to compare tau (float): Accepted deviation between contours (in mm) Returns: float: The Surface DSC between the two labels """ # 先执行重采样对齐物理空间 label_b = resample_to_reference(label_b, label_a) # 原函数逻辑保持不变 binary_contour_filter = sitk.BinaryContourImageFilter() binary_contour_filter.FullyConnectedOn() a_contour = binary_contour_filter.Execute(label_a) b_contour = binary_contour_filter.Execute(label_b) dist_to_a = sitk.SignedMaurerDistanceMap( a_contour, useImageSpacing=True, squaredDistance=False ) dist_to_b = sitk.SignedMaurerDistanceMap( b_contour, useImageSpacing=True, squaredDistance=False ) b_intersection = sitk.GetArrayFromImage(b_contour * (dist_to_a <= tau)).sum() a_intersection = sitk.GetArrayFromImage(a_contour * (dist_to_b <= tau)).sum() surface_sum = ( sitk.GetArrayFromImage(a_contour).sum() + sitk.GetArrayFromImage(b_contour).sum() ) return (b_intersection + a_intersection) / surface_sum
关键注意事项
- 重采样分割标签时必须用最近邻插值,绝对不能用线性插值等连续插值方法,否则会生成0/1之外的中间值,破坏标签的离散性,导致后续指标计算错误。
- 参考空间的选择要合理:通常以原始医学影像(CT/MRI)的物理空间为基准,把自动分割结果重采样到该空间后,再和已经处于该空间的手动标注对比。
内容的提问来源于stack exchange,提问作者Mrmr
相关产品推荐
相关产品推荐

