目录
一、了解 影像组学
影像组学是什么(引用一下chatgpt的解释)
影像组学的基本步骤
影像组学的作用与价值
影像组学有哪些特征
二、了解 pyradiomics
pyradiomics是什么
pyradiomics使用步骤
pyradiomics的作用与价值
三、正文开始,敲代码
准备python环境与数据
安装库
初始化特征抽取器
取出图片数据路径
提取特征
输出特征
指定所要提取的特征
一、了解 影像组学
影像组学是什么(引用一下chatgpt的解释)
影像组学(Radiomics)是一种利用医学影像数据中的大量特征进行定量分析和挖掘的方法。它的目标是通过提取和分析医学影像中的大量图像特征,以揭示潜在的生物学特征、疾病信息和治疗预测。
影像组学的基本步骤
-
数据获取:收集医学影像数据,如CT扫描、MRI、PET等。
-
图像分割:对影像进行分割,将感兴趣的区域(如肿瘤)从周围的组织中分离出来。
-
特征提取:从分割后的影像中提取大量的数学、几何和统计特征,包括形状、纹理、灰度等。这些特征可以反映组织的形态、结构和组织特性。
-
特征选择:根据特征的相关性、重要性和预测能力等进行筛选和选择最具有代表性的特征。
-
建模和分析:利用选定的特征进行建模和分析,可以使用机器学习、统计学方法等来构建预测模型,发现生物学模式、进行疾病诊断、预后评估等。
影像组学的作用与价值
通过影像组学的分析,可以从医学影像中挖掘潜在的生物学特征、疾病的影像标志物,并且可以为个体化治疗和疾病管理提供更多信息。影像组学在肿瘤学、神经科学、心血管疾病等领域得到广泛应用,对疾病的早期检测、分型、预后评估和治疗决策等方面具有潜在的价值。
影像组学有哪些特征
特征类别 | 特征名称(解释) |
First Order Features | Energy(能量) Total Energy(总能量) Entropy(熵) Minimum(最小值) 10th percentile(第十百分位) 90th percentile(第九十百分位) Maximum(最大值) Mean(均值) Median(中值) Interquartile Range(四分位范围) Range(极差) Mean Absolute Deviation (MAD)(平均绝对偏差) Robust Mean Absolute Deviation(rMAD,鲁棒平均绝对偏差) Root Mean Squared(RMS,均方根) Skewness(偏度) Kurtosis(峰度) Variance(方差) Uniformity(均匀性) |
Shape Features (2D) | MeshSurface(网格面) PixelSurface(像素面) Perimeter(周长) PerimeterSurfaceRatio(周长比) Sphericity(球形度) SphericalDisproportion(球形不均匀度) MaximumDiameter(最大二维直径) MajorAxisLength(长轴长度) MinorAxisLength(短轴长度) Elongation(伸长率) |
Shape Features (3D) | MeshVolume(网格体积) VoxelVolume(体素体积) SurfaceArea(表面积) SurfaceVolumeRatio(表面积体积比) Sphericity(球形度) Compactness1(紧凑度1) Compactness2(紧凑度2) SphericalDisproportion(球形不对称) Maximum3DDiameter(最大3D直径) Maximum2DDiameterSlice(最大二维直径(切片)) Maximum2DDiameterColumn(最大2D直径(列)) Maximum2DDiameterRow(最大二维直径(行)) MajorAxisLength(长轴长度) MinorAxisLength(短轴长度) LeastAxisLength(最小轴长度) Elongation(伸长率) Flatness(平整度) |
Gray Level Co-occurrence Matrix (GLCM) Features灰度共生矩阵特征 | Autocorrelation(自相关) Joint Average(联合平均) Cluster Prominence(集群突出) Cluster Shade(集群阴影) Cluster Tendency(集群趋势) Contrast(对比度) Correlation(相关性) Difference Average(差平均) Difference Entropy(差熵) Difference Variance(差方差) Joint Energy(联合能量) Joint Entropy(联合熵) Informational Measure of Correlation 1(IMC 1,相关信息测度1) Informational Measure of Correlation 2(IMC 2,相关信息测度2) Inverse Difference Moment(IDM,逆差矩) Maximal Correlation Coefficient(MCC,最大相关系数) Inverse Difference Moment Normalized(IDMN,归一化逆差矩) Inverse Difference(ID,逆差) Inverse Difference Normalized(IDN,归一化逆差) Inverse Variance(逆方差) Maximum Probability(最大概率) Sum Average(和平均) Sum Entropy(和熵) Sum of Squares(和方差) |
GLSZM | Gray Level Size Zone Matrix Features灰度级大小区域矩阵特征 |
GLRLM | Gray Level Run Length Matrix Features灰度游程矩阵特征 |
NGTDM | Neighbouring Gray Tone Difference Matrix Features相邻灰度差矩阵 |
GLDM | Gray Level Dependence Matrix Features 灰度依赖矩阵特征 |
后面四个懒得写了,可以在这里查看 影像组学特征大全
二、了解 pyradiomics
pyradiomics是什么
pyradiomics是一个开源的python软件包,可以从医学影像中提取出Radiomics影像组学特征,其支持2D和3D中的特征提取
pyradiomics使用步骤
-
数据准备:准备医学影像数据,可以是CT扫描、MRI、PET等。
-
安装PyRadiomics:在Python环境中安装PyRadiomics库,可以使用pip命令进行安装。
-
特征提取:使用PyRadiomics库提供的API,导入影像数据并进行特征提取。可以选择感兴趣的区域进行分割,然后提取各种数学、几何和统计特征。
-
特征选择和分析:根据特定的研究目的和分析需求,对提取的特征进行筛选和选择。可以使用统计学方法、机器学习算法等进行特征选择和建模,以探索特征与疾病之间的关联和预测能力。
-
结果解释和应用:根据特征分析的结果,解释特征与疾病之间的关系,为临床决策、治疗规划和疾病管理提供支持。
pyradiomics的作用与价值
PyRadiomics的优势在于提供了丰富的影像组学特征库和功能,使得特征提取和分析变得简单和高效。它支持多种影像数据格式,并且提供了丰富的特征计算选项和参数调整的灵活性。此外,PyRadiomics还提供了可视化工具和API文档,方便用户进行结果展示和进一步的开发。
三、正文开始,敲代码
我们已经大致了解了影像组学和pyradiomics,接下来是正文
准备python环境与数据
这里有一个数据集,里面只有如下四个文件可以使用 影像组学测试数据
安装库
pip install pyradiomics
初始化特征抽取器
RadiomicsFeatureExtractor 是 PyRadiomics 库中的一个类,它负责从图像和标签中提取特征。通过使用参数文件,你可以配置特征抽取的方式,包括选择哪些特征计算、使用哪些滤波器、如何处理图像和标签等
作用:创建一个特征抽取器对象,并使用指定的参数文件进行初始化,以便后续使用这个特征抽取器进行特征计算
extractor = FEE.RadiomicsFeatureExtractor(parameter_file = para_path)
取出图片数据路径
当有多个数据样本时,根据文件后缀不同,赋予不同路径,进行遍历
file_path = os.path.join(root, file)if file.endswith("image.nrrd"):ori_path = file_pathelif file.endswith("label.nrrd"):lab_path = file_pathprint(file_path)
提取特征
result = extractor.execute(ori_path, lab_path) # 抽取特征
输出特征
for key, value in result.items(): # 输出特征print("\t", key, ":", value)
指定所要提取的特征
假设我们只想保存 'original_shape_VoxelVolume' 和 'original_glcm_Correlation' 这两个特征(保存到一个CSV文件中)
selected_features = ['original_shape_VoxelVolume', 'original_glcm_Correlation']
for key, value in result.items():if key in selected_features:df = df.append({'Feature': key, 'Value': value}, ignore_index=True)
ori_path = None
lab_path = Noneoutput_path = 'data/pyradiomics/csv/selected_features.csv'
df.to_csv(output_path, index=False)
让我们看一眼csv文件内长什么样子
完整代码
from radiomics import featureextractor as FEE
import os
import pandas as pdfile_path = 'data/pyradiomics/nrrd/'
para_path = 'data/pyradiomics/Params.yaml'# 使用配置文件初始化特征抽取器
extractor = FEE.RadiomicsFeatureExtractor(parameter_file = para_path)
# 打印抽取器的参数、启用的滤波器和启用的特征
print("Extraction parameters:\n\t", extractor.settings)
print("Enabled filters:\n\t", extractor.enabledImagetypes)
print("Enabled features:\n\t", extractor.enabledFeatures)# 创建一个空的 DataFrame,用于存储特征数据
df = pd.DataFrame()for root, dirs, files in os.walk(file_path):ori_path = Nonelab_path = Nonefor file in files:# 取出项目文件夹中的图片数据的路径file_path = os.path.join(root, file)if file.endswith("image.nrrd"):ori_path = file_pathelif file.endswith("label.nrrd"):lab_path = file_pathprint(file_path)if ori_path and lab_path is not None:# 运行result = extractor.execute(ori_path, lab_path) # 抽取特征print("Result type:", type(result)) # result is returned in a Python ordered dictionaryprint("")print("Calculated features")for key, value in result.items(): # 输出特征print("\t", key, ":", value)# 选择特定特征并将其保存到 CSV 文件中# 假设你只想保存 'original_shape_Volume' 和 'glcm_Correlation' 这两个特征selected_features = ['original_shape_VoxelVolume', 'original_glcm_Correlation']# 遍历所有样本的特征for key, value in result.items():# 如果当前特征是所选特征之一,则将其添加到 DataFrameif key in selected_features:df = df.append({'Feature': key, 'Value': value}, ignore_index=True)# 清空,进行下一次遍历ori_path = Nonelab_path = None# 指定保存到的 CSV 文件路径
output_path = 'data/pyradiomics/csv/selected_features.csv'# 将 DataFrame 保存为 CSV 文件
df.to_csv(output_path, index=False)
print("已保存")