当前位置: 首页 > news >正文

Python使用VTK对容积超声图像进行体绘制(三维重建)

目录

    • VTK简介
    • 什么是体绘制?
    • 体绘制效果图
    • 流程
    • Code
    • Q&A
    • Reference

VTK简介

VTK(Visualization Toolkit)是一个用于3D计算机图形学、图像处理和可视化的开源软件包。它包括一组C++类和工具,可以让用户创建和处理复杂的3D图形和数据可视化。VTK提供了多种算法,如体绘制、剪切、切片、等值面、等值线、流线、轮廓线、纹理映射等,可以处理各种类型的数据,包括体数据、网格数据、点云数据等。VTK也提供了Python、Java等多种编程语言的接口,方便用户在不同的环境中使用。
VTK的应用十分广泛,包括医学图像处理、工程和科学可视化、计算流体动力学、地球科学、物理模拟等领域。由于其开源和免费的特点,VTK被广泛应用于学术界和工业界,并得到了许多用户和贡献者的支持和发展。

什么是体绘制?

体绘制,也称为三维重建(区别于投影图像的三维重建),直接利用体数据来生成二维图像的绘制技术。与面绘制不同的是体绘制技术不需要提取体数据内部的等值面,它是一个对三维体数据进行采样和合成的过程。体绘制能够通过设置不透明度值来显示体数据内部的不同成分和细节。常用于人体CT图像通过设置不透明度来显示各种器官与组织。总的来说体绘制是包含体数据,而面绘制则是让整个模型由多种多边形构成模型表面,但内部是空的,想要看到模型各个切面的数据还是需要使用体绘制。

体绘制效果图

超声图像大小尺寸为 208 x 240,一共176张,往z轴延伸。
体绘制

流程

VTK体绘制渲染管线

1. 将多张图像转化为vtkImageData
2. 使用体绘制算法,本文用的是vtkGPUVolumeRayCastMapper
3. vtkVolume
4. vtkRenderer
5. vtkRenderWindow
vtkVolumeProperty设置颜色与不透明度
SetColor
SetScalarOpacity

Code

import vtk# 定义图片读取接口
# 读取PNG图片就换成PNG_Reader = vtk.vtkPNGReader()
Jpg_Reader = vtk.vtkJPEGReader()
Jpg_Reader.SetNumberOfScalarComponents(1)
Jpg_Reader.SetFileDimensionality(3)  # 说明图像是三维的
# 定义3D模型大小,图像大小尺寸为 208 x 240, 一共176张
# 定义范围从0开始
Jpg_Reader.SetDataExtent(0, 207, 0, 239, 0, 175)
# 设置图像的存放位置
Jpg_Reader.SetFilePrefix("./imgs/")
# 迭代文件中所有图像, 图像命名格式为: 000.jpg开始到175.jpg, 03d代表三位字符串, 不够三位则左侧补0
Jpg_Reader.SetFilePattern("%s%03d.jpg")
Jpg_Reader.Update()
# 二进制数据排序按小端(LittleEndian)规则
Jpg_Reader.SetDataByteOrderToLittleEndian()
# 图像处理结束# 创建一个vtkRenderer对象,用于显示渲染结果
renderer = vtk.vtkRenderer()# 创建一个vtkRenderWindow对象,用于显示vtkRenderer对象中的内容
render_window = vtk.vtkRenderWindow()
render_window.AddRenderer(renderer)# 创建一个vtkRenderWindowInteractor对象,用于处理交互事件
interactor = vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(render_window)# 应用体绘制算法,生成三维模型
volume_mapper = vtk.vtkGPUVolumeRayCastMapper()
volume_mapper.SetInputData(Jpg_Reader.GetOutput())# 定义颜色映射
color_transfer_function = vtk.vtkColorTransferFunction()
# 越接近黑色0越暗, 越接近白色255越亮
color_transfer_function.AddRGBPoint(0, 0.0, 0.0, 0.0)
color_transfer_function.AddRGBPoint(255, 1.0, 1.0, 1.0)# 设置不透明度函数
opacity_transfer_function = vtk.vtkPiecewiseFunction()
# 把像素值低于15的设置为透明, 去除黑色0, 白色255则不透明
threshold = 15
for i in range(threshold):opacity_transfer_function.AddPoint(i, 0.0)
opacity_transfer_function.AddPoint(255, 1.0)# 设置vtkVolume参数
volume_property = vtk.vtkVolumeProperty()
volume_property.SetColor(color_transfer_function)
volume_property.SetScalarOpacity(opacity_transfer_function)
# 是否开启阴影
# volume_property.ShadeOn()
# 设置线性插值方式
volume_property.SetInterpolationTypeToLinear()# 将vtkVolumeMapper、vtkVolumeProperty和vtkVolume组合在一起
volume = vtk.vtkVolume()
volume.SetMapper(volume_mapper)
volume.SetProperty(volume_property)renderer.AddVolume(volume)
# 设置背景为白色
renderer.SetBackground(1.0, 1.0, 1.0)# 显示渲染结果
render_window.Render()
interactor.Start()

