影像组学pyradiomics教程----自定义特征提取

本文介绍个性化特征抽取的三种方法:指定图像类别、特征类别及设置。详细解释了如何使用PyRadiomics进行定制化特征抽取,包括激活不同图像类型、特征类别及调整设置。

3.1 Types of Customization

个性化特征抽取的方法有三种:

  1. 指定哪种图像类别(原始图像/衍生图像)用于提取特征;
  2. 指定抽取哪种特征(特征类别);
  3. 指定设置。设置可以用于进行预处理,定制特定的滤波器(对图像进行滤波)和特征类别
提示:
  • 在对特征提取器和某个特征类别进行初始化的时候,我们可以使用关键字参数来提供第三类参数(即指定设置);
  • 第一类参数(图像类别)和第二类参数(特征类别或特征)只能使用参数文件进行初始化。如果没有使用参数文件或者需要在初始化后更改这些参数,可以使用对应的函数;

3.1.1 Image Types

可用于提取特征的图像类别有:

  • Original
  • Wavelet
  • LoG
  • Square
  • SquareRoot
  • Logarithm
  • Exponential

激活的图像类别存储在特征抽取器的实例对象的_enabledImageTypes字典中,可以使用enableAllImageTypes(),disableAllImageTypes(),enableImageTypeByName() enableImageTypes()进行更改。

在应用任何滤波器(即转换图像类别)之时或之后,我们可以定制这种图像类型的特征抽取方式

提示:
  • 默认情况下,只有原始图像处于激活状态
3.1.2 Enabled Features

可用于提取的特征有:

  • firstorder
  • shape
  • glcm
  • glrlm
  • glszm
  • gldm
  • ngtdm

可用特征可以动态地更改,激活的特征存储在特征抽取器的实例对象的_enabledFeature字典中,可通过enableAllFeatures(), disableAllFeatures(), enableFeatureClassByName() 和 enableFeaturesByName()进行更改。_enabledFeature字典中的键为已激活的特征类别名,对应的键值为一个列表,列表元素为该特征类别下激活的特征名。如果键值为None或者是空列表,则该特征类别下所有的特征都被激活。

提示:

默认情况下,所有的特征类别和所有的特征都处于激活状态

3.1.3 Settings

除了定制需要抽取什么(图像类别,特征)外,PyRadiomics提供了大量的Settings来个性化如何进行特征抽取。Settings储存在特征抽取器的实例对象的setttings字典中,键名为相关的设置名称。

Settings初始化的方式有三种:

  1. 在特征抽取器进行初始化的时候,通过关键字参数对Settings进行初始化(设置的名称为关键字,设置的值作为参数值,例如binWidth=25);
  2. 直接使用setttings字典进行交互;
  3. 直接使用参数文件
提示:

当直接使用特征类别的时候,特征类别级别的Settings能够在对特征类别进行初始化的时候通过关键字参数进行初始化


3.2 Parameter File

所有三类用来自定义特征提取的参数可通过一个yaml结构的文本文件提供。通过这种方式提供的参数能够避免使用上述函数写代码带来的麻烦,而且易于参数共享。 
通过yaml文件提供参数的示例可参考 pyradiomics/examples/exampleSettings 下的文件,也可参考如下文本:

  1. 1. imageType:
  2. 2. Original: {}
  3. 3. LoG: {'sigma' : [1.0, 3.0]}
  4. 4. Wavelet:
  5. 5. binWidth: 10
  6. 6.
  7. 7. featureClass:
  8. 8. glcm:
  9. 9. glrlm: []
  10. 10. firstorder: ['Mean',
  11. 11. 'StandardDeviation']
  12. 12. shape:
  13. 13. - Volume
  14. 14. - SurfaceArea
  15. 15.
  16. 16. setting:
  17. 17. binWidth: 25
  18. 18. resampledPixelSpacing:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

三种用于个性化特征抽取的方法命名如下:

  • imageType: image type to calculate features on.< value > is custom kwarg settings(dictionary). if is an empty dictionary (‘{}’), no customsettings are added for this input image.
  • featureClass: Feature class to enable, is list of strings representing enabledfeatures. If no is specified or is an empty list(‘[]’), all features for this class are enabled.
  • setting: Setting to use for pre processing and class specific settings. if no is specified, the value for this setting is set to None.
