首页 > 编程知识 正文

影像组学特征提取,python3

时间:2023-05-06 15:05:54 阅读:27927 作者:3580

影像学(Radiomics )是一个新概念,2012年由荷兰学者飞利浦实验室首次提出。 其定义是利用计算机软件,从医学影像中提取大量定量影像特征,采用统计学和/或机器学习的方法,筛选最有价值的影像诊断功能,分析临床信息,用于疾病定性、肿瘤分类、疗效评价和疗效评价

流程概述

第一步:绘制投资回报(三维投资回报)

许多软件都可以执行此步骤(工具请参见第二部分)。 请注意,使用的工具可以绘制三维ROI,并且可以准确计算体素大小、层间距等几何信息。 否则,与形态/轮廓相关的特征会被错误地计算出来。

步骤2 )计算ROI内的图像信号(即抠出ROI内的图像)的特征集。 特征集包括灰度特征,即常见的直方图信息,例如平均值、平均偏差、偏度等;

形状特征:根据投资回报轮廓计算的体积、表面积、最大直径等;

纹理特征:由灰度共生矩阵计算的高阶特征。 这些纹理的特征往往具有一定的意义。 例如,SizeZone的特征用于评估ROI中图像的块程度,以下两个平铺图像的smallareaemphasis/largeareaemphasis不同:

请特别注意,在这个步骤中,需要用信号的真值而不是灰度值来计算。 如果单纯加入0~4095的灰度值进行计算,则很难将不同的被试验者的图正规化。 因此,作者不建议使用通用的图像纹理计算软件。 应使用专业的医学图像处理软件,准确读取DICOM信息并获取真实值。

第三步:数据挖掘、预测模型的建立和检验。

目前最常用的方法是利用Lasso回归筛选相关变量,绘制nomogram,评价nomogram的性能。 再深入一点,就是基于nomogram进行子组的分割和分析。

重要提示:从ROIs绘图、Lasso教程,到nomogram成立,全过程手把手地传授该软件,并结合案例进行分析解说。

1 .软件要求和准备

1.1软件安装

Radiomics主要是目标规划(ROIs ),可以实现很多软件。 市面上大多数软件都是基于python开发和运行的,需要符合python标准的安装和配置。 那么,有更快捷的解决方法吗? 答案是有的。 这一步一步的解决方法是本文介绍的3D Slicer。 支持3d slicer (https://download.slicer.org/)、MAC和Window,免费! 免费! 免费! 重要的事情说三遍!

1.2软件概述

假设您从网站下载了最新版本4.8.1并完成了安装。 软件启动后,将显示以下界面:

你注意到红色箭头指向的右上角的按钮图标了吗? 这不就是Python的代表性标志吗? 没错,只要安装了3D Slicer,内部就会直接提供Python 2.7的开发环境。 单击此按钮可在软件下启动Python交互式开发环境。

1.3操作演示:

请访问以下网站(https://www.slicercn.com) : 网站上有很多大家使用的中文视频,所以不要重复说。

演示如何使用3DSlicer获取射频麦克风

2.1Rois绘图

在此推荐使用“AI绘制”

PS:在“拆分”类别中安装NvidiaAIAssistedAnnotation扩展,等待安装完成,然后单击“重新启动”

以肝脏为例

基于肝脏边界点的CT分割:导航到要加载CTACardio数据集的示例模块

转到“Segment Editor”

创建新的镶嵌

双击分段名称,然后键入liver以指定细分

单击Nvidia AIAA效果的“从边界点分割”部分

可选:单击筛选器图标,仅列出名称中包含肝脏的模型

选择“annotation_ct_liver”(被训练为在门脉期的CT图像上分割肝脏的模型)。

单击“放置标记点”按钮,在切片视图中所有六个侧面的肝脏边附近单击,然后单击“开始”

在约30秒内,自动分割的结果显示在切片视图中。 要以3D形式显示结果,请单击“分段编辑器”列表上方的“显示3D”按钮。

若要调整分割完成后以前放置的边界点,请单击“开始”按钮旁边的“编辑”图标。

用CT全自动分割肝脏和肿瘤:从http://medicaldecathlon.com/下载tas k03 _ liverimages trliver _ 102.NII.gz数据集下载3D Slicer

转到“Segment Editor”

单击“Nvidia AIAA”效果

在“自动拆分”部分中,选择segmentation _ CT _ liver _ and _ tumor模型,然后单击“开始”

自动分割的结果应在3-5分钟内显示

/p>

可选:转到 Segments 模块以编辑显示设置

label: liver / tumor

2.2 提取radiomics

主要使用pyradiomics组件,引用某大神一个完整的视频给大家介绍下提取,可以只参考视频的最后一部分就可以了,前面的规划,可以参考上述内容。

https://www.bilibili.com/video/BV15V411Z73o?from=search&seid=5989594993256922790

3. lasso回归,确定潜在变量

第一步呢,永远是读入数据和核查数据。

然后,进入到我们此次教程的一个关键环节,分割数据。我们这个数据集当中共有699例样本,我们需要将其随机分割为训练集和测试集,一般的样本比例是2:1,也就是2/3的病人用来做训练,训练出一个准确的模型,剩下1/3病人用来做测试,验证我们的这个模型是否可靠。分割数据的代码如下,整个过程都是随机的:# 分割数据set.seed(123)ind 

样本(也就是数据的行)分配好了之后呢,下一步就是把采集到的信息(也就是数据列)进行分配,在我们的这个测试数据中前面V1-V9是采集到的样本信息,最后一列是我们的诊断,也就是肿瘤的良恶性,下面我们把样本信息和样本诊断分割开来:# Convert data to generate input matrices and labels:# x相当于临床信息x 

首先,我们尝试做K-fold交叉验证。在glmnet包中使用cv.glmnet()估计λ值,glmnet默认使用10倍交叉验证。所谓K-fold交叉验证,就是将数据分成k个相同的子集(折叠子集),每次用k-1个子集拟合模型,然后将剩余的子集作为测试集,最后将k个结果合并(一般采用平均值)来确定最终的参数。在此方法中,每个子集仅用作测试集一次。在glmnet包中使用K-折交叉验证非常容易。结果包括每个相应的MSE值和相应的λ。在这里,我们将训练集k值定为5,做5-fold cross validation,这也是比较常用的。# 5-fold交叉验证,找出最佳lambda值fitCV 

上面的图叫做CV统计图,CV统计图与glmnet中的其他图表有很大的不同,它表示了λ的对数与均方差以及模型中变量数量之间的关系。图表中的两条垂直虚线表示最小均方误差的对数λ(左侧虚线)和最小距离的标准误差的对数λ(右侧虚线)。如果存在过拟合问题,那么从最小值到标准误差位置的距离是解决问题的一个很好的起点。可以看到,我们可以选择的lambda值有两个,具体lambda选值要根据自己实验设计而定。lambda.min是最佳值,lambda.1se则是一倍SE内的更简洁的模型。这也涉及到临床模型一个很重要的考量标准,到底是选择精度高但是复杂的模型,还是放弃部分精度,选择变量更少更有可能有应用价值的模型呢?本例中我们选择最佳lambda值。然后我们来看一下,随着lambda值的变化,每个观察值对应的系数的变化趋势。# check the coeffit 

此图显示,随着λ的减少,压缩参数减少,系数的绝对值增加。这个模型应该如何在文章中描述呢?我们来输出系数:# get the coefcoef.min = coef(fitCV, s = 'lambda.min')coef.min

然后就会生成每个变量所对应的系数,我们也可以通过这个系数来对模型进行描述。

……

4. nomogram建立和验证

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。