生境特征提取

本节介绍如何使用 HABIT 从生境图中提取特征。

概述

生境特征提取是生境分析的重要步骤,从生成的生境图中提取各种类型的特征,为后续的机器学习建模做准备。

HABIT 支持多种特征类型:

  • 传统影像组学特征: 使用 pyradiomics 提取标准影像组学特征

  • 非影像组学特征: 提取非标准的影像组学特征

  • 整体生境特征: 提取整个生境图谱的特征

  • 每个生境特征: 提取每个生境区域的特征

  • MSI 特征: 空间交互矩阵(Spatial Interaction Matrix)特征

  • ITH 特征: 肿瘤内异质性特征

CLI 使用方法

基本语法:

habit extract --config <config_file>

参数说明:

  • --config, -c: 配置文件路径(必需)

使用示例:

habit extract --config ./demo_data/config_extract_features.yaml

输出:

特征文件将保存在配置文件中指定的输出目录。

Python API 使用方法

基本用法:

from habit.core.common.service_configurator import ServiceConfigurator
from habit.core.habitat_analysis.config_schemas import FeatureExtractionConfig

# 加载配置
config = FeatureExtractionConfig.from_file('./config_extract_features.yaml')

# 创建配置器
configurator = ServiceConfigurator(config=config)

# 创建特征提取器
analyzer = configurator.create_feature_extractor()

# 运行特征提取
analyzer.run(
    feature_types=config.feature_types,
    n_habitats=config.n_habitats
)

详细示例:

import logging
from habit.core.common.service_configurator import ServiceConfigurator
from habit.core.habitat_analysis.config_schemas import FeatureExtractionConfig
from habit.utils.log_utils import setup_logger
from pathlib import Path

# 设置日志
output_dir = Path('./results/features')
output_dir.mkdir(parents=True, exist_ok=True)
logger = setup_logger(
    name='feature_extraction',
    output_dir=output_dir,
    log_filename='feature_extraction.log',
    level=logging.INFO
)

# 加载配置
config = FeatureExtractionConfig.from_file('./config_extract_features.yaml')

# 创建配置器
configurator = ServiceConfigurator(config=config, logger=logger, output_dir=str(output_dir))

# 创建特征提取器
analyzer = configurator.create_feature_extractor()

# 运行特征提取
logger.info("开始特征提取")
analyzer.run(
    feature_types=config.feature_types,
    n_habitats=config.n_habitats
)
logger.info("特征提取完成!")

YAML 配置详解

配置文件结构:

# 参数文件
params_file_of_non_habitat: ./parameter.yaml  # 从原始图像提取特征的参数文件
params_file_of_habitat: ./parameter_habitat.yaml  # 从生境图提取特征的参数文件

# 数据目录
raw_img_folder: ./preprocessed/processed_images  # 原始图像根目录
habitats_map_folder: ./results/habitat  # 生境图根目录
out_dir: ./results/features  # 输出目录

# 特征提取参数
n_processes: 3  # 并行进程数
habitat_pattern: '*_habitats.nrrd'  # 生境文件匹配模式

# 特征类型
feature_types:
  - traditional      # 传统影像组学特征
  - non_radiomics   # 非影像组学特征
  - whole_habitat   # 整体生境特征
  - each_habitat    # 每个生境特征
 - msi             # MSI(Spatial Interaction Matrix)特征
  - ith_score       # ITH 特征

n_habitats:   # 生境数量(空表示自动检测)

# 调试参数
debug: false  # 启用调试模式

字段说明:

params_file_of_non_habitat: 从原始图像提取特征的参数文件

  • 使用 pyradiomics 提取传统影像组学特征

  • 参考 pyradiomics 文档了解参数说明

params_file_of_habitat: 从生境图提取特征的参数文件

  • 使用 pyradiomics 从生境图中提取特征

  • 参考 pyradiomics 文档了解参数说明

raw_img_folder: 原始图像根目录

  • 包含预处理后的图像

  • 用于提取传统影像组学特征

habitats_map_folder: 生境图根目录

  • 包含生成的生境图

  • 用于提取生境相关特征

out_dir: 输出目录

  • 特征文件将保存在此目录

n_processes: 并行进程数

  • 用于并行处理多个受试者

  • 根据您的硬件配置调整

