栏目分类
热点资讯
你的位置:软件开发软件价格 > 联系我们 > 软件定制开发 使用pyradiomics索要影像组学特征【看重】

联系我们

软件定制开发 使用pyradiomics索要影像组学特征【看重】

发布日期:2024-09-28 08:00    点击次数:127

最近由于名堂需求要使用pyradiomics索要影像组学特征,网上阅读了许多别东说念主的博客,学到一些,然后去稽查了pyradiomics的官方文档,终末我方扫尾了特征的索要,写下此文记载,浅显日后稽查。

领先放上官方文档:https://pyradiomics.readthedocs.io/ 和pyradiomics源代码地址:https://github.com/AIM-Harvard/pyradiomics

第一步、装配

在还是装配好的Python环境下,实施:

pip install pyradiomics
第二步、索要特征

通过自界说索要特征不错凭据我方的需求来开荒并索要。

领先,不错指定用于索要特征的图像类型。在pyradiomics包中为咱们提供了许多不错使用的滤波器,是以咱们不错使用原始图像及历程多样滤波器之后的图像,如下方表格,具体不错参考官方:图像类型 图像类型发挥Original原始图像Wavelet小波变换。产生在三个维度中每个维度分辨使用高通、低通滤波器的悉数组合(LLH、LHL、LHH、HLL、HLH、HHL、HHH、LLL)LoGLaplacian of Gaussian filter高斯滤波器的拉普拉斯算子,是一种边际增强滤波器。使用它需要指定参数sigma,低 sigma 强调缜密纹理,高 sigma 值强调鄙俗纹理Square纷乱。取原始像素的纷乱并将它们线性缩放回原始界限SquareRoot纷乱根。取十足图像强度的纷乱根并将它们缩放回原始界限Logarithm对数。取十足强度 + 1 的对数,值缩放到原始界限Exponential指数。接受e^(十足强度)获得强度的指数值,值被缩放到原始界限Gradient梯度。复返局部梯度的大小LocalBinaryPattern2D在每一派中进行的土产货二进制模式LocalBinaryPattern3D在3d中进行的土产货二进制模式

指定方法:开荒特征索要器后不错鄙人边指定(奈何开荒特征索要器:extractor) 不错径直使用:enableAllImageTypes()启用悉数类型 也不错使用:enableImageTypeByName( imageType , enabled=True , customArgs=None )启用你念念用的类型 举例:

