N4BiasFieldCorrection: MRI的N4偏场校正 N4偏置场的定义和产生原因
MR scans often display intensity non-uniformities due to variations in the magnetic field. So, one part of an image might appear lighter or darker when visualized, solely because of variations in the magnetic field. The map of these variations is called the bias field. The bias field can cause problems for a classifier as the variations in signal intensity are not due to any anatomical differences.
简单代码实现与讲解
1 2 3 4 5 6 7 import SimpleITK as sitk imagePath = 'C:/Users/RONG/Desktop/Images/001/Lung_image.nrrd'
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 input_image = sitk.ReadImage(imagePath) mask_image = sitk.OtsuThreshold(input_image, 0 , 1 , 200 ) input_image = sitk.Cast(input_image, sitk.sitkFloat32) corrector = sitk.N4BiasFieldCorrectionImageFilter() output_image = corrector.Execute(input_image, mask_image) output_image = sitk.Cast(output_image, sitk.sitkInt16) sitk.WriteImage(output_image, 'C:/Users/RONG/Desktop/Images/001/Lung_N4.nii.gz' ) sitk.WriteImage(mask_image, 'C:/Users/RONG/Desktop/Images/001/Lung_mask.nii.gz' )
以上可以在B站 可见
批处理
好的,没有问题。为了实现批处理,我们需要对代码进行一些修改,使其能够:
遍历一个文件夹中的所有文件。
通过文件名中的特定前缀来筛选要处理的文件。
根据原始文件名生成新的输出文件名(前面加上”N4_”)。
下面是修改后的完整代码,以及详细的使用说明。
批处理 Python 脚本 batch_n4_correction.py
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 import SimpleITK as sitkimport osimport globdef perform_n4_correction (input_path, output_path ): """ 对单个图像文件执行 N4 偏置场校正。 参数: input_path (str): 输入图像的完整路径。 output_path (str): 校正后图像的保存路径。 """ print ("-" * 50 ) print (f"正在处理: {os.path.basename(input_path)} " ) try : input_image = sitk.ReadImage(input_path) mask_image = sitk.OtsuThreshold(input_image, 0 , 1 , 200 ) input_image_float = sitk.Cast(input_image, sitk.sitkFloat32) corrector = sitk.N4BiasFieldCorrectionImageFilter() output_image = corrector.Execute(input_image_float, mask_image) output_image = sitk.Cast(output_image, sitk.sitkInt16) sitk.WriteImage(output_image, output_path) print (f"处理完成, 已保存至: {os.path.basename(output_path)} " ) except Exception as e: print (f"处理文件 {os.path.basename(input_path)} 时发生错误: {e} " )if __name__ == '__main__' : input_directory = './data' output_directory = './output' file_prefix = 'sub' file_extension = '.nii.gz' if not os.path.exists(output_directory): os.makedirs(output_directory) print (f"已创建输出文件夹: {output_directory} " ) search_pattern = os.path.join(input_directory, f"{file_prefix} *{file_extension} " ) file_list = glob.glob(search_pattern) if not file_list: print (f"在文件夹 '{input_directory} ' 中未找到任何以 '{file_prefix} ' 开头的文件。" ) else : print (f"找到 {len (file_list)} 个匹配的文件,开始批处理..." ) for input_file_path in file_list: base_name = os.path.basename(input_file_path) output_name = f"N4_{base_name} " output_file_path = os.path.join(output_directory, output_name) perform_n4_correction(input_file_path, output_file_path) print ("-" * 50 ) print ("所有任务已完成!" )
如何使用这个脚本
文件和文件夹结构:
为了方便管理,建议你创建如下的文件夹结构:
1 2 3 4 5 6 7 8 9 主文件夹/ ├── data/ < │ ├── sub -001. nii.gz │ ├── sub -002. nii.gz │ └── other-file.txt │ ├── output / < │ └── batch_n4_correction.py <
修改配置:
打开 batch_n4_correction.py 文件,找到 用户配置区域 并根据你的需求修改:
input_directory: 设置为你的原始数据文件夹路径(示例中是 './data')。
output_directory: 设置为你希望保存结果的文件夹路径(示例中是 './output')。
file_prefix: 这是关键 。设置你想要处理的文件的公共前缀。例如,如果你的文件名都是 sub-001.nii.gz, sub-002.nii.gz 等,你的前缀就是 sub-。如果想处理文件夹下所有 .nii.gz 文件,就把它设置成空字符串 ''。
运行脚本:
打开终端(Terminal)或命令提示符(Command Prompt),进入到主文件夹(包含脚本和data文件夹的地方),然后运行脚本:
Bash
1 python batch_n4_correction.py
脚本会自动查找 data 文件夹下所有符合前缀要求的文件,逐一进行 N4 校正,并将结果(以 N4_ 开头命名)保存到 output 文件夹中。