Python库使用介绍 LivermorE AI Projector for Computed Tomography LEAP

Python库使用介绍 LivermorE AI Projector for Computed Tomography LEAP

  • 前言
  • Projector 用于设定投影参数的类
    • 参数解释:
    • 其它功能
      • load_param(str filepath)
      • forward(ipt, project_mode="forward")
  • 样例代码
  • 后记

前言

github开源代码
python API文档

作为一个纯计算机背景的小白,关于CT的相关工具,专业课是一点没有呀,好不容易找到一个库,网上居然一个教程都没有。所以自己写一个简易的快速上手的教程,希望能帮到同样使用这个库的人。

LEAP这个库的好处在于,它利用pytorch.autograd进行实现,也就是他的输入和输出都是tensor,这实际上十分便于神经网络过程中添加一些这样的投影计算,也可以用来计算loss,真的非常棒。

库的安装大家可以查看开源代码,或许过几天我会写一个安装教程也说不定。

Projector 用于设定投影参数的类

from LEAP_torch import Projector
proj = Projector(forward_project=True, 
                     use_static=False, 
                     use_gpu=False, 
                     gpu_device=None, 
                     batch_size=1)
proj.load_param('...')

参数解释:

  • forward_project=None
    用于设定该投影类的forward函数是执行前向还是逆向过程。
    在这里插入图片描述
def forward(self, input, project_mode="forward"):
        if self.forward_project is not None:
            if self.forward_project:
                if self.use_gpu:
                    return ProjectorFunctionGPU.apply(input, self.proj_data, self.vol_data, self.param_id_t)
                else:
                    return ProjectorFunctionCPU.apply(input, self.proj_data, self.vol_data, self.param_id_t)
            else:
                if self.use_gpu:
                    return BackProjectorFunctionGPU.apply(input, self.proj_data, self.vol_data, self.param_id_t)
                else:
                    return BackProjectorFunctionCPU.apply(input, self.proj_data, self.vol_data, self.param_id_t)
        else:
            if project_mode=="forward":
                if self.use_gpu:
                    return ProjectorFunctionGPU.apply(input, self.proj_data, self.vol_data, self.param_id_t)
                else:
                    return ProjectorFunctionCPU.apply(input, self.proj_data, self.vol_data, self.param_id_t)
            elif project_mode=="backward":
                if self.use_gpu:
                    return BackProjectorFunctionGPU.apply(input, self.proj_data, self.vol_data, self.param_id_t)
                else:
                    return BackProjectorFunctionCPU.apply(input, self.proj_data, self.vol_data, self.param_id_t)

如果填写默认的None,并且在forward中不修改project_mode,即如果你什么都不做,那么默认为前向。

  • use_static=False
    官网并没有查到相关的说明,但是通过查其c++源码,可以发现,应该是用于确定XYZ顺序的,因为在C++源码里发现了设定volumeDimensionOrder变量。

  • use_gpu=False

  • gpu_device=None

字面意思,后面的gpu_device设置为数字即可,因为在实现过程中,是采用的将volume.to(deivce)这样的pytorch的实现方式。

  • batch_size=1

其它功能

load_param(str filepath)

这实际上是一个非常有用的函数,可以一次性解决很多问题,而不需要专门的调用设置不同光的函数这里我们以DOLCE这篇论文中的cfg设置为例,解析每个参数的含义这篇论文好是好,居然没有训练的脚本

img_dimx = 512
img_dimy = 512
img_dimz = 1
img_pwidth = 0.8
img_pheight = 0.8
img_offsetx = 0
img_offsety = 0
img_offsetz = 0
proj_geometry = parallel
proj_arange = 60
proj_nangles =240
proj_nrows = 1
proj_ncols = 512
proj_pheight = 0.8
proj_pwidth = 0.8
proj_crow = 0
proj_ccol = 255.5
proj_phis = 
proj_sod = 0
proj_sdd = 0

下面我们进行参数解释:

  • img_dimx 图像长度
  • img_dimy 图像宽度
  • img_dimz 图像channel
  • img_pwidth volume的x,y轴体素间距
  • img_pheight volume的z轴体素间距
  • img_offsetx volume的x轴体素偏移,单位为毫米(mm)
  • img_offsety volume的y轴体素偏移,单位为毫米(mm)
  • img_offsetz volume的z轴体素偏移,单位为毫米(mm)
  • proj_geometry 决定投影射线类型,是锥束光线(cone)还是平行光线(parallel)
  • proj_arange 设定角度的取值范围,如图为[0,60]度
  • proj_nrows 设定投影角度的数目
  • proj_nrows x射线探测器的行数
  • proj_ncols x射线探测器的列数
  • proj_pheight 探测器柱行之间的探测器像素间距(即像素大小),单位为mm
  • proj_pwidth 探测器柱列之间的探测器像素间距(即像素大小),单位为mm
  • proj_crow 探测器像素行索引,用于从光源经过原点到达探测器的光线(没看懂)
  • proj_ccol 探测器的像素列索引为从光源经过原点到达探测器的光线(没看懂)
  • proj_phis 如果有设定,则按照设定的角度直接作为角度的取值,类型为str,例如"10,20,30",用逗号隔开
  • proj_sod 放射源到物体距离,单位:mm;这也可以看作是放射源到物体的旋转中心的距离
  • proj_sdd 放射源到探测器的距离,单位为mm