# 悉数类型
extractor.enableAllFeatures()
# 指定使用LoG和Wavelet滤波器
extractor.enableImageTypeByName('LoG')
extractor.enableImageTypeByName('Wavelet')
然后不错指定所要索要的特征。pyradiomics包也为咱们提供了许多种可选的特征,如下方表格,具体特征类型看重府上可参考:radiomics-features 特征类型特征发挥First Order Features(共19个)Energy能量Total Energy总能量Entropy熵Minimum最小特征值10Percentile特征值的百分之10的值90Percentile特征值得百分之90的值Maximum最大特征值Mean均值Median中位数InterquartileRange四分位距离Range灰度值界限MeanAbsoluteDeviation(MAD)平均十足弊端RobustMeanAbsoluteDeviation(rMAD) 鲁棒平均十足偏差RootMeanSquared(RMS)均方根弊端StandardDeviation圭臬差。测量平均值的变化或闹翻量,默许不启用,因为与方差有关Skewness偏度。测量值的漫衍对于平均值的分歧称性Kurtosis峰度。是图像 ROI 中值漫衍的“峰值”的权衡Variance方差。是每个强度值与平均值的纷乱距离的平均值Uniformity均匀度。是每个强度值的纷乱和 特征类型特征发挥Shape Features (3D) (共17个)MeshVolume网格体积VoxelVolume体素体积SurfaceArea名义积SurfaceVolumeRatio名义积体积比Sphericity球形度Compactness1紧凑度1。估计肿瘤体式相对于球形的紧密进度,由于与球形度、紧凑度2、球形分歧称有关,默许不启用Compactness2紧凑度2。估计肿瘤体式相对于球形的紧密进度,与1的筹议公式不同,默许不启用SphericalDisproportion球形分歧称。是肿瘤区域的名义积与与肿瘤区域具有接头体积的球体的名义积之比,是球形度的倒数,默许不启用Maximum3DDiameter最大3D直径Maximum2DDiameterSlice最大二维直径(切片),界说为行列(常常是轴向)平面中肿瘤名义网格极点之间的最大成对欧几里得距离。Maximum2DDiameterColumn最大2D直径(列)。界说为行切片(常常是冠状)平面中肿瘤名义网格极点之间的最大成对欧几里得距离。Maximum2DDiameterRow最大二维直径(行)。界说为列切片(常常为矢状)平面中肿瘤名义网格极点之间的最大成对欧几里得距离。MajorAxisLength长轴长度MinorAxisLength短轴长度LeastAxisLength最小轴长度Elongation伸长率。暗示ROI体式中两个最大的主因素之间的联系Flatness平整度。暗示ROI体式中最大和最小主因素之间的联系 特征类型特征发挥Shape Features (2D)MeshSurface网格面。由三角形网格界说,筹议ROI的名义PixelSurface像素面。ROI 中的像素数乘以单个像素的名义积Perimeter周长PerimeterSurfaceRatio周长比。值越低越紧凑Sphericity球形度SphericalDisproportion球形不均匀度。是球形度的倒数 ,与球形度有关,默许不启用MaximumDiameter最大二维直径。界说为肿瘤名义网格极点之间的最大成对欧几里得距离MajorAxisLength长轴长度MinorAxisLength短轴长度Elongation伸长率。清醒了 ROI 体式中两个最大主因素之间的关​​系 特征类型特征发挥Gray Level Co-occurrence Matrix (GLCM) Features灰度共生矩阵特征(共24个)Autocorrelation自有关。是纹理细度愚顽度大小的权衡JointAverage纠合平均ClusterProminence集群显耀性。估计 GLCM 偏度和分歧称性的缱绻ClusterShade集群暗影。估计 GLCM 偏度和均匀度的缱绻ClusterTendency集群趋势Contrast对比度Correlation有关性DifferenceAverage平均差DifferenceEntropy差分熵DifferenceVariance各别方差。是异质性的一种度量Dissimilarity各别性。已弃用JointEnergy纠合能量JointEntropy纠合熵。是邻域强度值的立时性/可变性的度量Imc1有关性信息度量 (IMC) 1Imc2有关性信息度量 (IMC) 2Idm逆差矩MCC最大有联悉数Idmn逆差分矩归一化Id逆差Idn逆差分归一化InverseVariance逆方差MaximumProbability最大致率SumAverage乞降平均SumEntropy总熵SumSquares纷乱和 特征类型特征发挥Gray Level Size Zone Matrix (GLSZM) Features灰度级大小区域矩阵特征 (共16个)SmallAreaEmphasis是小尺寸区域漫衍的权衡,数值越大暗示区域越小,纹理越缜密LargeAreaEmphasis是大面积区域漫衍的度量,值越大暗示区域越大,纹理越鄙俗。GrayLevelNonUniformity灰度非均匀性。测量图像中灰度级强度值的可变性,值越低暗示强度值越均匀。GrayLevelNonUniformityNormalized灰度非均匀归一化。测量图像中灰度强度值的可变性,值越低暗示强度值的不异性越大SizeZoneNonUniformity尺寸区域非均匀性。测量图像中大小区域体积的可变性,值越低暗示大小区域体积越均匀SizeZoneNonUniformityNormalized尺寸区域非均匀归一化。测量悉数这个词图像中大小区域体积的可变性,值越低暗示图像中区域大小体积之间的同质性越高ZonePercentage区域百分比。获得 ROI 中的区域数和体素数的比率来测量纹理的鄙俗度GrayLevelVariance灰度方差ZoneVariance区域方差ZoneEntropy区域熵LowGrayLevelZoneEmphasis低灰度区域强调HighGrayLevelZoneEmphasis高灰度区域强调SmallAreaLowGrayLevelEmphasis小面积低灰度区域强调SmallAreaHighGrayLevelEmphasis小区域高灰度强调LargeAreaLowGrayLevelEmphasis大面积低灰度强调LargeAreaHighGrayLevelEmphasis大面积高灰度强调 特征类型特征发挥Gray Level Run Length Matrix (GLRLM) Features灰度游程矩阵 (GLRLM) 特征 (共16个)ShortRunEmphasis是估计短出手长度漫衍的缱绻,软件开发公司值越大暗示出手长度越短,纹理纹理越缜密。LongRunEmphasis是对长行程漫衍的度量,值越大暗示行程越长,结构纹理越鄙俗。GrayLevelNonUniformity灰度非均匀性GrayLevelNonUniformityNormalized灰度非均匀归一化RunLengthNonUniformity出手长度非均匀性RunLengthNonUniformityNormalized出手长度非均匀归一化RunPercentage出手百分比。通过获得 ROI 中的出手次数和体素数的比率来测量纹理的鄙俗度GrayLevelVariance灰度级方差RunVariance出手方差RunEntropy出手熵LowGrayLevelRunEmphasis测量低灰度值的漫衍,值越高暗示图像中低灰度值的蚁集度越高HighGrayLevelRunEmphasis测量较高灰度值的漫衍,值越高暗示图像中高灰度值的蚁集度越高ShortRunLowGrayLevelEmphasis测量具有较低灰度值的较短出手长度的纠合漫衍ShortRunHighGrayLevelEmphasis测量具有较高灰度值的较短出手长度的纠合漫衍LongRunLowGrayLevelEmphasis测量具有较低灰度值的长出手长度的纠合漫衍LongRunHighGrayLevelEmphasis测量具有较高灰度值的长出手长度的纠合漫衍 特征类型特征发挥Neighbouring Gray Tone Difference Matrix (NGTDM) Features相邻灰度差矩阵(共5个) (NGTDM) 特征Coarseness鄙俗度Contrast对比度Busyness遏止度。从像素到其邻居的变化的度量。遏止度的高值暗示“遏止”图像,像素与其邻域之间的强度快速变化Complexity复杂度Strength强度 特征类型特征发挥Gray Level Dependence Matrix (GLDM) Features 灰度依赖矩阵 (GLDM) 特征(共14个)SmallDependenceEmphasis小依赖漫衍的度量,值越大暗示依赖越小,纹理越不均匀LargeDependenceEmphasis大依赖漫衍的度量,值越大暗示依赖越大,纹理越均匀GrayLevelNonUniformity灰度非均匀性。测量图像中灰度级强度值的不异性DependenceNonUniformity估计悉数这个词图像中依赖联系的不异性,值越低暗示图像中依赖联系之间的同质性越高DependenceNonUniformityNormalized依赖非均匀归一化。估计悉数这个词图像中依赖联系的不异性,值越低暗示图像中依赖联系之间的同质性越高GrayLevelVariance灰度方差DependenceVariance依赖方差DependenceEntropy依赖熵LowGrayLevelEmphasis测量低灰度值的漫衍,值越大暗示图像中低灰度值的蚁集度越高HighGrayLevelEmphasis测量较高灰度值的漫衍,值越高暗示图像中高灰度值的蚁集度越高SmallDependenceLowGrayLevelEmphasis测量具有较低灰度值的小有关性的纠合漫衍SmallDependenceHighGrayLevelEmphasis测量具有较高灰度值的小有关性的纠合漫衍LargeDependenceLowGrayLevelEmphasis测量具有较低灰度值的大有关性的纠合漫衍LargeDependenceHighGrayLevelEmphasis测量具有较高灰度值的大有关性的纠合漫衍

