影像组学(Radiomics)是一个新兴的概念,2012 年由荷兰学者 Philippe Lambin 首次提出,其定义是借助计算机软件,从医学影像图像中挖掘海量的定量影像特征,使用统计学和/或机器学习的方法, 筛选最有价值的影像组学特征,用以解析临床信息,用于疾病的定性、肿瘤分级分期、疗效评估和预后预测等.

流程概述

第一步:勾画ROI(三维ROI)

这一步很多软件都能做到 (工具见第二部分)。请留意使用的工具应能勾画三维的ROI,并且体素大小、层间距等几何信息能计算准确,否则跟形态/轮廓相关的特征会计算错误。

第二步:计算ROI内影像信号(也就是把ROI内的影像抠出来)的特征集。特征集包括:灰度特征:即常见的直方图信息譬如均值,均方偏差,偏度之类;

形状特征:根据ROI轮廓计算的,如体积、表面积、最大径之类的;

纹理特征:通过灰度共生矩阵计算出来的高阶特征。这些纹理特征其实往往都有显示意义,举例:SizeZone特征用于评估ROI内影像的块状程度,下列两个瓷砖图的Small     Area Emphasis / Large Area Emphasis就不同。

这一步需要特别留意的是:应该用信号真实值而不是灰度值进行计算。单纯把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的代表性Logo吗?没错,只要安装好3D Slicer,内部就会直接准备好了Python 2.7的开发环境。点击这个按钮,就会在软件的下方启动Python的交互式开发环境。

1.3 操作示范:

大家可以参考下面这个网站(https://www.slicercn.com),网站里有很多教大家使用的中文视频,我就不重复讲了。

2. 演示如何使用3D Slicer 获取radiomics

2.1 绘制ROIs

这里推荐AI绘制(Nvidia Clara )

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

以肝脏为例

CT对肝脏的基于边界点的分割:转到 示例数据 模块并加载“ CTACardio”数据集

转到 Segment Editor

创建一个新的细分

双击segment名称并输入“ liver”以指定细分内容

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

可选:单击“过滤器”图标以仅列出名称中包含“肝脏”的那些型号

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

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

在大约30秒内,自动分割结果将出现在切片视图中。要以3D形式显示结果,请点击Segment Editor列表上方的“显示3D”按钮。

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

在CT上对肝脏和肿瘤进行全自动分割:从http://medicaldecathlon.com/下载Task03_Liver \ imagesTr \ liver_102.nii.gz数据集并将其加载到3D Slicer中

转到 Segment Editor

点击“ Nvidia AIAA”效果

在“自动分割”部分中,选择“ segmentation_ct_liver_and_tumor”模型,然后单击“开始”

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

可选:转到 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建立和验证

python影像组学_【影像组学预测模型-Radiomics】实操教学相关推荐

  1. python赋值运算符难理解_零基础学 Python(8)运算符 — 算术、比较、赋值、逻辑...

    Python 的运算符有:算术运算符.比较运算符.赋值运算符.逻辑运算符.成员运算符.位运算符.身份运算符.本章主要讲解 Python 的算术运算符.比较运算符.赋值运算符.逻辑运算符. 算术运算符 ...

  2. tcp 组播_华为组播理论知识详解(二)

    二.IGMP协议简介 IGMP是Internet Group Management Protocol的简称,又被称为互联网组管理协议,是TCP/IP协议族中负责IPv4组播成员管理的协议. IGMP用 ...

  3. 渗透学python的哪方面_渗组词_渗字组词

    渗透:(拼音:渗:shèn,透:tòu) 渗人:(拼音:渗:shèn,人:rén) 渗入:(拼音:渗:shèn,入:rù) 渗流:(拼音:渗:shèn,流:liú) 渗沥:(拼音:渗:shèn,沥:l ...

  4. python画画零基础_[零基础学python]画圈还不简单吗?

    画圈?换一个说法就是循环.循环,是高级语言编程中重要的工作.现实生活中,很多事情都是在循环,日月更迭,斗转星移,无不是循环:王朝更迭,寻常百姓,也都是循环. 在python中,循环有一个语句:for语 ...

  5. python字符串换行连接_零基础学python_03_字符串(拼接+换行+制表符)

    字符串拼接 在编码的过程很多时候都会用到字符串的拼接,例如,你可能想将姓和名存储在不同的变量中,等要显示姓名时再将它们合而为一: first_name = "li" last_na ...

  6. python response重头开始_你必须学写 Python 装饰器的五个理由

    你必须学写Python装饰器的五个理由 ----装饰器能对你所写的代码产生极大的正面作用 作者:Aaron Maxwell,2016年5月5日 Python装饰器是很容易使用的.任何一个会写Pytho ...

  7. python嵌入shell代码_大家一起学python-Python基础1

    本节内容 Python简介 Python的发展史 选择Python 2 还是python 3? Python安装 第一个Python程序 Python变量 学习怎么输入 数据类型 数据运算基础 表达式 ...

  8. python培训一般多久_零基础学python需要多久

    一:明确自己的学习目标.不管我们学习什么样的知识,都要对自己的学习目标有一个明确的认识.只有这样才能朝着目标持续的前进,少走弯路,从而在学习的过程中得到提升,享受整个学习的乐趣. 二:基础的Pytho ...

  9. python vb 哪个好学_最难学的七大编程语言,VB 第一,Python垫底,看你学的排第几...

    原标题:最难学的七大编程语言,VB 第一,Python垫底,看你学的排第几 在很多人眼里程序员的标配就是黑框眼镜+格子衫+双肩包+牛仔裤+运动鞋,拥有了这些可能就被判定为一个程序员. 而如何判定一个程 ...

最新文章

  1. transmission Linux(debian)下的BT下载客户端安装
  2. 题解 guP2421 【[NOI2002]荒岛野人】
  3. 第五章-分布式并行编程框架MapReduce
  4. 全球及中国甲苯甲酸行业投资决策与运营前景状况分析报告2022版
  5. 灰色简约三级CSS下拉菜单代码
  6. 记录 之 一个小bug:Unsupported syntax ‘Starred‘
  7. [BZOJ3203][SDOI2013]保护出题人(凸包+三分)
  8. unixbench类似_UnixBench的实现介绍-阿里云开发者社区
  9. 深度学习自学(二十五):目标跟踪
  10. 手机android flash,安卓手机flash插件最新版
  11. 计算机接口图形,图形设备接口
  12. http://www.jb51.net/softjc/33896.html(vs2010破解)
  13. ruoyi增加导入导出
  14. 8090后一年有多少存款才算正常?存款五个等级,你在第几个等级?
  15. VS Code保存文件时自动删除行尾空格
  16. CSS样式:如何让背景图片占满整个屏幕
  17. 嘎吱作响Creaks for mac(解谜游戏)中文版支持m1
  18. 基于XC2V1000型FPGA的FIR抽取滤波器的设计
  19. 29. Compose实现瀑布流 StaggeredGrid
  20. Vue的项目开发,你应该知道什么

热门文章

  1. 新来的CTO禁止前后端分离,而且还说了一大堆优缺点!
  2. 27岁自学python找工作_27岁0基础自学Python,多久可以找到工作?
  3. 电大考试计算机应用基础考试试题,最新电大统考计算机应用基础试题知识点
  4. 怎么在html中加代码,如何在HTML中使用代码块
  5. AToken小课堂----什么是私钥?什么是助记词?
  6. 论文笔记 Inference in Deep Gaussian Processes using Stochastic Gradient Hamiltonia使用随机梯度哈密顿量蒙特卡罗推理深度高斯过程
  7. 【软考 系统架构设计师】企业信息化战略与实施② 信息系统战略规范方法
  8. centos下cx_oraclel连接报错dpi1047错误唯一正解
  9. 爱好-文化-冢:象冢
  10. 先电Openstack云平台搭建【超级详细】【附带镜像】