news 2026/7/11 21:47:33

TissueLens 模型表面建立球形视口查看体素数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TissueLens 模型表面建立球形视口查看体素数据

一:主要的知识点

1、说明

本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客

2、知识点纪要

本段代码主要涉及的有①透镜模型


二:代码及注释

import vtkmodules.vtkRenderingCore import vtkmodules.vtkInteractionStyle from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkFiltersSources import vtkSphereSource from vtkmodules.vtkCommonDataModel import vtkSphere from vtkmodules.vtkFiltersCore import vtkFlyingEdges3D, vtkProbeFilter from vtkmodules.vtkIOImage import vtkMetaImageReader from vtkmodules.vtkCommonCore import vtkLookupTable from vtkmodules.vtkFiltersGeneral import vtkClipDataSet from vtkmodules.vtkRenderingCore import ( vtkActor, vtkCamera, vtkDataSetMapper, vtkProperty, vtkRenderWindow, vtkRenderWindowInteractor, vtkRenderer ) def main(): colors = vtkNamedColors() colors.SetColor('SkinColor', [240, 184, 160, 255]) colors.SetColor('BackfaceColor', [255, 229, 200, 255]) colors.SetColor('BkgColor', [51, 77, 102, 255]) file_name = "Data/FullHead.mhd" reader = vtkMetaImageReader() reader.SetFileName(file_name) reader.Update() skin_extractor = vtkFlyingEdges3D() skin_extractor.SetInputConnection(reader.GetOutputPort()) skin_extractor.SetValue(0, 500) clip_function = vtkSphere() clip_function.SetRadius(50) clip_function.SetCenter(73, 52, 15) skin_clip = vtkClipDataSet() skin_clip.SetInputConnection(skin_extractor.GetOutputPort()) skin_clip.SetClipFunction(clip_function) skin_clip.SetValue(0) skin_clip.GenerateClipScalarsOn() skin_clip.Update() skin_mapper = vtkDataSetMapper() skin_mapper.SetInputConnection(skin_clip.GetOutputPort()) skin_mapper.ScalarVisibilityOff() skin = vtkActor() skin.SetMapper(skin_mapper) skin.GetProperty().SetDiffuseColor(colors.GetColor3d('SkinColor')) back_prop = vtkProperty() back_prop.SetDiffuseColor(colors.GetColor3d('BackfaceColor')) skin.SetBackfaceProperty(back_prop) """ 定义透镜模型。这里的“透镜”指的就是用来显示内部组织的那个球形区域 vtkSphereSource 创建了一个几何体(一个由三角形网格组成的球),作为内部数据(体素强度)的载体 它的几何形状必须匹配用于裁剪等值面的隐式球体 """ lens_model = vtkSphereSource() lens_model.SetRadius(50) lens_model.SetCenter(73, 52, 15) lens_model.SetPhiResolution(201) lens_model.SetThetaResolution(101) """ vtkProbeFilter 是一个数据重采样过滤器,用于将一个数据集的属性(例如标量、矢量等)采样或映射到另一个数据集的几何结构上 在这里是实现将3D体积数据注入到球形几何体种的关键 """ lens_probe = vtkProbeFilter() """ 这里的SetInputConnection 定义了几何结构或查询点 输入的参数得是一个集合数据集,提供了要进行数据采样和属性附加的点的位置 """ lens_probe.SetInputConnection(lens_model.GetOutputPort()) """ SetSourceConnection 定义了属性值或数据源 输入的参数通常是一个带有属性值的数据集(通常是体积数据 vtkImageData 或 vtkUnstructuredGrid) """ lens_probe.SetSourceConnection(reader.GetOutputPort()) """ 这里以500为阈值,裁剪出符合指定标量值(500)的等值面 """ lens_clip = vtkClipDataSet() lens_clip.SetInputConnection(lens_probe.GetOutputPort()) # 正常人体体素值编码,空气,组织,皮肤和骨骼的排列顺序是 空气<软组织/水<皮肤/脂肪<骨骼 # 这里设皮肤为500,故只保留了内部组织或谷歌 lens_clip.SetValue(500) # lens_clip.InsideOutOn() # 保留<500的部分,默认关闭,所以源代码是保留>500的部分 lens_clip.GenerateClipScalarsOff() lens_clip.Update() bw_lut = vtkLookupTable() bw_lut.SetTableRange(0, 2048) bw_lut.SetSaturationRange(0, 0) bw_lut.SetHueRange(0, 0) bw_lut.SetValueRange(0.2, 1) bw_lut.Build() lens_mapper = vtkDataSetMapper() lens_mapper.SetInputConnection(lens_clip.GetOutputPort()) lens_mapper.SetScalarRange(lens_clip.GetOutput().GetScalarRange()) lens_mapper.SetLookupTable(bw_lut) lens = vtkActor() lens.SetMapper(lens_mapper) a_camera = vtkCamera() a_camera.SetViewUp(0, 0, -1) a_camera.SetPosition(0, -1, 0) a_camera.SetFocalPoint(0, 0, 0) a_camera.ComputeViewPlaneNormal() a_camera.Azimuth(30.0) a_camera.Elevation(30.0) a_renderer = vtkRenderer() ren_win = vtkRenderWindow() ren_win.AddRenderer(a_renderer) iren = vtkRenderWindowInteractor() iren.SetRenderWindow(ren_win) a_renderer.AddActor(lens) a_renderer.AddActor(skin) a_renderer.SetActiveCamera(a_camera) a_renderer.ResetCamera() a_camera.Dolly(1.5) a_renderer.SetBackground(colors.GetColor3d('BkgColor')) ren_win.SetSize(640, 480) ren_win.SetWindowName('TissueLens') a_renderer.ResetCameraClippingRange() ren_win.Render() iren.Initialize() iren.Start() if __name__ == '__main__': main()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 10:01:07