在意:除了体式特征类外,其他特征齐不错在原始图像和滤波后的图像上进行筹议

小程序开发

具体的指定要道: 不错径直使用:enableAllFeatures( )启用悉数类型 也不错使用:enableFeatureClassByName(featureClass, enabled=True)启用你念念用的类型 举例:

# 开荒一阶特征
extractor.enableFeatureClassByName('firstorder')
# 开荒只索要一阶特征的'Mean'和'Skewness'
extractor.enableFeaturesByName(firstorder=['Mean', 'Skewness'])

也不错径直通过特征类别来启工具体的特征,示例见:https://github.com/AIM-Harvard/pyradiomics/blob/master/examples/helloFeatureClass.py

第三步不错对特征索要器进行一些开荒。是否对原图归一化、是否重采样,原文档见:feature-extractor-level

图像归一化:

normalize:默许为false。开荒为true时进行图像归一化。normalizeScale:驯服图像归一化后的比例。默许为1。removeOutliers:界说要从图像中删除的尽头值。默许为0。

图像/mask重采样:

作为80后的主教练,杨林的执教时间不算长,但足够精彩。带队从中冠冲中乙、中乙保级、中乙冲中甲、中甲保级,从生存到进阶,每一次他拿到的都是最有挑战的任务单,而且其他新派教练都是在名帅外教身边做助理教练后才上位,杨林几乎没有过渡,他始终在自我摸索。

