医学影像的特征提取--python—pyradiomics库

2023-11-05 16:20

本文主要是介绍医学影像的特征提取--python—pyradiomics库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

医学影像的特征提取

在对医学影像进行处理时,很重要的一个方面就是对于图像的特征提取。这直接关系到后续对于图像的判读,分类等操作。那么今天就为大家介绍python中一个非常高效便捷的库——pyradiomics库。

1. pyradiomics库的安装

如果你使用的是anaconda的IDE,那么可以使用cmd进行安装:在anaconda的Script文件里打开命令行(shift+右键即可):直接conda(or pip) install pyradiomics
其他情况:

  1. 确保计算机已经安装python,并且版本在2.7或者3.4以上

  2. 在https://github.com/Radiomics/pyradiomics上把项目下载下来并解压

  3. 打开cmd,并进入解压后的目录

  4. 在cmd中运行:python -m pip install -r requirements.txt(用于安装pyradiomics所需的依赖)

  5. 在cmd中运行:python setup.py install

  6. 安装完成,打开python,import radiomics,如果不报错,则表示安装成功

2.pyradiomics的使用示例

首先我给出示例文件:
链接:https://pan.baidu.com/s/1yLymOYIZ11if1J5VVHzhQg
密码:deh4
示例文件是一个大脑的CT影像序列,你可以这样理解,我们平时看到的CT图片就是其中一张,而医生看的却是由这一帧一帧图片构成的“视频”——也就是CT影像序列。
现在我们先看代码(这不是我写的,后面我会注明出处,但是我亲自检验过,并发现一些问题):

import radiomics
import radiomics.featureextractor as FEE# 文件名
main_path =  '...'
ori_name = r'\brain1_image.nrrd'
lab_name = r'\brain1_label.nrrd'
para_name = r'\Params.yaml'# 文件全部路径
ori_path = main_path + ori_name  
lab_path = main_path + lab_name
para_path = main_path + para_name
print("originl path: " + ori_path)
print("label path: " + lab_path)
print("parameter path: " + para_path)# 使用配置文件初始化特征抽取器
extractor = FEE.RadiomicsFeaturesExtractor(para_path)
print ("Extraction parameters:\n\t", extractor.settings)
print ("Enabled filters:\n\t", extractor._enabledImagetypes)
print ("Enabled features:\n\t", extractor._enabledFeatures)# 运行
result = extractor.execute(ori_path,lab_path)  #抽取特征
print ("Result type:", type(result))  # result is returned in a Python ordered dictionary
print ("")
print ("Calculated features")
for key, value in result.items():  #输出特征print ("\t", key, ":", value)

就以上程序说明几个问题:

  1. 就Params.yaml文件进行解释:下图是它的一部分,我们大可将其理解为一种字典结构的文件,它告诉了程序我们要输入怎样的图片,我们需要得到哪些特征。就比如如果你想就获取的特征进行自定义,完全可以在Params.yaml文件中进行修改,文件里有详细的注释,就不用我解释了:
    在这里插入图片描述
    2.之前在运行这个程序时,很多时候会报错:No label object with label 1,找遍整个程序我也没看见label 1在哪,而且这个库封装的相当完好,你根本看不出来哪里有问题。后来,在这里找到了症结所在:
    注意看这个label:1
    原来他在Params.yaml中把label写死了,我解释一下他的含义:
    我们常见的医疗图片像素值是从0~255,对于掩模,我们常用白色标记出目标位置,而黑色作为背景。白色的像素是255,而他这里却写的1,也就是说,他对医疗图片像素进行了二值化处理,白色不就是1了嘛。所以,在使用时,我们只需要把label改为我们掩模图中目标区域的像素值即可。
    在这里插入图片描述
    在这里插入图片描述
    3.关于nrrd格式的解析。nrrd和dcm格式差不多,都是医疗图像格式,他们都是有病人信息,图像信息两部分构成。这里可以告诉大家的是,我们传入该库里的函数的图像格式都必须是nrrd的(我也对此表示很烦)。
    在实际用的时候,我的数据是png格式的掩模,分开的dcm格式的CT原图。但是我们要将一个人的单个dcm转换为nrrd序列的话,他的病人信息中有一个名字大概叫做“序列信息”的家伙就至关重要了,他决定了我们dcm作为构建“视频”的前后顺序。因此,我找了一个常用的实例dcm(github上找的),进行了“换信息头”的操作,就是用别人的头,而用我的图像信息。(其实这里是因为我的dcm貌似格式和其他dcm不太一样,不能用pydicom库打开,我能说dcm这个文件标准已经改了四次了吗【手动苦笑】)
    其实,有很多人问png,jpg等常见的图片形式能不能转换为dcm,nrrd格式,那么以上不失为一种好的方法。
    以下是我的代码,仅供参考:
import numpy as np
import SimpleITK as itk
import cv2
import  matplotlib.pyplot as plt
import os
base=r'C:/Users/……/Desktop/ct_transport/dcm_'          #这一部分做好文件夹的准备
i=1
while(i<21):file_name=base+str(i)os.mkdir(file_name)i=i+1
for i in range(20):                   #以下是对每一个人进行循环,达到一人png全部转为dcm后再转为nrrd格式;in_path=r'C:/Users/……/Desktop/ABC/%d/png/'%(i+1109)x=0for s in os.listdir(in_path):       #对每一个人的png进行循环,转换为dcm(换信息头)in_path_per = os.path.join(in_path,s)print(in_path_per)img = cv2.imread(in_path_per)# in_path_dcm=r'C:\Users\……\Desktop\CT\10080.dcm'data2=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)ds = pydicom.dcmread(r"liver\image_%d"%x)ds.PixelData = data2.tostring()#ds.Rows, ds.Columns = data2.shape# data1 = ds.pixel_array# plt.imshow(data1, "gray")#  plt.show()out_path='C:/Users/……/Desktop/ct_transport/dcm_%d/%d.dcm'%(i+1,x+1)#这个应该是每一个人的每一个图片,外面用i区别表示,里面用x区别表示;ds.save_as(out_path)x=x+1in_path_dcm = r'C:/Users/……/Desktop/ct_transport/dcm_%d'%(i+1)series_file_names = itk.ImageSeriesReader().GetGDCMSeriesFileNames(in_path_dcm)# series_file_names=sitk.ImageSeriesReader.GetGDCMSeriesFileNames(in_path,series_ids[1])#print(tuple(list(series_file_names)[::-1]))series_reader = itk.ImageSeriesReader()series_reader.SetFileNames(series_file_names)image3D = series_reader.Execute()itk.WriteImage(image3D, 'C:/Users/……/Desktop/ct_test_nrrd/mask_%d.nrrd'%(i+1))#以一个人为单位,进行了存储print('完成一个人')

4.输出格式
输出就是一个字典结构,但是,要注意有很多是无关信息,比如库的版本等,这是大家用的时候可以做一些筛选。其实他的特征也都是3D特征。

以下就是我使用其代码的兄弟的公众号,在此向他表示感谢,也欢迎大家关注!
在这里插入图片描述

这篇关于医学影像的特征提取--python—pyradiomics库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/351022

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',

Python QT实现A-star寻路算法

目录 1、界面使用方法 2、注意事项 3、补充说明 用Qt5搭建一个图形化测试寻路算法的测试环境。 1、界面使用方法 设定起点: 鼠标左键双击,设定红色的起点。左键双击设定起点,用红色标记。 设定终点: 鼠标右键双击,设定蓝色的终点。右键双击设定终点,用蓝色标记。 设置障碍点: 鼠标左键或者右键按着不放,拖动可以设置黑色的障碍点。按住左键或右键并拖动,设置一系列黑色障碍点

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At