医疗图像三维重建方法小结(python+VTK+ITK+Mayavi)

2023-11-03

环境简介

语言是python,主要介绍可能用到的库

  • Scipy
  • ITK
  • VTK
  • Mayavi
  • TVTK
  • Matplotlib

方法

在尝试重建三维模型的过程中,查询了不同版本的方法,在这里记录一下。

方法一 Poly3DCollection+matplotlib

使用mpl_toolkits 的Poly3DCollection,其中使用的是marching_cubes算法。
使用matplotlib进行显示。

import numpy as np
import pandas as pd
import os
import scipy.ndimage
import matplotlib.pyplot as plt
from skimage import measure, morphology
from mpl_toolkits.mplot3d.art3d import Poly3DCollection

def plot_3d(image, threshold=-300):
    
    # Position the scan upright, 
    # so the head of the patient would be at the top facing the camera
    p = image.transpose(2,1,0)
    p = p[:,:,::-1]
    
    verts, faces = measure.marching_cubes(p, threshold)

    fig = plt.figure(figsize=(10, 10))
    ax = fig.add_subplot(111, projection='3d')

    # Fancy indexing: `verts[faces]` to generate a collection of triangles
    mesh = Poly3DCollection(verts[faces], alpha=0.1)
    face_color = [0.5, 0.5, 1]
    mesh.set_facecolor(face_color)
    ax.add_collection3d(mesh)

    ax.set_xlabel("x-axis")
    ax.set_ylabel("y-axis")
    ax.set_zlabel("z-axis")

    ax.set_xlim(0, p.shape[0])  # a = 6 (times two for 2nd ellipsoid)
    ax.set_ylim(0, p.shape[1])  # b = 10
    ax.set_zlim(0, p.shape[2])  # c = 16

    plt.show()

优点:轻量化可以嵌入ipython里
缺点:

  • 不能旋转视图观察,可以使用poltly进行交互式显示。
  • 显示效果差,smooth的效果差。可以自己造轮子对源数据进行插值。然而插值始终不是基于Isosurface的,所以显示效果不会太好。

方法二 VTK+ITK

自己造轮子,基于VTK进行重建显示。

import vtk


def main():
    colors = vtk.vtkNamedColors()

    fileName = get_program_parameters()

    colors.SetColor("SkinColor", [255, 125, 64, 255])
    colors.SetColor("BkgColor", [51, 77, 102, 255])

    # Create the renderer, the render window, and the interactor. The renderer
    # draws into the render win
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

医疗图像三维重建方法小结(python+VTK+ITK+Mayavi) 的相关文章

