核磁共振图像在采集过程中由于设备的抖动或者患者身体的轻微活动都会造成图像的磁场分布不均,这样的数据对于基于机器学习的模型的训练影响是很大的。解决这个问题常用的方法是磁场梯度校正。原理参考文章 N4ITK: Improved N3 Bias Correction。
上代码:
以下为调用部分的程序
def n4itk_norm(path,output_fn, n_dims=3, n_iters='[20,20,10,5]'):
'''
INPUT: (1) filepath 'path': path to mha T1 or T1c file
(2) directory 'parent_dir': parent directory to mha file
OUTPUT: writes n4itk normalized image to parent_dir under orig_filename_n.mha
'''
# self.output_fn = output_fn
# output_fn = '/media/ycs/f_n4.png'
# run n4_bias_correction.py path n_dim n_iters output_fn
subprocess.call('python N4BiasCorrection.py ' + path + ' ' + str(n_dims) + ' ' + n_iters + ' ' + output_fn, shell = True)
N4BiasCorrection.py 的主程序如下:
from nipype.interfaces.ants import N4BiasFieldCorrection
import sys
import os
import ast
if len(sys.argv) < 2:
print("INPUT from ipython: run n4_bias_correction input_image dimension n_iterations(optional, form:[n_1,n_2,n_3,n_4]) output_image(optional)")
sys.exit(1)
# if output_image is given
if len(sys.argv) > 3:
n4 = N4BiasFieldCorrection(output_image=sys.argv[4])
else:
n4 = N4BiasFieldCorrection()
# dimension of input image, input image
n4.inputs.dimension = int(sys.argv[2])
n4.inputs.input_image = sys.argv[1]
# if n_dinesions arg given
if len(sys.argv) > 2:
n4.inputs.n_iterations = ast.literal_eval(sys.argv[3])
n4.run()
本文来自本人课题项目总结,并非最好之方案和代码。如有错误,欢迎指正与赐教!