172 lines
6.9 KiB
Python
172 lines
6.9 KiB
Python
|
|
# import os
|
||
|
|
# import SimpleITK as sitk
|
||
|
|
# import difflib
|
||
|
|
|
||
|
|
# # 定義資料夾路徑
|
||
|
|
# T1C_folder_path = '/home/onlylian/sorted_OAR_files/T1C'
|
||
|
|
# CTCTC_folder_path = '/home/onlylian/sorted_OAR_files/CT+CTC'
|
||
|
|
# T1C_output_folder_path = '/home/onlylian/T1C_label_folder'
|
||
|
|
# CTCTC_output_folder_path = '/home/onlylian/CT+CTC_label_folder'
|
||
|
|
|
||
|
|
# # 定義組織標籤對應關係
|
||
|
|
# labels = {
|
||
|
|
# "background": "0",
|
||
|
|
# "Brainstem": "1",
|
||
|
|
# "Right_Eye": "2",
|
||
|
|
# "Left_Eye": "3",
|
||
|
|
# "Optic_Chiasm": "4",
|
||
|
|
# "Right_Optic_Nerve": "5",
|
||
|
|
# "Left_Optic_Nerve": "6"
|
||
|
|
# }
|
||
|
|
|
||
|
|
# # 確保輸出資料夾存在
|
||
|
|
# os.makedirs(T1C_output_folder_path, exist_ok=True)
|
||
|
|
# os.makedirs(CTCTC_output_folder_path, exist_ok=True)
|
||
|
|
|
||
|
|
# def resample_image(image, reference_image):
|
||
|
|
# resample = sitk.ResampleImageFilter()
|
||
|
|
# resample.SetReferenceImage(reference_image)
|
||
|
|
# resample.SetInterpolator(sitk.sitkNearestNeighbor)
|
||
|
|
# resample.SetDefaultPixelValue(0)
|
||
|
|
# return resample.Execute(image)
|
||
|
|
|
||
|
|
# def process_images(input_folder, output_folder, image_type):
|
||
|
|
# # 獲取所有病人的資料夾路徑
|
||
|
|
# patient_folders = sorted([os.path.join(dp, d) for dp, dn, filenames in os.walk(input_folder) for d in dn])
|
||
|
|
|
||
|
|
# file_counter = 1
|
||
|
|
|
||
|
|
# for patient_folder in patient_folders:
|
||
|
|
# # 創建空的影像,用來合成所有器官
|
||
|
|
# combined_image = None
|
||
|
|
# # 獲取病人文件夾中的所有文件名,並轉換為小寫形式
|
||
|
|
# patient_files = {f.lower(): f for f in os.listdir(patient_folder)}
|
||
|
|
# filename = patient_folder.split('/')[-2]
|
||
|
|
|
||
|
|
# # 遍歷每個病人的所有影像文件
|
||
|
|
# for organ_name, label in labels.items():
|
||
|
|
# organ_filename = f'struct_{organ_name}.nii.gz'.lower()
|
||
|
|
# # 使用 difflib.get_close_matches 查找相似文件名
|
||
|
|
# possible_matches = difflib.get_close_matches(organ_filename, patient_files.keys(), n=1, cutoff=0.8)
|
||
|
|
|
||
|
|
# if possible_matches:
|
||
|
|
# matched_filename = patient_files[possible_matches[0]]
|
||
|
|
# organ_path = os.path.join(patient_folder, matched_filename)
|
||
|
|
# organ_image = sitk.ReadImage(organ_path)
|
||
|
|
|
||
|
|
# if combined_image is None:
|
||
|
|
# # 初始化合成影像
|
||
|
|
# combined_image = sitk.Image(organ_image.GetSize(), sitk.sitkUInt8)
|
||
|
|
# combined_image.CopyInformation(organ_image)
|
||
|
|
|
||
|
|
# # 重新取樣器官影像以匹配合成影像的大小
|
||
|
|
# resampled_organ_image = resample_image(organ_image, combined_image)
|
||
|
|
|
||
|
|
# # 將器官影像添加到合成影像中
|
||
|
|
# organ_array = sitk.GetArrayFromImage(resampled_organ_image)
|
||
|
|
# combined_array = sitk.GetArrayFromImage(combined_image)
|
||
|
|
# combined_array[organ_array > 0] = int(label)
|
||
|
|
|
||
|
|
# combined_image = sitk.GetImageFromArray(combined_array)
|
||
|
|
# combined_image.CopyInformation(resampled_organ_image)
|
||
|
|
|
||
|
|
# # 保存合成影像
|
||
|
|
# if combined_image:
|
||
|
|
# output_filename = f'{image_type}_label_{filename}.nii.gz'
|
||
|
|
# output_path = os.path.join(output_folder, output_filename)
|
||
|
|
# sitk.WriteImage(combined_image, output_path)
|
||
|
|
# print(f'Saved combined image to {output_path}')
|
||
|
|
# file_counter += 1
|
||
|
|
|
||
|
|
# # 處理 T1C 影像
|
||
|
|
# print("Processing T1C images...")
|
||
|
|
# process_images(T1C_folder_path, T1C_output_folder_path, 'T1C')
|
||
|
|
|
||
|
|
# # 處理 CT+CTC 影像
|
||
|
|
# print("Processing CT+CTC images...")
|
||
|
|
# process_images(CTCTC_folder_path, CTCTC_output_folder_path, 'CT+CTC')
|
||
|
|
|
||
|
|
# print("All processing completed.")
|
||
|
|
|
||
|
|
import os
|
||
|
|
import SimpleITK as sitk
|
||
|
|
import difflib
|
||
|
|
|
||
|
|
# 定义文件夹路径
|
||
|
|
T1_folder_path = '/mnt/1218/onlylian/sorted_OAR_files_test/T1C'
|
||
|
|
T1_output_folder_path = '/mnt/1218/onlylian/T1C_label_folder_test_2'
|
||
|
|
|
||
|
|
# 定义组织标签对应关系
|
||
|
|
labels = {
|
||
|
|
"background": "0",
|
||
|
|
"Brainstem": "1",
|
||
|
|
"Right_Eye": "2",
|
||
|
|
"Left_Eye": "3",
|
||
|
|
"Optic_Chiasm": "4",
|
||
|
|
"Right_Optic_Nerve": "5",
|
||
|
|
"Left_Optic_Nerve": "6"
|
||
|
|
}
|
||
|
|
|
||
|
|
# 确保输出文件夹存在
|
||
|
|
os.makedirs(T1_output_folder_path, exist_ok=True)
|
||
|
|
|
||
|
|
def resample_image(image, reference_image):
|
||
|
|
resample = sitk.ResampleImageFilter()
|
||
|
|
resample.SetReferenceImage(reference_image)
|
||
|
|
resample.SetInterpolator(sitk.sitkNearestNeighbor)
|
||
|
|
resample.SetDefaultPixelValue(0)
|
||
|
|
return resample.Execute(image)
|
||
|
|
|
||
|
|
def process_images(input_folder, output_folder, image_type):
|
||
|
|
# 获取所有病人的文件夹路径
|
||
|
|
patient_folders = sorted([os.path.join(dp, d) for dp, dn, filenames in os.walk(input_folder) for d in dn])
|
||
|
|
|
||
|
|
file_counter = 1
|
||
|
|
|
||
|
|
for patient_folder in patient_folders:
|
||
|
|
# 创建空的图像,用来合成所有器官
|
||
|
|
combined_image = None
|
||
|
|
# 获取病人文件夹中的所有文件名,并转换为小写形式
|
||
|
|
patient_files = {f.lower(): f for f in os.listdir(patient_folder)}
|
||
|
|
filename = patient_folder.split('/')[-2]
|
||
|
|
|
||
|
|
# 遍历每个病人的所有图像文件
|
||
|
|
for organ_name, label in labels.items():
|
||
|
|
organ_filename = f'struct_{organ_name}.nii.gz'.lower()
|
||
|
|
# 使用 difflib.get_close_matches 查找相似文件名
|
||
|
|
possible_matches = difflib.get_close_matches(organ_filename, patient_files.keys(), n=1, cutoff=0.8)
|
||
|
|
|
||
|
|
if possible_matches:
|
||
|
|
matched_filename = patient_files[possible_matches[0]]
|
||
|
|
organ_path = os.path.join(patient_folder, matched_filename)
|
||
|
|
organ_image = sitk.ReadImage(organ_path)
|
||
|
|
|
||
|
|
if combined_image is None:
|
||
|
|
# 初始化合成图像
|
||
|
|
combined_image = sitk.Image(organ_image.GetSize(), sitk.sitkUInt8)
|
||
|
|
combined_image.CopyInformation(organ_image)
|
||
|
|
|
||
|
|
# 重新采样器官图像以匹配合成图像的大小
|
||
|
|
resampled_organ_image = resample_image(organ_image, combined_image)
|
||
|
|
|
||
|
|
# 将器官图像添加到合成图像中
|
||
|
|
organ_array = sitk.GetArrayFromImage(resampled_organ_image)
|
||
|
|
combined_array = sitk.GetArrayFromImage(combined_image)
|
||
|
|
combined_array[organ_array > 0] = int(label)
|
||
|
|
|
||
|
|
combined_image = sitk.GetImageFromArray(combined_array)
|
||
|
|
combined_image.CopyInformation(resampled_organ_image)
|
||
|
|
|
||
|
|
# 保存合成图像
|
||
|
|
if combined_image:
|
||
|
|
output_filename = f'{image_type}_label_{filename}.nii.gz'
|
||
|
|
output_path = os.path.join(output_folder, output_filename)
|
||
|
|
sitk.WriteImage(combined_image, output_path)
|
||
|
|
print(f'Saved combined image to {output_path}')
|
||
|
|
file_counter += 1
|
||
|
|
|
||
|
|
# 处理 T1C 图像
|
||
|
|
print("Processing T1C images...")
|
||
|
|
process_images(T1_folder_path, T1_output_folder_path, 'T1C')
|
||
|
|
|
||
|
|
print("Processing completed.")
|