最近由于技俩需求要使用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重采样:
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()
终末成果如下:
图片
本站仅提供存储功绩,总共本色均由用户发布,如发现存害或侵权本色,请点击举报。