随机推荐

  • 单片机毕设 基于单片机的人脸识别追踪

    文章目录 1 简介 2 项目简介 2 主要器件 3 硬件效果 4 软件设计 4 1 功能架构 4 2 软件程序流程图 5 部分实现代码 6 演示效果 6 最后 1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 基于单片机的人脸识
  • SQL Server的链接服务器创建全详细流程

    创建SQL Server链接服务器的详细流程如下 打开 SQL Server Management Studio SSMS 连接到你想要创建链接服务器的目标实例 在对象资源管理器中 展开 服务器对象 节点 右键点击 链接服务器 然后选择 新
  • 关联分析:Apriori算法

    本文代码及数据集来自 Python大数据分析与机器学习商业案例实战 步骤1 设定最小支持度和最小置信度 首先设定最小支持度为2 5 即40 最小置信度为4 5 即80 步骤2 根据最小支持度找出所有的频繁项集 这一步骤是关联分析中较为重要的
  • windows安装git和环境变量配置

    下载安装 1 从git官网下载一个git安装包 官网下载地址http www git scm com download 2 双击安装程序 进入欢迎界面点击 Next gt 3 阅读协议 点击 Next gt 4 选
  • modbus poll

    刚刚发布Modbus测试工具 Modbus Slave调试工具 不过已经是昨天了 今天开始发布Modbus测试工具 Modbus Master调试工具 做为Modbus主站 发送命令包 采集从站的数据 典型工具如 Modbus Poll M
  • 第十三章总结

    一 泛型 1 定义泛型类 泛型机制语法 类名
  • 用typedef来定义二维数组

    include
  • 线性表的基本操作,包括:创建、插入、删除、查找等基本操作

    标签 数据结构 线性表是数据结构中最直观 最简单的一类抽象数据类型 本次需要使用顺序表来实现线性表 并编写相应的测试程序对你所创建的顺序表及单链表进行测试 以下给出测试样例 输入数据格式 第一行只有一个整型数N 0
  • Linux详解

    一 Linux简介 Linux系统是一种自由和开放源代码的类Unix操作系统 只要遵循GNU通用公共许可证 任何人和机构都可以自由地使用Linux的所有底层源代码 也可以自由的修改和再发布 Linux这个词本身只表示Linux内核 但实际上
  • 1-Openwrt ipv6之-odhcp6c客户端

    wan口的拨号有好几种方式 SLAAC stateless DHCPv6 stateful DHCPv6 DHCPv6 PD 这些请求方式在odhcpv6里面都可以配置 1 odhcp6c客户端启动过程 开启openwrt config配置
  • java list分组成map

    文章目录 前期准备 实操 Lambda表达式方式 groupingBy分组 partitioningBy 分组 传统方式 总结 将List集合分成分组成map在工作中常常会遇到 这里我总结了两种方式 Lambda表达式方式和传统方式 前期准
  • Transformer(二)--论文理解:transformer 结构详解

    转载请注明出处 https blog csdn net nocml article details 110920221 本系列传送门 Transformer 一 论文翻译 Attention Is All You Need 中文版 Tran
  • 留言簿怎么用?

    看不到别人留言 自己也没法写留言 囧rz
  • React之antdesign官网虚拟列表(Table组件)二次封装

    1 功能介绍 建议 官网链接 建议 走一遍官网的虚拟列表 最好走通 官网虚拟列表功能都有 但是 官网虚拟列表里面跟之前表格 ant table tbody 相关的功能都无了 因为这块官网是整体替换了 ant table tbody 这一级的
  • 流形学习的解释

    作者 知乎用户 链接 https www zhihu com question 24015486 answer 194284643 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 最近发现我的这篇回答被人洗稿
  • 七天玩转Redis

    文章目录 Redis 事务 1 正常执行事务 2 取消事务执行 3 事务编译时异常 4 运行时异常 5 Redis乐观锁 Redis 事务 什么是事务 事务是一个单独的隔离操作 事务中的所有命令都会序列化 有顺序地执行 事务在执行的过程中
  • 数据结构-队列(链队列与循环队列)

    目录 队列的概念及结构 概念 结构 链队列 初始化QueueInit 销毁QueueDestroy 入队QueuePush 出队QueuePop 队头元素QueueFront 队尾元素QueueBack 队列长度QueueSize 判断是否
  • C/C++性能测试工具---Valgrind

    一 valgrind memcheck 内存错误检测器 可以检测下列与内存相关的问题 未释放内存的使用 对释放后内存的读 写 对已分配内存块尾部的读 写 内存泄露 不匹配的使用malloc new new 和 free delete del
  • Python:Using TensorFlow backend.

    声明 先说个故事吧 有一个农夫想制作一套农具 就买来一些工具 但是有了工具依然不会用 就去找别人帮忙 有一个人教给农夫一套方法 农夫高兴地就回家了 结果农夫发现 用这个人给的方法 跟自己的工具不匹配 然后就跟别人说这个人害人不浅 为什么要说
  • 医疗图像三维重建方法小结(python+VTK+ITK+Mayavi)

    医疗图像三维重建forpython 环境简介 方法 方法一 Poly3DCollection matplotlib 方法二 VTK ITK 方法三 Mayavi之contour3d 最终方法Mayavi TVTK 环境简介 语言是pytho