数据集:公开数据集LiTS
背景:已经完成了nnUNet的数据转换的部分(即Task040_Liver已经转换成Dataset040_Liver)
下一步执行数据预处理操作的时候,出现了错误Error: Spacing mismatch between segmentation and corresponding images.
数据预处理:nnUNetv2_plan_and_preprocess -d 040 --verify_dataset_integrity
原因:分割标签和原始图像的空间分辨率(体素间距)不一致
解决:因此我们要将label和原始图像的空间分辨率(体素间距)统一
from nibabel.processing import resample_from_to
import nibabel as nib
import os
# imgs_path是Dataset040_Liver的imagesTr
# lab_path是Dataset040_Liver的labelsTr
# save_path是自己设置的。统一体素间距后label保存的路径,可以自定义,后面取代Dataset040_Liver的labelsTr
imgs_path = r'F:\nnUNet-master\nnUNet-master\nnUNetFrame\nnUNet_raw\Dataset040_Liver\imagesTr'
lab_path = r'F:\nnUNet-master\nnUNet-master\nnUNetFrame\nnUNet_raw\Dataset040_Liver\labelsTr'
save_path = r'F:\nnUNet-master\nnUNet-master\nnUNetFrame\nnUNet_raw\Dataset040_Liver\labelsTr\label'
for image in os.listdir(imgs_path):
img_path = imgs_path + '/' + image # image:Liver_000_0000.nii.gz
original_img = nib.load(img_path) # 原始图像的路径
base_name = image.split("_")[:-1]
label_name = "_".join(base_name) + ".nii.gz" # Liver_000.nii.gz
label_path = lab_path + '/' + label_name # 原始label的路径
segmentation_img = nib.load(label_path)
target_affine = original_img.affine
target_shape = original_img.shape
resampled_seg = resample_from_to(segmentation_img, (target_shape, target_affine), order=0)
save_path_ = save_path + '/' + label_name
nib.save(resampled_seg, save_path_)
print("Finish:", save_path_)
PS: 看注释