news 2026/6/15 15:08: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/6/15 11:48:49

PyTorch从环境配置到GPU加速完整训练

PyTorch实战&#xff1a;从零搭建高效深度学习训练流程 在如今的AI开发中&#xff0c;一个稳定、高效的PyTorch环境是模型研发的基础。无论是学生做课程项目&#xff0c;还是工程师部署生产模型&#xff0c;都需要一套可复现、易调试、支持GPU加速的完整工作流。然而很多初学者…

作者头像 李华
网站建设 2026/6/15 11:49:26

基于DFM文件实现WINBLANDS风格窗体

基于DFM文件实现现代风格窗体&#xff1a;当Delphi遇见AI界面美学 你有没有试过&#xff0c;打开一个自己写的程序&#xff0c;看着那灰扑扑的按钮、生硬的边框和仿佛上世纪遗留下来的控件布局&#xff0c;心里突然涌上一丝尴尬&#xff1f;“这真的是2024年的软件吗&#xff…

作者头像 李华
网站建设 2026/6/15 11:47:39

IK Rig技术如何革新游戏角色动画

IK Rig技术如何革新游戏角色动画 在游戏开发的早期&#xff0c;角色动画是一个高度定制化、重复劳动密集的过程。一个简单的行走循环&#xff0c;可能需要为不同体型的角色重新绑定骨骼、调整权重、微调关键帧——哪怕他们只是身高差了10厘米。这种“一换模型就重来”的工作模式…

作者头像 李华
网站建设 2026/6/15 11:42:06

AI Agent 投融资爆发实录:读懂中国领跑逻辑,看这一篇就够了!

AI Agent赛道作为人工智能领域最受关注的方向之一&#xff0c;已从概念验证逐步迈向规模化落地&#xff0c;在金融、通信、医疗等多个领域展现出颠覆性潜力。技术的成熟、明确的市场价值和强有力的政策支持&#xff0c;成为AI Agent赛道快速增长的核心驱动力。 资本市场高度关…

作者头像 李华
网站建设 2026/6/15 11:48:49

PyTorch实例分割实战:Mask R-CNN详解与应用

PyTorch实例分割实战&#xff1a;Mask R-CNN详解与应用 在自动驾驶感知系统中&#xff0c;不仅要识别出前方的车辆和行人&#xff0c;还要精准地“抠”出它们的轮廓——这正是实例分割的核心任务。相比目标检测仅提供边界框&#xff0c;实例分割要求模型为图像中的每个独立对象…

作者头像 李华
网站建设 2026/6/15 14:20:00

AI时代的稳定性挑战与混沌工程新范式

一、AI系统脆弱性特征&#xff08;测试关注焦点&#xff09; 风险维度 传统系统表现 AI系统特异性 依赖故障 服务级联中断 模型推理链路雪崩 数据异常 数据库字段错误 特征漂移/数据投毒 资源波动 CPU/内存过载 GPU显存溢出/计算图崩解 逻辑缺陷 代码路径错误 决…

作者头像 李华