42 lines
1 KiB
Python
42 lines
1 KiB
Python
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)
|
|
|