1. 利用 3Dslicer 软件提取影像组学特征

  1. 安装插件:SlicerRadiomics
  2. 导入影像文件:breast1_label.nrrd(mask 文件) 和 breast1_image.nrrd(个人影像文件)。
    在这里插入图片描述
  3. 切换插件:Welcome to Slicer → Informatics → Radiomics
    在这里插入图片描述
  4. 设置参数(如图)
    Select Input Volume and Segmentation
    input image Volume: breast1_image(个人影像文件)
    input regions 感兴趣区:breast1_label(mask 文件)
    Extraction Customization:Manual Custimization
    Featrue Classes 选择提取哪些类特征,如 firstorder 和 gldm
    Resampling and Filtering 重采样 → Resampled voxel size:3,3,3(体素与体素间的距离都是 3mm,建议每个方向上的体素间隔一致)→ LoG kernel sizes: 3,4 (如果使用高斯拉布拉斯滤波器,需要设置一下,可以设置多个 size)。勾选 Wavelet-based features(是否提取小波滤波器的特征)
    其他默认
    output
    output table: Table1 (修改输出表格名),设置表格名称后 Apply
    在这里插入图片描述
  5. Apply 后窗口右下角产生一个表格
    Image type:原始图像还是某种滤波器上产生的图片,前面 diagnostics 是影像的基本信息,从 log-sigma-3-0-mm-3D 开始是对特征提取有用的信息(log 滤波器,sigma size 3.0)。
    Feature class:特征分类
    在这里插入图片描述
  6. 导出表格:格式选择 csv
    在这里插入图片描述
  7. 做影像组学研究时通常把病例作为行,特征作为列,所以需要把 csv 表格转置一下用于后续研究:全选数据 → 到新表粘贴时选择转置。
    在这里插入图片描述
    在这里插入图片描述

2. 利用 python 提取影像组学特征

  • 基础版:提取一个病例的特征
    需要先安装pyradiomics
    参考:【影像组学】windows系统安装pyradiomics包的问题

    # pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyradiomics
    from radiomics import featureextractor 
    
    
    imageFile = 'file5/breast1/breast1_image.nrrd'
    maskFile = 'file5/breast1/breast1_label.nrrd'
    
    extractor = featureextractor.RadiomicsFeatureExtractor() # 初始化,给这一长串起个简写的名字
    featureVector = extractor.execute(imageFile, maskFile) # 
    # print(featureVector.items()) 结果太多太杂乱
    # for循环遍历提取所需的信息 featureName
    for featureName in featureVector.keys():
        print("%s: %s" % (featureName, featureName[featureName]))
    

    在这里插入图片描述

常用参数设置

  • 按待提取特征选择

    extractor.disableAllFeatures()  # 禁用所有特征
    extractor.enableFeaturesByName(firstorder=['Mean', 'Skewness']) # 只选几个特征提取
    
    featureVector = extractor.execute(imageFile, maskFile)
    for featureName in featureVector.keys():
        print("%s: %s" % (featureName, featureVector[featureName]))
    

    在这里插入图片描述

  • 按待提取特征类型选择

    extractor.disableAllFeatures()  # 禁用所有特征
    extractor.enableFeatureClassByName('glcm') # 输出想要类型的特征,如 glcm
    
    featureVector = extractor.execute(imageFile, maskFile)
    for featureName in featureVector.keys():
        print("%s: %s" % (featureName, featureVector[featureName]))
    
  • 滤波器设置:在加滤波器(对图像做修整)的图像上提取特征。

    extractor.enableImageTypes(Original={}, LoG={}, Wavelet={}) 
    # Original原始图像 LoG滤波器 Wavelet小波滤波器
    
    featureVector = extractor.execute(imageFile, maskFile)
    for featureName in featureVector.keys():
        print("%s: %s" % (featureName, featureVector[featureName]))
    

    在这里插入图片描述

  • 批处理提取影像组学特征

    import os
    import pandas as pd
    
    basePath = 'data/featureExtraction'
    folders = os.listdir(basePath) # 读取featureExtraction文件夹下所有文件名
    print(folders)
    
    df = pd.DataFrame() 
    for folder in folders:  # 遍历文件夹
        files = os.listdir(os.path.join(basePath,folder)) # 拼接文件夹下的文件路径
    #     print(files) 区分影像文件和 mask 文件
        for file in files:
            if file.endswith('image.nrrd'):  
                imageFile = os.path.join(basePath,folder,file) # 影像文件路径
            if file.endswith('label.nrrd'):
                maskFile = os.path.join(basePath,folder,file) # mask文件路径
    #     print(imageFile, maskFile) 特征提取
        extractor = featureextractor.RadiomicsFeatureExtractor()
        featureVector = extractor.execute(imageFile, maskFile)  # 得到结果是字典 dict
        # 从featureVector字典中提取数据转换成数据框,并 .T 转置(特征作为列)
        df_new = pd.DataFrame.from_dict(featureVector.values()).T  
        df_new.columns = featureVector.keys() # 列名
        df = pd.concat([df,df_new])  # 合并之前的数据框
    df.to_excel(os.path.join(basePath,'results.xlsx'))
    

    在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