news 2026/4/23 1:13:36

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/4/23 12:53:31

面向高安全仓储的空间视频智能感知与行为推演关键技术研究

一、研究背景与现实约束条件弹药库、特种物资仓储设施属于高安全等级、高敏感属性、低容错运行环境。 其管理目标并非单纯防范非法进入或事后追溯&#xff0c;而是实现对空间状态、人员行为与运行过程的持续确定性掌控。在长期运行实践中&#xff0c;此类设施普遍面临以下现实约…

作者头像 李华
网站建设 2026/4/23 9:34:24

以空间为核心的高敏感仓储智能管控与决策推演关键技术研究

——基于视频空间认知的透明化管控方法发布单位&#xff1a;镜像视界&#xff08;浙江&#xff09;科技有限公司前言&#xff5c;从“被动监控”走向“空间智能管控”在弹药、危险品、战略物资等高敏感仓储场景中&#xff0c;管理目标已不再局限于“是否发生异常”&#xff0c;…

作者头像 李华
网站建设 2026/4/18 9:16:45

Miniconda搭建SadTalker生成会说话头像

Miniconda 搭建 SadTalker&#xff1a;生成会说话的数字人头像&#xff0c;从零开始实战 &#x1f3a4;&#x1f5bc;️ 在 AI 视频生成技术飞速发展的今天&#xff0c;你是否曾想过——只需一张人脸照片和一段语音&#xff0c;就能让这张静态的脸“活”起来&#xff1f;张嘴说…

作者头像 李华
网站建设 2026/4/17 19:40:44

Open-AutoGLM手机部署实战(从零到一键运行的完整流程)

第一章&#xff1a;Open-AutoGLM手机部署实战&#xff08;从零到一键运行的完整流程&#xff09;在移动设备上本地运行大语言模型已成为边缘AI的重要应用场景。Open-AutoGLM 作为支持轻量化部署的开源框架&#xff0c;允许开发者将类 GLM 模型直接部署至 Android 手机&#xff…

作者头像 李华
网站建设 2026/4/22 23:15:28

【Open-AutoGLM部署全攻略】:从零开始手把手教你GitHub下载与本地部署

第一章&#xff1a;Open-AutoGLM项目概述Open-AutoGLM 是一个开源的自动化通用语言模型&#xff08;GLM&#xff09;集成与调度框架&#xff0c;旨在简化大语言模型在实际业务场景中的部署、调用与优化流程。该项目由社区驱动&#xff0c;支持多种主流 GLM 架构的插件化接入&am…

作者头像 李华
网站建设 2026/4/18 8:41:12

PyTorch GPU显存释放与高效训练技巧

PyTorch GPU显存释放与高效训练技巧 在深度学习模型日益庞大的今天&#xff0c;哪怕拥有A100或H100级别的GPU&#xff0c;也常常会遇到“显存溢出”&#xff08;OOM&#xff09;的窘境。尤其是当你加载一个ViT-L或Llama类大模型时&#xff0c;可能刚完成前向传播&#xff0c;反…

作者头像 李华