forward(ipt, project_mode=“forward”)

用于进行投影的函数,可以直接对Projector调用,用法可以将Projector当作一个神经网络的感觉。

# 这是一个样例
pObj = Projector(...)

ct= torch.tensor(size=(1,1,512,512)) # 一般一个CT的Slice切片尺寸是这个样子
sino = pObj(ct, project_mode="forward") # 根据前文的cfg,尺寸为(1,240,1,512)
# 分别为(BatchSize,nAngels,channel,ImgSize)
backsino = pObj(sino, project_mode="backward") # (1,1,512,512)

下面给出几个样例图片,其中图一是sino(由Projector产生),图二是backsino,图三是FBP产生的图像,图四为原图ct。

其中需要说明,sino的这个图是调整nangle=512=img_size,并且交换维度产生的。
Alt

请添加图片描述
请添加图片描述
请添加图片描述

样例代码

import matplotlib.pyplot as plt
from guided_diffusion.image_datasets import dataset2run
from dataFidelities.CTClass import set_CTClass
from guided_diffusion import logger
data = dataset2run(
        data_dir="./dataset/CKC/",
        batch_size=1,
        image_size=512,
        angle_range=90,
        deterministic=True
    )
dObj = set_CTClass('cpu', 'cuda:1', use_cuda=False, 
                       batch_size=1, use_static=False,
                       param_fn="./config/param_parallel512_la90.cfg", rank=1, logger=logger)
for i, j in data.load_data():
    plt.imsave('ts.png',i.squeeze(0).squeeze(0),cmap='gray')
    plt.imsave('fbp.png',j['condition_fbp'].squeeze(0).squeeze(0),cmap='gray')
    tt = dObj.fmult(i)
    img = dObj.projector(tt, project_mode='backward')
    tt = tt.permute(0, 2, 1, 3)
    print(tt.shape)
    print(img.shape)
    plt.imsave('sino.png',tt.squeeze(0).squeeze(0),cmap='gray')
    plt.imsave('rec.png',img.squeeze(0).squeeze(0),cmap='gray')
    break


后记

其它的功能我用到再说吧。可能写的leap版本不一样,这里的leap是DOLCE里面实现的fork版本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/514909.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【BlossomConfig】SpringCloud项目是如何对bootstrap配置文件进行加载的?

文章目录 bootstrap配置文件的读取什么是配置中心?以及如何实现一个配置中心?SpringBoot如何实现配置的管控?SpringCloud项目是如何对bootstrap配置文件进行加载的?Nacos是如何实现配置文件的读取加载的?开发配置中心前…

jQuery(二)

文章目录 1.jQuery操作节点1.查找节点,修改属性1.基本介绍2.切换图片案例 2.创建节点1.基本介绍2.内部插入3.外部插入4.小结1.插入方法说明2.两种插入方法的区别 5.插入元素实例6.移动元素实例 3.删除节点1.基本介绍2.代码实例 4.复制节点1.基本介绍2.代码实例 5.替…

SpringBoot整合ELK8.1.x实现日志中心教程

目录 背景 环境准备 环境安装 1.JDK安装 2.安装Elasticsearch 3.安装zookeeper 4.安装Kafka 5.安装logstash 6.安装file beat 解决方案场景 1.日志采集 1.1 应用日志配置 1.1.1 创建logback-spring.xml文件 1.1.2 创建LoggerFactory 1.1.3 trace日志的记录用法 …

【realme x2手机解锁BootLoader(简称BL)】

realme手机解锁常识 https://www.realme.com/cn/support/kw/doc/2031665 realme手机解锁支持型号 https://www.realmebbs.com/post-details/1275426081138028544 realme x2手机解锁实践 参考:https://www.realmebbs.com/post-details/1255473809142591488 1 下载apk…

vue3数据库中存头像图片相对路径在前端用prop只能显示路径或无法显示图片只能显示alt中内容的问题的解决

不想看前情可以直接跳到头像部分代码 前情: 首先我们是在数据库中存图片相对路径,这里我们是在vue的src下的assets专门建一个文件夹img存头像图片。 然后我们如果用prop"avatar" label"头像"是只能显示图片路径的,即lo…