Q&A

  1. Q: 如何过滤VTK模型中的背景/黑色部分/空气部分?
    A: 给vtkVolume的Property通过SetScalarOpacity函数设置opacity_transfer_function,给不需要显示的组织的对应像素设置透明度为0即可过滤对应组织。

Reference

  1. 《VTK图形图像开发进阶》- 张晓东 罗火灵编著

相关文章:

Python使用VTK对容积超声图像进行体绘制(三维重建)

目录VTK简介什么是体绘制?体绘制效果图流程CodeQ&AReferenceVTK简介 VTK(Visualization Toolkit)是一个用于3D计算机图形学、图像处理和可视化的开源软件包。它包括一组C类和工具,可以让用户创建和处理复杂的3D图形和数据可视…...

JAVA设计模式之工厂模式讲解

目录 前言 开始表演 前言 Java中使用工厂模式的主要原因是为了实现代码的灵活性和可维护性。工厂模式是一种创建型设计模式,它提供了一种将对象的创建和使用进行分离的方式。具体来说,工厂模式可以将对象的创建过程封装在一个独立的工厂类中&#xff…...

近万字概述L3及以上自动驾驶故障运行和故障安全机制

本文描述了对ADS的FO和FS机制的评估方法。当系统不能按预期运行时,ADS将使用FO和FS机制。这些机制使ADS能够在最大程度上达到使车辆及其乘员脱离危险的MRC。定义、测试和验证实现MRC的FO和FS策略是确保ADS安全运行和部署的重要步骤。 MRC在SAE J3016中被定义为: 用户或ADS在…...

kafka入门到精通

文章目录一、kafka概述?1.定义1.2消息队列1.2.1 传统消息队列的使用场景1.2.2 消息队列好处1.2.3 消息队列两种模式1.3 kafka基础架构二、kafka快速入门1.1使用docker-compose安装kafka1.2测试访问kafka-manager1.3 查看kafka版本号1.4 查看zookeeper版本号1.5 扩展…...

es-09模糊查询

模糊查询 前缀搜索&#xff1a;prefix 概念&#xff1a;以xx开头的搜索&#xff0c;不计算相关度评分。 注意&#xff1a; 前缀搜索匹配的是term&#xff0c;而不是field。前缀搜索的性能很差前缀搜索没有缓存前缀搜索尽可能把前缀长度设置的更长 语法&#xff1a; GET <ind…...

57 - 深入解析任务调度

---- 整理自狄泰软件唐佐林老师课程 文章目录1. 问题1.1 思考1.2 实例分析&#xff1a;问题分析及解决2. 深入讨论2.1 任务调度的定义2.2 关于调度算法的分类2.3 什么时候进行任务调度2.4 任务的分类2.5 关于优先级调度2.6 问题2.7 调度算法的终极目标2.8 课后扩展1. 问题 系统…...

CAN总线开发一本全(3) - 微控制器集成的FlexCAN外设

CAN总线开发一本全&#xff08;3&#xff09; - 微控制器集成的FlexCAN外设 苏勇&#xff0c;2023年2月 文章目录CAN总线开发一本全&#xff08;3&#xff09; - 微控制器集成的FlexCAN外设引言硬件外设模块系统概要总线接口单元 - 寄存器清单数据结构 - 消息缓冲区MB初始化过…...

Elasticsearch7.8.0版本进阶——段合并

目录一、段的概述1.1、段的概念1.2、段的缺点1.3、如何解决段数量暴增问题二、段合并的流程三、段合并的注意事项一、段的概述 1.1、段的概念 每一 段 本身都是一个倒排索引。 1.2、段的缺点 由于自动刷新流程每秒会创建一个新的段 &#xff0c;这样会导致短时间内的段数量…...

