CBT_project/imaging/affine.py
2026-04-10 13:25:27 +08:00

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)