python的pip如何升级

升级pip的方法如下: 打开命令行工具。在Windows系统中,可以通过按下WinR键,然后输入"cmd"来打开命令提示符;在Mac或Linux系统中,可以直接打开终端。检查当前pip版本。在终端或命令行中输入以下命令&#…

v-text 和v-html

接下来&#xff0c;我讲介绍一下v-text和v-html的使用方式以及它们之间的区别。 使用方法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-widt…

RUST语言变量与数据类型使用

使用之前了解: fn main() 表示程序入口点 println!("要输出的内容"); 表示格式化输出 变量与常量声明: let 变量:变量类型 变量值;let mut 变量:变量类型 变量值; const 常量:常量类型 常量值 如果 声明时不指定类型,将根据赋值类型自动推导 变量类型参与下…

Regression算法

文章目录 用线性回归找到最佳拟合直线标准回归函数局部加权线性回归函数 用线性回归找到最佳拟合直线 from google.colab import drive drive.mount("/content/drive")Mounted at /content/drivefrom numpy import *def loadDataSet(fileName):numFeat len(open(fi…

ideaSSM 校园兼职招聘平台bootstrap开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea 开发 SSM 校园兼职招聘平台是一套完善的信息管理系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff…

图的应用解析

01&#xff0e;任何一个无向连通图的最小生成树(B )。 A.有一棵或多棵 B.只有一棵 C.一定有多棵 D.可能不存在 02.用Prim算法和Kruskal算法构造图的最小生成树&#xff0c…

windows@软件显示模糊@屏幕显示器分辨率和精细度

文章目录 refsDPIPPIPPI (Pixels Per Inch)DPI (Dots Per Inch) 屏幕尺寸数windows中DPI设置对单个应用设置DPI兼容性设置使用系统全局设置 获取屏幕(监视器)信息&#x1f47a;获取监视器的型号pnp 监视器windows 获取屏幕分辨率 高分辨率屏幕高分辨率和高精细度屏幕&#x1f4…

基于Python的微博旅游情感分析、微博舆论可视化系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

基于深度学习的吸烟检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

摘要&#xff1a;本文深入研究了基于YOLOv8/v7/v6/v5等深度学习模型的吸烟行为检测系统&#xff0c;核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法&#xff0c;进行性能指标对比&#xff1b;详述了国内外研究现状、数据集处理、算法原理、模型构建与训练代码&#xff0c;及…

Android配置抓包证书的原理

一、数字证书的常见格式 数字证书有多种格式&#xff0c;其中一些常见的格式包括&#xff1a; X.509证书&#xff1a; X.509是最常见的数字证书标准&#xff0c;它定义了公钥证书的格式和相关的验证流程。X.509证书通常使用DER编码或PEM编码。 DER (Distinguished Encoding …

Linux进程概念(一):冯诺依曼体系结构和操作系统的基本概念

目录 冯诺依曼体系结构 操作系统 理解操作系统的“管理” 操作系统的六层结构 冯诺依曼体系结构 输入设备&#xff1a;键盘、鼠标、摄像头、话筒、磁盘、网卡输出设备&#xff1a;显示器、声卡、磁盘、网卡、显示器等......CPU&#xff1a;运算器、控制器存储器&#xff1a…

js表达式

js 数据&#xff1a; 字面量 1 123 变量 a 表达式 12 2*2 a&&b 表达式都会有一个返回结果。表达式仍然是数据&#xff0c;所有可以写字面量&#xff0c;变量的地方都可以写表达式 在JavaScript中&#xff0c;表达式中的运算符具有不同的优先级&#xff0c;这决定…

C++语言学习(二)——⭐缺省参数、函数重载、引用

1.⭐缺省参数 &#xff08;1&#xff09;缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实参则采用该形参的缺省值&#xff0c;否则使用指定的实参。 void Func(int a 0) {cout<<a<<endl; } int…

什么是「第一性原理」?

生活中的诸多原则&#xff0c;宛如无形的锁链&#xff0c;束缚着我们的价值观、认知、信仰体系及学习推理的方式。 我们的观点&#xff0c;犹如被锁链牵引的风筝&#xff0c;随风飘摇&#xff0c;却始终无法挣脱这些原则的束缚。 我们的大脑&#xff0c;在思考的瞬间&#xf…

Redis 的主从复制、哨兵

目录 一. Redis 主从复制 1. 介绍 2. 作用 3. 流程 4. 搭建 Redis 主从复制 安装redis 修改 master 的Redis配置文件 修改 slave 的Redis配置文件 验证主从效果 二. Redis 哨兵模式 1. 介绍 2. 原理 3. 哨兵模式的作用 4. 工作流程 4.1 故障转移机制 4.2 主节…