Java版贪食蛇游戏

技术&#xff1a;Java等摘要&#xff1a;近年来Java作为一种新的编程语言&#xff0c;以其简单性、可移植性和平台无关性等优点&#xff0c;得到了广泛地应用&#xff0c;特别是Java与万维网的完美结合&#xff0c;使其成为网络编程和嵌入式编程领域的首选编程语言。MyEclipse是…...

2023年度数学建模竞赛汇总

本人7年数学建模竞赛经验&#xff0c;历史获奖率百分之百。团队成员都是拿过全国一等奖的硕博&#xff0c;有需要数模竞赛帮助的可以私信我。 下面主要列几年一些比较有含金量的数学建模竞赛&#xff08;按比赛时间顺序&#xff09; 1. 美国大学生数学建模竞赛 报名时间&…...

了解Python语言和版本

1.1 任务1了解Python语言和版本 Python 语言的名字来自于一个著名的电视剧"Monty Pythons Flying Cireus",Python之父 Guido van Rossum是这部电视剧的狂热爱好者&#xff0c;所以把他设计的语言命名为Python。 Python 是一门跨平台、开源、免费的解释型高级动态编…...

nvm (node版本管理工具)安装的详细步骤,并解决安装过程中遇到的问题

1、下载NVM&#xff0c;跳转下载链接后&#xff0c;如下图&#xff0c;下载红框后解压文件 2、安装 注意&#xff1a;双击安装之后&#xff0c;会有两个地址选择&#xff0c; 1、地址中不能存在空格 2、不要放在C盘中&#xff0c;后面需要改个设置文件&#xff0c;安装到C盘的…...

朴素贝叶斯笔记

贝叶斯公式在A 条件成立下&#xff0c;B的概率等于B的概率*在B条件成立下&#xff0c;A的概率/A的概率&#xff0c;推导假设一个学校中男生占总数的60%&#xff0c;女生占总数的40%。并且男生总是穿长裤&#xff0c;女生则一半穿长裤、一半穿裙子。1.正向概率。随机选取一个学生…...

