pyradiomics官方学习文档(1)--Hello Radi
2021-01-30 本文已影响0人
北欧森林
pyradiomics
官方文档里有几个示例文件,里面涉及了包括yaml文件设置、feature extraction、可视化等一系列影像组学常规操作,是非常好的学习资料。本人从今天开始学习这份资料,并以笔记的形式记录下来。
源码请参考:https://github.com/AIM-Harvard/pyradiomics
影像组学分析流程:
![](https://img.haomeiwen.com/i24502658/712881c8c37f3767.png)
pyradiomics 软件包构架:
![](https://img.haomeiwen.com/i24502658/637c84281f5860d1.png)
0 pyradiomics安装(略)
这里假装我们已经顺利安装好了pyradiomics包(主要是我也不太会装,是请教一个高手帮我解决的,所以,如果碰到安装问题,就老老实实求助电脑高手吧)
- 加载各种所需的module
from __future__ import print_function
import sys
import os
import logging
import six
from radiomics import featureextractor, getFeatureClasses
import radiomics
- 设置记录日志文件(Setting up logging)
# Regulate verbosity with radiomics.setVerbosity
# radiomics.setVerbosity(logging.INFO) # Use logging.DEBUG for maximum output, default verbosity level = WARNING
# Get the PyRadiomics logger (default log-level = INFO)
logger = radiomics.logger
logger.setLevel(logging.DEBUG) # set level to DEBUG to include debug log messages in log file
# Write out all log entries to a file
handler = logging.FileHandler(filename='testLog.txt', mode='w')
formatter = logging.Formatter('%(levelname)s:%(name)s: %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
- 获取示例文件(Getting the testcase)(头颅CT及对应的label文件)
featureClasses = getFeatureClasses()
imageName, maskName = radiomics.getTestCase('brain1')
if imageName is None or maskName is None: # Something went wrong, in this case PyRadiomics will also log an error
raise Exception('Error getting testcase!') # Raise exception to prevent cells below from running in case of "run all"
- 初始化特征提取器(Initializing the feature extractor: Extraction Settings) (method 1)
# Use a parameter file, this customizes the extraction settings and also specifies the input image types to use and which features should be extracted
params = os.path.join('..', 'examples', 'exampleSettings', 'Params.yaml')
extractor = featureextractor.RadiomicsFeatureExtractor(params)
- Extraction Settings(method 2):
# Alternative: use hardcoded settings (separate for settings, input image types and enabled features)
settings = {}
settings['binWidth'] = 25
settings['resampledPixelSpacing'] = None
# settings['resampledPixelSpacing'] = [3, 3, 3] # This is an example for defining resampling (voxels with size 3x3x3mm)
settings['interpolator'] = 'sitkBSpline'
settings['verbose'] = True
extractor = featureextractor.RadiomicsFeatureExtractor(**settings)
- 设置滤波器(Input images: applying filters)
# By default, only 'Original' (no filter applied) is enabled. Optionally enable some image types:
# extractor.enableImageTypeByName('Wavelet')
# extractor.enableImageTypeByName('LoG', customArgs={'sigma':[3.0]})
# extractor.enableImageTypeByName('Square')
# extractor.enableImageTypeByName('SquareRoot')
# extractor.enableImageTypeByName('Exponential')
# extractor.enableImageTypeByName('Logarithm')
# Alternative; set filters in one operation
# This updates current enabled image types, i.e. overwrites custom settings specified per filter.
# However, image types already enabled, but not passed in this call, are not disabled or altered.
# extractor.enableImageTypes(Wavelet={}, LoG={'sigma':[3.0]})
print('Enabled input images:')
for imageType in extractor.enabledImagetypes.keys():
print('\t' + imageType)
Enabled input images:
Original
- 设置所需要提取的特征类别(Feature classes: setting which feature(classes) need to be calculated)
# Disable all classes
extractor.disableAllFeatures()
# Enable all features in firstorder
extractor.enableFeatureClassByName('firstorder')
# Alternative; only enable 'Mean' and 'Skewness' features in firstorder
# extractor.enableFeaturesByName(firstorder=['Mean', 'Skewness'])
- 查看特征文档(Getting the docstrings of the active features)
print('Active features:')
for cls, features in six.iteritems(extractor.enabledFeatures):
if len(features) == 0:
features = [f for f, deprecated in six.iteritems(featureClasses[cls].getFeatureNames()) if not deprecated]
for f in features:
print(f)
print(getattr(featureClasses[cls], 'get%sFeatureValue' % f).__doc__)
![](https://img.haomeiwen.com/i24502658/8140f14906d8641f.png)
- 提取特征值(Calculating the values of the active features)
print('Calculating features')
featureVector = extractor.execute(imageName, maskName)
Calculating features
# Show output
for featureName in featureVector.keys():
print('Computed %s: %s' % (featureName, featureVector[featureName]))
![](https://img.haomeiwen.com/i24502658/285cdc776dc07470.png)
后记:
这篇笔记本来应该转帖:医学影像组学特征值(Radiomics Features)提取之Pyradiomics(二)使用篇 的。但是本人在学习该帖的过程中,发现里面的代码部分根本运行不出来。于是我返回到pyradiomics
源文件里查看,发现作者省略了一些内容,致使代码不能衔接。在反复的比对、校正过程中,我忽然醒悟,为什么一定要拘泥于这篇帖子进行一行行的校对呢?干脆自己学习、整理一下这份官方资料吧!