PyTorch多GPU训练全指南:单机到分布式

PyTorch多GPU训练全指南&#xff1a;单机到分布式 在深度学习模型日益庞大的今天&#xff0c;单张GPU的显存和算力早已难以支撑大模型的训练需求。你是否也遇到过这样的场景&#xff1a;刚启动训练&#xff0c;显存就爆了&#xff1b;或者等了十几个小时&#xff0c;epoch才跑了…

作者头像 李华
网站建设 2026/7/1 10:01:12

Windows 10下配置Miniconda并训练YOLOv5模型

Windows 10下配置Miniconda并训练YOLOv5模型 在深度学习项目中&#xff0c;环境配置往往是第一步&#xff0c;也是最容易“踩坑”的一步。尤其是目标检测这类对依赖和硬件要求较高的任务&#xff0c;一个不稳定的Python环境可能直接导致训练失败或性能下降。如果你正在尝试用Y…

作者头像 李华
网站建设 2026/7/1 15:18:56

揭秘Open-AutoGLM本地化难题:5个关键步骤实现零延迟AI响应

第一章&#xff1a;揭秘Open-AutoGLM本地化难题的本质在将Open-AutoGLM部署至本地环境的过程中&#xff0c;开发者常面临性能下降、依赖冲突与推理延迟等问题。这些问题的根源并非单一技术瓶颈&#xff0c;而是由模型架构、运行时环境与系统资源调度共同作用的结果。核心挑战剖…

作者头像 李华
网站建设 2026/7/4 18:42:51

PyTorch多卡训练:DataParallel与DDP原理对比

PyTorch多卡训练&#xff1a;DataParallel与DDP原理对比 在使用 PyTorch-CUDA-v2.9 镜像进行模型训练时&#xff0c;很多人会遇到这样一个尴尬局面&#xff1a;明明配了四张A100&#xff0c;结果训练速度还不如单卡跑得流畅&#xff0c;甚至显存直接爆掉。这背后往往不是硬件的…

作者头像 李华
网站建设 2026/7/9 13:26:13

Stable Diffusion WebUI Docker环境搭建全指南

Stable Diffusion WebUI Docker环境搭建全指南 在生成式AI爆发的当下&#xff0c;越来越多开发者和研究者希望快速部署一个稳定、可复用的Stable Diffusion运行环境。然而&#xff0c;Python依赖复杂、CUDA版本错配、PyTorch与xformers兼容性问题常常让人望而却步。更别提多项目…

作者头像 李华