【GUI】用于电动助力车性能分析的GUI(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…...

Android:反编译apk踩坑/apktool/dex2jar/JDGUI

需求描述 想要反编译apk文件&#xff0c;搜到了这篇博客&#xff1a;Android APK反编译就这么简单 详解&#xff08;附图&#xff09;&#xff0c;非常有参考价值~但其中的工具下载链接都已404&#xff0c;而本杂鱼实际操作的过程中也出现了亿点点点点点点的问题&#xff0c;于…...

React 跨域的配置

1、为什么会出现跨域&#xff1f; 浏览器遵循同源政策&#xff08;同源策略三要素&#xff1a;协议相同、域名相同、端口相同&#xff09; 2、配置跨域代理 使用中间件 http-proxy-middleware&#xff08;安装依赖&#xff09; npm install http-proxy-middleware 创建setupP…...

Elasticsearch7.8.0版本进阶——持久化变更

目录一、持久化变更的概述二、事务日志&#xff08;translog&#xff09;三、持久化变更完整流程四、事务日志&#xff08;translog&#xff09;的作用五、事务日志&#xff08;translog&#xff09;的目的一、持久化变更的概述 没有用 fsync 把数据从文件系统缓存刷&#xff…...

CF Edu 127 A-E vp补题

CF Edu 127 A-D vp补题 继续每日一vp&#xff0c;今天晚上有课&#xff0c;时间不太多&#xff0c;回去就直接vp。前三题比较简单&#xff0c;过了之后排名rk2000&#xff0c;然后就去洗澡了。d题没怎么认真思考&#xff0c;其实也可做。最后rk4000。发挥还行&#xff0c;b题罚…...

剑指 Offer 05. 替换空格

摘要 剑指 Offer 05. 替换空格 一、字符替换 由于每次替换从1个字符变成3个字符&#xff0c;使用字符数组可方便地进行替换。建立字符数组地长度为 s 的长度的3倍&#xff0c;这样可保证字符数组可以容纳所有替换后的字符。 获得 s 的长度 length创建字符数组 array&#x…...

通过操作Cortex-A7核,串口输入相应的命令,控制LED灯进行工作

1.通过操作Cortex-A7核&#xff0c;串口输入相应的命令&#xff0c;控制LED灯进行工作 例如在串口输入led1on,开饭led1灯点亮 2.例如在串口输入led1off,开饭led1灯熄灭 3.例如在串口输入led2on,开饭led2灯点亮 4.例如在串口输入led2off,开饭led2灯熄灭 5.例如在串口输入led…...

2.2.2.1 搭建Spark单机版环境

本次实战旨在Linux环境下完成Spark单机版环境的搭建。首先确保JDK已正确安装&#xff0c;随后获取Spark安装包并上传至服务器指定目录。接着&#xff0c;将安装包解压至系统路径&#xff0c;并通过修改配置文件设置环境变量&#xff0c;使系统能够识别Spark命令。最后&#xff…...

Linux上的蓝牙架构

我给你捋 Linux 5.x 官方标准蓝牙架构&#xff0c;和 Wi-Fi 架构高度对称&#xff0c;你看完会发现&#xff1a;蓝牙和 Wi-Fi 在 Linux 里设计几乎一模一样。蓝牙架构全程从硬件 → 驱动 → 内核 → 用户态&#xff0c;一层一层讲透。一、一句话总架构&#xff08;和 Wi-Fi 对照…...

SSM+Vue医院食堂订餐系统源码+论文

代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择&#xff1a; 《SpringBoot网站项目》1800套 《SSM网站项目》1500套 《小程序项目》1600套 《APP项目》1500套 《Python网站项目》…...

Windows任务栏美化完全指南:打造个性化桌面体验

Windows任务栏美化完全指南&#xff1a;打造个性化桌面体验 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB Windows任务栏美化是许多用户…...

JSW-8016GM4 加固交换机

■ 三层交换机&#xff0c;功能强大 ■ 支持16个10/100/1000M 以太网接口 ■ 支持4个10G光纤接口 ■ 支持IEEE802相关协议 ■ 2U高度&#xff0c;可在方舱上架安装 ■ 满足电磁兼容要求 ■ 整机加固设计&#xff0c;满足国军标相关要求主要参数产品类型&#xff1a;千兆以太网交…...

暑期实习面经记录(十四)(java)(4.2号补充下,闪闪改改)

本人最近面的被问的比较多的java八股先完成再完美1.如何设计一个扣减库存或者说秒杀抢券系统2.最近问这个问的比较多多线程->线程池->并发安全->场景2.锁->synconiezed,retranlock->可重入吗->怎么实现的2.1读写锁 怎么实现的&#xff1b;AQS底层&#xff1b…...

循环冷却水流量示意图设计 建筑水流量示意图绘制教程

一、引言 在建筑给排水、暖通空调及工业循环水系统设计中&#xff0c;循环冷却水流量示意图与建筑水流量示意图是核心技术图纸之一&#xff0c;其作用是直观呈现水流路径、管径规格、流量分配、设备连接关系及压力节点参数&#xff0c;为系统施工、调试、运维及故障排查提供可…...

基于Wan 3D Causal VAE(Show-o2)的模型,重新完整地分析 10分钟的视频 对应多少 vison token

可以。这次我按 Show-o2 官方 432432 配置 和 Wan 3D Causal VAE 的公开时间压缩规则,把 10B token 且全部都是 vision token 的情况重新完整算一遍。下面的“大小”我统一按 未压缩 RGB 原始数据量 来算;如果你问的是实际 JPG / PNG / MP4 落盘大小,那会随压缩格式、码率和…...

线性结构之链表[基于郝斌课程]

每个结点只有一个前续结点每个结点只有一个后续结点首结点没有前续结点尾结点没有后续结点专业术语&#xff1a;首结点&#xff1a;第一个有效结点&#xff0c;存放第一个有效数据尾结点&#xff1a;最后一个有效结点&#xff0c;存放最后一个有效数据头结点&#xff1a;在首结…...

实战指南:基于快马AI生成可部署的、支持多游戏与数据库的账号管理应用

今天想和大家分享一个实战项目&#xff1a;用Python开发一个支持多游戏的账号管理器&#xff08;俗称"lv上号器"&#xff09;。这个工具特别适合游戏多开玩家&#xff0c;能安全存储不同游戏的账号信息&#xff0c;还能一键登录不同游戏客户端。 项目需求分析 首先明…...