import os import numpy as np import nibabel as nib def standardize_affine(file_path, output_dir): img = nib.load(file_path) data = img.get_fdata() affine = img.affine.copy() # 初始化翻轉軸 flip_axes = [] # 檢查 X 軸方向 if affine[0, 0] < 0: flip_axes.append(0) affine[0, 0] *= -1 affine[0, 3] *= -1 # 修正平移部分 # 檢查 Y 軸方向 if affine[1, 1] < 0: flip_axes.append(1) affine[1, 1] *= -1 affine[1, 3] *= -1 # 修正平移部分 # 檢查 Z 軸方向 if affine[2, 2] < 0: flip_axes.append(2) affine[2, 2] *= -1 affine[2, 3] *= -1 # 修正平移部分 # 翻轉數據(如果需要) if flip_axes: data = np.flip(data, axis=tuple(flip_axes)) # 保存修正後的影像 standardized_img = nib.Nifti1Image(data, affine) output_path = os.path.join(output_dir, os.path.basename(file_path)) os.makedirs(os.path.dirname(output_path), exist_ok=True) nib.save(standardized_img, output_path)