【BUG】ValueError: Unable to find out axis 2.0 in start_ornt
ValueError: Unable to find out axis 2.0 in start_ornt
问题分析:
这个错误信息来自 nibabel
的 ornt_transform
函数,它是在尝试根据方向信息转换图像轴时出错了:
ValueError: Unable to find out axis 2.0 in start_ornt
这通常说明你传给 ornt_transform(start_ornt, end_ornt)
的参数中有问题,比如:
start_ornt
或end_ornt
的格式不正确- 轴的数量不一致或不符合预期(不是标准的 3D 图像)
解决办法:
-
检测轴的格式是否正确
- 若出现
nan
,则表明其格式不正确
img = nib.load(input_path) print(f"{input_path}", end=" ") start_ornt = nib.orientations.io_orientation(img.affine) print(list(start_ornt))
- 若出现
-
修复轴的格式
- 获取图像的
direction
、spacing
、origin
计算获取affine
- 将
affine
信息写入图像即可
def sitk_to_affine(image):direction = np.array(image.GetDirection()).reshape(3, 3)spacing = np.array(image.GetSpacing())origin = np.array(image.GetOrigin())affine = np.eye(4)affine[:3, :3] = direction * spacing[np.newaxis, :] # 列缩放affine[:3, 3] = originreturn affineimage = sitk.ReadImage(input_path) affine = sitk_to_affine(image)img = nib.load(input_path) data = img.get_fdata() fixed_img = nib.Nifti1Image(data, affine) nib.save(fixed_img, output_path)
- 获取图像的