影像组学

pyradiomics官方学习文档(1)--Hello Radi

2021-01-30  本文已影响0人  北欧森林

pyradiomics 官方文档里有几个示例文件,里面涉及了包括yaml文件设置、feature extraction、可视化等一系列影像组学常规操作,是非常好的学习资料。本人从今天开始学习这份资料,并以笔记的形式记录下来。
源码请参考:https://github.com/AIM-Harvard/pyradiomics

影像组学分析流程:


pyrad1.png

pyradiomics 软件包构架:


pyrad2.png

0 pyradiomics安装(略)
这里假装我们已经顺利安装好了pyradiomics包(主要是我也不太会装,是请教一个高手帮我解决的,所以,如果碰到安装问题,就老老实实求助电脑高手吧)

  1. 加载各种所需的module
from __future__ import print_function
import sys
import os
import logging
import six
from radiomics import featureextractor, getFeatureClasses
import radiomics
  1. 设置记录日志文件(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)
  1. 获取示例文件(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"
  1. 初始化特征提取器(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)
  1. 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)
  1. 设置滤波器(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

  1. 设置所需要提取的特征类别(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'])
  1. 查看特征文档(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__)
image.png
  1. 提取特征值(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]))
image.png

后记:
这篇笔记本来应该转帖:医学影像组学特征值(Radiomics Features)提取之Pyradiomics(二)使用篇 的。但是本人在学习该帖的过程中,发现里面的代码部分根本运行不出来。于是我返回到pyradiomics源文件里查看,发现作者省略了一些内容,致使代码不能衔接。在反复的比对、校正过程中,我忽然醒悟,为什么一定要拘泥于这篇帖子进行一行行的校对呢?干脆自己学习、整理一下这份官方资料吧!

上一篇下一篇

猜你喜欢

热点阅读