戴维斯-汤普森的积分排名上升29位,从51位上升到22位,应该能确保明年全部顶流赛事资格。他的奖金累积到3,730,873美元,攀升31位,位列27位。

resampledPixelSpacing:开荒重采样时的体素大小。默许无。interpolator:开荒用于重采样的插值器。仅适用于重采样图像,sitkNearestNeighbor永久用于重采样掩码以保留标签值。可选的插值器:

图片软件定制开发

padDistance:开荒重采样技巧编著肿瘤体时的体素补凑数目。

举例:

settings = {}
settings['![binWidth](https://img-blog.csdnimg.cn/c9b0896a5eea4eaf8217d0ed7f23e92b.png)
'] = 25
settings['resampledPixelSpacing'] = [3,3,3]  # [3,3,3] is an example for defining resampling (voxels with size 3x3x3mm)
settings['interpolator'] = sitk.sitkBSpline

还有其他的一些开荒,凭据我方的需要修改即可。 终末举一个完好的例子,我要惩办的是CT数据,是以我参考了pyradiomics的github源码中ct参数的开荒,终末我的代码如下:

from __future__ import print_function
import six
import os  # needed navigate the system to get the input data
import numpy as np
import radiomics
import pandas as pd
import SimpleITK as sitk
from radiomics import featureextractor  # This module is used for interaction with pyradiomics
import argparse
def catch_features(imagePath,maskPath):
    if imagePath is None or maskPath 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"
    settings = {}
    settings['binWidth'] = 25  # 5
    settings['sigma'] = [3, 5]
    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')
    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)
    feature_cur = []
    feature_name = []
    result = extractor.execute(imagePath, maskPath, label=255)
        for key, value in six.iteritems(result):
        print('\t', key, ':', value)
        feature_name.append(key)
        feature_cur.append(value)
    print(len(feature_cur[37:]))
    name = feature_name[37:]
    name = np.array(name)
    '''
    flag=1
    if flag:
        name = np.array(feature_name)
        name_df = pd.DataFrame(name)
        writer = pd.ExcelWriter('key.xlsx')
        name_df.to_excel(writer)
        writer.save()
        flag = 0
    '''
    for i in range(len(feature_cur[37:])):
        #if type(feature_cur[i+22]) != type(feature_cur[30]):
        feature_cur[i+37] = float(feature_cur[i+37])
    return feature_cur[37:],name

image_dir = r'D:\study\extract_radiomics_feature\linshi'
mask_dir = r'D:\study\extract_radiomics_feature\linshi'
patient_list = os.listdir(image_dir)
save_file = np.empty(shape=[1,1051])
id = []
for patient in patient_list:
    print(patient)
    for file in os.listdir(os.path.join(image_dir,patient)):
        if file =='image.nii':
            imagePath = os.path.join(image_dir,patient,file)
        if file =='mask_gtv-1.nii':
            maskPath = os.path.join(mask_dir,patient,file)
    print(imagePath)
    print(maskPath)
    save_curdata,name = catch_features(imagePath,maskPath)
    save_curdata = np.array(save_curdata)
    save_curdata = save_curdata.reshape([1, 1051])
    id.append(patient.split('.')[0])
    np.concatenate((patient,save_curdata),axis=1)
    save_file = np.append(save_file,save_curdata,axis=0)
    print(save_file.shape)
save_file = np.delete(save_file,0,0)
#save_file = save_file.transpose()
#print(save_file.shape)
id_num = len(id)
id = np.array(id)
name_df = pd.DataFrame(save_file)
name_df.index = id
name_df.columns = name
writer = pd.ExcelWriter('NSCLC-Radiomics-features.xlsx')
name_df.to_excel(writer)
writer.save()

终末后果如下:

图片

本站仅提供存储办事,悉数推行均由用户发布,如发现存害或侵权推行,请点击举报。