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

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()
http://www.gsyq.cn/news/158102.html

相关文章:

  • GitHub上最火的AutoGLM项目怎么部署?看完这篇你也能做到
  • AI记忆大揭秘:从上下文窗口到向量数据库,构建永不“断片“的智能助手
  • Open-AutoGLM移动端部署避坑指南(12个常见错误及解决方案)
  • Airtest脚本的重构与优化:提升测试效率和可读性
  • 从AutoGLM到Manus智能体,中国AI如何实现认知架构的弯道超车?
  • 检验vtk版本
  • 揭秘Open-AutoGLM部署全流程:如何30分钟内完成本地化部署与调试
  • 错过Open-AutoGLM,可能让你的AI项目落后整整两年!
  • 基于PyTorch的行人重识别流程改造与实现
  • 收藏备用!一文盘点10个企业级Agentic AI架构|小白程序员必备落地指南(附架构详解)
  • ERP-微信授权登录域名设置
  • 渗透测试工程师是干什么的?
  • 国标GB28181算法算力平台EasyGBS景区远程视频监控建设方案
  • 基于视频空间认知的高敏感资产智能管控关键技术研究
  • PyTorch GPU显存管理与模型训练技巧
  • 如何选择降AI率工具不踩坑!2025年10大靠谱去aigc痕迹工具对比,还有免费降AI额度! - 还在做实验的师兄
  • 运维系列【仅供参考】:tftpd文件传输工具的学习记录
  • TensorFlow与PyTorch中提取图像块的方法对比
  • 震惊!大模型应用模式原来这么简单!小白也能秒懂的LLM使用技巧,告别“照着做“的尴尬
  • Open-AutoGLM核心技术剖析(首次公开架构设计白皮书)
  • Open-AutoGLM沉思突遭下架,你的项目还安全吗?,立即检查这4个关键风险点
  • Person_reID test.py 源码解析
  • OK3588上使用Python进行NPU加速推理
  • 有限预算如何选心理咨询平台?3款专业心理APP大揭秘 - 小白条111
  • InsightFace_Pytorch人脸识别实战教程
  • 2025年AI CRM系统榜单揭晓:原圈科技为何领跑?
  • 全球视野下的选择:国内外大模型中转站核心差异对比,选对平台效率翻倍 - poloai
  • EasyGBS景区远程视频监控建设方案
  • 2025年AI CRM系统前瞻:原圈科技智能线索分配机制解析
  • P7706 「Wdsr-2.7」文文的摄影布置