habitat_pattern: 生境文件匹配模式

  • 用于匹配生境图文件

  • 支持通配符(*

feature_types: 特征类型列表

  • traditional: 传统影像组学特征

  • non_radiomics: 非影像组学特征

  • whole_habitat: 整体生境特征

  • each_habitat: 每个生境特征

  • msi: MSI(Spatial Interaction Matrix)特征

  • ith_score: ITH 特征

n_habitats: 生境数量

  • 空表示自动检测

  • 可以手动指定生境数量

debug: 调试模式

  • 启用详细日志

  • 便于调试和问题排查

特征类型详解

传统影像组学特征 (traditional)

使用 pyradiomics 提取标准影像组学特征。

适用场景: - 与传统影像组学研究对比 - 需要标准的影像组学特征

特征类别: - 一阶统计特征(First Order Statistics) - 形状特征(Shape) - 灰度共生矩阵特征(GLCM) - 灰度游程矩阵特征(GLRLM) - 灰度区域矩阵特征(GLSZM) - 邻域灰度差分矩阵特征(NGTDM)

参数文件示例:

# parameter.yaml
imageType: original
resampledPixelSpacing: None
interpolator: sitkBSpline
force2D: false
force2Ddimension: 0
resampling: None
preCrop: false
binWidth: 25
binCount: 32
normalize: false
normalizeScale: 1
removeOutliers: false
voxelBased: true

# 特征类别
shape: enabled
firstorder: enabled
glcm: enabled
glrlm: enabled
glszm: enabled
ngtdm: enabled

非影像组学特征 (non_radiomics)

提取非标准的影像组学特征。

适用场景: - 探索新的特征类型 - 研究特定的生物学特征

特征类型: - 空间分布特征 - 强度分布特征 - 形态学特征 - 纹理特征

整体生境特征 (whole_habitat)

提取整个生境的特征。

适用场景: - 研究生境的整体特性 - 分析生境之间的关系

特征类型: - 生境数量 - 生境分布 - 生境大小 - 生境形状

每个生境特征 (each_habitat)

提取每个生境的特征。

适用场景: - 研究每个生境的独立特性 - 分析生境之间的差异

特征类型: - 每个生境的强度特征 - 每个生境的纹理特征 - 每个生境的形状特征

MSI 特征 (msi)

空间交互矩阵(Spatial Interaction Matrix)特征,描述不同生境区域之间的空间交互关系。

适用场景: - 研究生境之间的空间交互模式 - 量化肿瘤内空间异质性

特征类型: - 生境间空间邻接/共现相关指标 - 生境间相互作用矩阵派生统计量

参考: Intratumoral Spatial Heterogeneity at Perfusion MR Imaging Predicts Recurrence-free Survival in Locally Advanced Breast Cancer Treated with Neoadjuvant Chemotherapy

ITH 特征 (ith_score)

肿瘤内异质性特征。

适用场景: - 量化肿瘤内异质性 - 研究异质性与临床结果的关系

特征类型: - 异质性指数 - 多样性指数 - 复杂性指数

参数文件说明

HABIT 使用 pyradiomics 进行特征提取,需要提供参数文件。

parameter.yaml(原始图像特征提取):

# 图像设置
imageType: original
resampledPixelSpacing: None
interpolator: sitkBSpline
force2D: false
force2Ddimension: 0
resampling: None
preCrop: false

# 分箱设置
binWidth: 25
binCount: 32
normalize: false
normalizeScale: 1
removeOutliers: false
voxelBased: true

# 特征类别
shape: enabled
firstorder: enabled
glcm: enabled
glrlm: enabled
glszm: enabled
ngtdm: enabled

parameter_habitat.yaml(生境图特征提取):

# 图像设置
imageType: original
resampledPixelSpacing: None
interpolator: sitkBSpline
force2D: false
force2Ddimension: 0
resampling: None
preCrop: false

# 分箱设置
binWidth: 25
binCount: 32
normalize: false
normalizeScale: 1
removeOutliers: false
voxelBased: true

# 特征类别
shape: enabled
firstorder: enabled
glcm: enabled
glrlm: enabled
glszm: enabled
ngtdm: enabled

实际示例

示例 1: 基本特征提取

params_file_of_non_habitat: ./parameter.yaml
params_file_of_habitat: ./parameter_habitat.yaml

raw_img_folder: ./preprocessed/processed_images
habitats_map_folder: ./results/habitat/predict
out_dir: ./results/features

n_processes: 3
habitat_pattern: '*_habitats.nrrd'

feature_types:
  - traditional
  - non_radiomics
  - whole_habitat

n_habitats:

debug: false

示例 2: 完整特征提取

params_file_of_non_habitat: ./parameter.yaml
params_file_of_habitat: ./parameter_habitat.yaml

raw_img_folder: ./preprocessed/processed_images
habitats_map_folder: ./results/habitat/predict
out_dir: ./results/features

n_processes: 4
habitat_pattern: '*_habitats.nrrd'

feature_types:
  - traditional
  - non_radiomics
  - whole_habitat
  - each_habitat
  - msi
  - ith_score

n_habitats:

debug: false

输出结构

特征提取的输出结构:

results/features/
├── traditional/              # 传统影像组学特征
│   ├── features.csv
│   └── ...
├── non_radiomics/           # 非影像组学特征
│   ├── features.csv
│   └── ...
├── whole_habitat/           # 整体生境特征
│   ├── features.csv
│   └── ...
├── each_habitat/            # 每个生境特征
│   ├── features.csv
│   └── ...
├── msi/                    # MSI(Spatial Interaction Matrix)特征
│   ├── features.csv
│   └── ...
├── ith_score/               # ITH 特征
│   ├── features.csv
│   └── ...
└── feature_extraction.log    # 日志文件

常见问题

Q1: 特征提取失败怎么办?

A: 检查以下几点:

  1. 配置文件路径是否正确。

  2. 参数文件是否存在。

  3. 生境图文件是否存在。

  4. 原始图像文件是否存在。

  5. pyradiomics 是否正确安装。

  6. 查看日志文件了解详细错误信息。

Q2: 如何选择特征类型?

A: 根据您的研究需求选择: - 传统影像组学: 与传统研究对比 - 非影像组学: 探索新的特征 - 整体生境: 研究生境整体特性 - 每个生境: 研究每个生境独立特性 - MSI: 研究生境间空间交互特征 - ITH: 量化肿瘤内异质性

Q3: 如何调整特征提取参数?

A: 修改参数文件:

  • binWidth: 分箱宽度。

  • binCount: 分箱数量。

  • normalize: 是否标准化。

  • 特征类别:启用或禁用特定特征类别。

Q4: 特征提取速度慢怎么办?

A: 可以尝试以下方法:

  1. 增加 n_processes 参数,使用更多并行进程。

  2. 减少特征类型,只提取必要的特征。

  3. 使用更快的硬件(如 SSD)。

  4. 对于大数据集,考虑分批处理。

Q5: 如何验证提取的特征?

A: 可以通过以下方法验证:

  1. 检查特征文件的完整性。

  2. 检查特征值的合理性。

  3. 可视化特征分布。

  4. 统计特征数量和质量。

下一步

特征提取完成后,您可以: