本文介绍Pyradiomics的使用方法,和安装时遇到的坑。上一篇文章(医学影像组学特征值(Radiomics Features)提取之Pyradiomics(一)理论篇)介绍了Pyradiomics支持的图像类型和组学特征类型,将医学图像和Mask用作PyRadiomics的输入,对原图和经过滤波的派生图像进行影像组学特征提取,之后可以对组学特征进行进一步分析。
1 安装过程
安装Radiomics有两种方法,第一种是直接pip install radiomics,会生成一个radiomics包,在上一篇文章介绍的;
第二种是采用官方链接安装Pyradiomics,下面详细给一下安装步骤,为了避开之前采用第一种方法安装但实际想用第二个radiomics包导致的坑,我们重新建一个conda环境,pyradiomic是python编写的程序,运行需要环境支持。所以在这之前需要安装anaconda。
首先查看conda存在的环境:
conda env list
创建我们需要的新环境:
conda create -n Radiomics python=3.7
进入Radiomics环境:
source activate Radiomics
下载Pyradiomics安装包
git clone git://github.com/Radiomics/pyradiomics
进入Pyradiomics路径下
cd pyradiomics
安装Pyradiomics的依赖包
python -m pip install -r requirements.txt
安装Pyradiomics
python setup.py install
安装完之后,在命令行进入python环境中进行测试
发现有问题,我们就按照报错提示的进行处理,可以发现这样就没问题了,可以正常import和使用了。
我们可以查看一下这个radiomics包所在的位置
这里补充一下两种方法使用时的区别,如果之前已经用第一种方法安装了radiomics包,那在用第二种方法再安装之后,python环境默认首先使用第一种方法,这里有一些不兼容的地方,如:
from radiomics import featureextractor featureextractor.RadiomicsFeatureExtractor
会出现下面的报错
我们发现在第一个包的安装目录下radiomics的featureextractor下面确实没有RadiomicsFeatureExtractor,而是存在RadiomicsFeaturesExtractor,但是在第二个包的安装目录下是存在RadiomicsFeatureExtractor的,两者有些函数命名是不太一样的。
2 使用方法
首先导入必要的包
import SimpleITK as sitk import radiomics from radiomics import featureextractor
导入输入的CT数据
imageName, maskName = path_to_img, path_to_mask print('imageName, maskName', imageName, maskName) if imageName is None or maskName is None: # Something went wrong, in this case PyRadiomics will also log an error print('Error getting testcase!') exit()
一些设置文件
# Define settings for signature calculation # These are currently set equal to the respective default values settings = {} settings['binWidth'] = 25 settings['resampledPixelSpacing'] = None # [3,3,3] is an example for defining resampling (voxels with size 3x3x3mm) settings['interpolator'] = sitk.sitkBSpline
初始化feature extractor
# Initialize feature extractor extractor = featureextractor.RadiomicsFeatureExtractor(**settings)
设置图像类型,如原始图像,LoG、Wavelet等派生图像,默认情况下只使用原始图像
# By default, only original is enabled. Optionally enable some image types: # extractor.enableImageTypes(Original={}, LoG={}, Wavelet={})
设置特征类型,首先屏蔽所有类型
# Disable all classes extractor.disableAllFeatures()
输出Pyradiomics包的信息和图像的基本信息
print("Calculating features") featureVector = extractor.execute(imageName, maskName) for featureName in featureVector.keys(): print("Computed %s: %s" % (featureName, featureVector[featureName]))
从输出可以看到Pyradiomics包的依赖环境Numpy、SimpleITK、PyWavelet、Python等版本, Configuration_Settings设置文件,和图像的基本信息,如Dimension、Spacing、Size、Mean、Minimun、Maximun,图像Mask的基本信息,如Spacing、Size、BoundingBox等。
设置特征类型,选择firstorder类型
# Enable all features in firstorder extractor.enableFeatureClassByName('firstorder')
设置firstorder特征的内部特征类型,选择mean和skewness,我们这里不设置,直接输出全部特征
# Only enable mean and skewness in firstorder # extractor.enableFeaturesByName(firstorder=['Mean', 'Skewness'])
设置提取的特征类型后就可以输出影像组学特征了
可以看到我们提取了firstordr的18个特征,其他的特征提取方法类似,也可以设置一些派生图像。