pyradiomics提取单个图片特征的例子

代码说明:

  • 预处理后图像个数:original image + LoG(2个,sigma=3和sigma=5)+Wavelet(三个方向分别选取High和Low,共8张图片)=11张
  • 提取特征:First order和Shape列在代码中;以及全部的texture特征:GLCM(24)+GLRLM(16)+GLSZM(16)+NGTDM(5)+GLDM(14)。
  • 提取的图像和mask目录:D:/MyDataset/test/,其中mask中ROI的label标记为1.
  • 输出内容:Radiomic_Result_single.csv,存在代码目录下,保存了该图像的radiomics特征。

下图来自文献:VAN GRIETHUYSEN J J M, FEDOROV A, PARMAR C, et al. Computational Radiomics System to Decode the Radiographic Phenotype [J]. Cancer Res, 2017, 77(21): e104-e7.
在这里插入图片描述
下图来自官网(https://pyradiomics.readthedocs.io/en/latest/features.html)

来自官网https://pyradiomics.readthedocs.io/en/latest/features.html

import os
import SimpleITK as sitk
import six

from radiomics import featureextractor, logger
import logging
import pandas as pd
import cv2

def define_extractor():
    settings = {}
    settings['binWidth'] = 25  # 5
    settings['sigma'] = [3, 5]  # 2 loG filters
    settings['Interpolator'] = sitk.sitkBSpline
    settings['resampledPixelSpacing'] = [1, 1, 1]  # 3,3,3
    settings['voxelArrayShift'] = 1000  # 300
    settings['normalize'] = True
    settings['normalizeScale'] = 100
    extractor = featureextractor.RadiomicsFeatureExtractor(**settings)
    # extractor = featureextractor.RadiomicsFeatureExtractor()
    print('Extraction parameters:\n\t', extractor.settings)

    extractor.enableImageTypeByName('LoG')
    extractor.enableImageTypeByName('Wavelet')  # 8 FILTERS
    extractor.enableAllFeatures()
    extractor.enableFeaturesByName(
        firstorder=['Energy', 'TotalEnergy', 'Entropy', 'Minimum', '10Percentile', '90Percentile', 'Maximum', 'Mean',
                    'Median', 'InterquartileRange', 'Range', 'MeanAbsoluteDeviation', 'RobustMeanAbsoluteDeviation',
                    'RootMeanSquared', 'StandardDeviation', 'Skewness', 'Kurtosis', 'Variance', 'Uniformity'])
    extractor.enableFeaturesByName(
        shape=['VoxelVolume', 'MeshVolume', 'SurfaceArea', 'SurfaceVolumeRatio', 'Compactness1', 'Compactness2',
               'Sphericity', 'SphericalDisproportion', 'Maximum3DDiameter', 'Maximum2DDiameterSlice',
               'Maximum2DDiameterColumn', 'Maximum2DDiameterRow', 'MajorAxisLength', 'MinorAxisLength',
               'LeastAxisLength', 'Elongation', 'Flatness'])
    # 上边两句我将一阶特征和形状特征中的默认禁用的特征都手动启用,为了之后特征筛选
    print('Enabled filters:\n\t', extractor.enabledImagetypes)
    return extractor

def ExtractFeatures_single(image_path, label_path, extractor, file_name):
    image = sitk.ReadImage(image_path)  # %读取图片
    label = sitk.ReadImage(label_path)  # %读取图片对应的label
    # image = image_path
    # label = label_path  # extractor.execute的输入可以是【图片】也可以是【图片路径】
    featureVector_list = extractor.execute(image, label, label=1)  # 特征提取
    for featureName in featureVector_list.keys():
        print("Computed %s: %s" % (featureName, featureVector_list[featureName]))

    radiomics_df = pd.DataFrame.from_dict(data=featureVector_list, orient='index')
    radiomics_df = radiomics_df.T
    radiomics_df.to_csv(file_name)

if __name__ == '__main__':
    # Get the PyRadiomics logger (default log-level = INFO
    logger.setLevel(logging.DEBUG)  # set level to DEBUG to include debug log messages in log file

    extractor = define_extractor()
    root_path = 'D:/MyDataset/test/'
    image_path = root_path + 'image.nii'
    label_path = root_path + 'mask.nii.gz'
    ExtractFeatures_single(image_path, label_path, extractor, './Radiomic_Result_single.csv')

部分参考:https://blog.csdn.net/weixin_45227374/article/details/126561189
https://github.com/AIM-Harvard/pyradiomics

其他建议参考:
https://github.com/adhaka3/Pyadiomics-based-glioma-grading
https://github.com/hbiom/radiomics_brain_tumors/blob/master/radiomics.ipynb

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值