<think>好的,我需要回答用户关于如何结合使用PyRadiomics和Multi-hot编码处理眼底医学影像的问题。首先,我得理清PyRadiomics特征提取步骤,然后解释Multi-hot的应用。可能还需要考虑如何将两者结合起来进行分类任务。 用户提到PyRadiomics和Multi-hot,所以第一步要分别解释这两部分。PyRadiomics主要用于从医学影像中提取组学特征,这包括形状、纹理等。我需要参考引用[1],其中提到了pyradiomics的官方文档,强调特征的计算公式和说明。可能需要分步骤说明如何安装库、读取影像、定义参数、提取特征等。比如,用户需要加载眼底图像,分割病灶区域,然后使用PyRadiomics提取特征,输出特征矩阵。 接下来是Multi-hot编码部分。根据引用[2]、[3]、[4]、[5],Multi-hot用于处理多标签分类问题,比如一个患者可能有多个病变特征。需要说明如何将提取特征转换为Multi-hot向量。例如,如果有多个病变类型,每个类型作为一个二进制位,存在则为1。这里可能需要结合sklearn的MultiLabelBinarizer,如引用[3]中的代码示例,将标签转换为多热编码。 然后是如何将两者结合进行分类。可能需要构建一个流程:提取特征后用Multi-hot处理标签,再输入分类模型。这里要注意特征工程和标签编码的结合方式,可能使用机器学习模型如随机森林,或者深度学习模型,处理Multi-hot的标签可能需要多输出模型或自定义损失函数。 用户可能的问题包括具体代码实现、参数设置、数据预处理步骤、如何处理多标签数据等。需要确保步骤清晰,代码示例正确,比如PyRadiomics提取代码和MultiLabelBinarizer的使用。同时,需要引用正确的参考文献,比如在PyRadiomics部分引用[^1],Multi-hot部分引用[^2][^3][^4][^5]。 可能遇到的挑战是,如何正确配置PyRadiomics的参数,确保影像和分割掩模的正确对应,以及处理Multi-hot时的维度问题。需要提醒用户注意数据格式和特征归一化,分类模型的选择和评估方法也需要简要提及。 最后,生成的相关问题需要围绕步骤中的关键点,如特征提取的具体方法、Multi-hot的应用场景、分类模型的选择等。确保问题有助于用户深入理解流程中的每个环节。</think>### PyRadiomics与Multi-hot编码在眼底医学影像中的联合应用 #### 一、PyRadiomics特征提取流程 1. **安装与数据准备** ```python pip install pyradiomics ``` 需准备眼底医学影像(如OCT或眼底彩照)及对应的病灶区域分割掩模(掩模为二值图像,标记感兴趣区域ROI)。 2. **特征提取代码示例** ```python from radiomics import featureextractor import SimpleITK as sitk # 加载影像和掩模 image = sitk.ReadImage('眼底影像.nii.gz') mask = sitk.ReadImage('病灶掩模.nii.gz') # 配置参数(可自定义滤波器) params = {'binWidth': 25, 'resampledPixelSpacing': None} # 初始化提取器 extractor = featureextractor.RadiomicsFeatureExtractor(**params) # 提取特征(包含形状、一阶统计量、纹理等共1000+特征) result = extractor.execute(image, mask) features = list(result.values()) # 转换为特征向量 ``` 3. **输出特征类型** - 形状特征:如病灶体积$V=\sum voxel$、表面积$S$等 - 纹理特征:灰度共生矩阵(GLCM)的对比度$Contrast = \sum_{i,j}|i-j|^2 p(i,j)$ - 高阶特征:小波变换后的纹理分析 #### 二、Multi-hot编码实现方法 1. **适用场景** 当单个样本存在多个分类标签时(如同时存在黄斑水肿、出血、渗出等病变),需用Multi-hot编码表示标签。例如: ```python # 假设标签定义:0=正常, 1=水肿, 2=出血, 3=渗出 y_raw = [[1,2], [3], [1,3]] # 三个样本的原始标签 # 使用sklearn转换 from sklearn.preprocessing import MultiLabelBinarizer mlb = MultiLabelBinarizer(classes=[0,1,2,3]) y_multi_hot = mlb.fit_transform(y_raw) # 输出:[[0 1 1 0], [0 0 0 1], [0 1 0 1]] ``` 此处每个向量维度对应一个病变类型,存在则为1[^3][^5]。 2. **与特征矩阵的联合使用** ```python import pandas as pd # 假设X为PyRadiomics提取特征DataFrame,y为标签列表 X = pd.DataFrame([features1, features2, features3]) y = [[1,2], [3], [1,3]] # 转换标签并拆分数据集 y_encoded = mlb.fit_transform(y) X_train, X_test, y_train, y_test = train_test_split(X, y_encoded) ``` #### 三、分类模型构建 1. **多标签分类模型选择** - **传统方法**:使用`sklearn.multioutput.MultiOutputClassifier`包装器 ```python from sklearn.ensemble import RandomForestClassifier from sklearn.multioutput import MultiOutputClassifier model = MultiOutputClassifier(RandomForestClassifier(n_estimators=100)) model.fit(X_train, y_train) ``` - **深度学习方法**:构建多输出神经网络 ```python import tensorflow as tf model = tf.keras.Sequential([ tf.keras.layers.Dense(128, activation='relu', input_shape=(X_train.shape[1],)), tf.keras.layers.Dense(64, activation='relu'), tf.keras.layers.Dense(y_encoded.shape[1], activation='sigmoid') # 多标签输出 ]) model.compile(loss='binary_crossentropy', optimizer='adam') ``` 2. **评估指标** 需使用多标签专用指标: ```python from sklearn.metrics import hamming_loss, jaccard_score print("Hamming Loss:", hamming_loss(y_test, y_pred)) print("Jaccard Similarity:", jaccard_score(y_test, y_pred, average='samples')) ``` #### 四、完整流程示例 ```mermaid graph TD A[原始眼底影像] --> B[病灶分割] B --> C[PyRadiomics特征提取] C --> D[特征矩阵X] A --> E[医生标注病变类型] E --> F[Multi-hot编码标签y] D & F --> G[多标签分类模型训练] G --> H[病变类型预测] ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值