news 2026/3/1 3:25:20

CarotidFlow 可视化人体颈动脉

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CarotidFlow 可视化人体颈动脉

一:主要的知识点

1、说明

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

2、知识点纪要

本段代码主要涉及的有①vtkStreamTracer流体可视化的类


二:代码及注释

import vtkmodules.vtkInteractionStyle import vtkmodules.vtkRenderingOpenGL2 from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkCommonCore import vtkLookupTable from vtkmodules.vtkFiltersCore import vtkContourFilter, vtkThresholdPoints, vtkTubeFilter from vtkmodules.vtkIOLegacy import vtkStructuredPointsReader from vtkmodules.vtkFiltersSources import vtkPointSource from vtkmodules.vtkFiltersFlowPaths import vtkStreamTracer from vtkmodules.vtkFiltersModeling import vtkOutlineFilter from vtkmodules.vtkRenderingCore import ( vtkActor, vtkCamera, vtkPolyDataMapper, vtkRenderWindow, vtkRenderWindowInteractor, vtkRenderer ) def main(): colors = vtkNamedColors() fileName = "Data/carotid.vtk" ren1 = vtkRenderer() renWin = vtkRenderWindow() renWin.AddRenderer(ren1) iren = vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) reader = vtkStructuredPointsReader() reader.SetFileName(fileName) psource = vtkPointSource() psource.SetNumberOfPoints(25) psource.SetCenter(133.1, 116.3, 5.0) psource.SetRadius(2.0) threshold = vtkThresholdPoints() threshold.SetInputConnection(reader.GetOutputPort()) threshold.ThresholdByUpper(275) """ vtkStreamTracer 流体可视化中非常重要的一个类 是用来在一个向量场(Vector Field)中追踪流线的类,功能是给定一个速度场(如流体速度、风场、磁场、电场)和一些起点(seeds), 沿着速度方向(或反方向)积分,生成流线(streamlines)或路径线(pathlines) 输入数据: 一个 向量场(通常是 vtkStructuredPoints, vtkImageData, vtkRectilinearGrid, 或 vtkUnstructuredGrid) 种子点: 起始点的几何数据(如 vtkPointSource, vtkLineSource 等) 输出数据: 一组流线(vtkPolyData),每条流线是一条由点组成的折线 """ streamers = vtkStreamTracer() # 设置流线追踪的数据源 streamers.SetInputConnection(reader.GetOutputPort()) # 设置流线追踪的起始点 streamers.SetSourceConnection(psource.GetOutputPort()) # 限制流线长度。防止流线过长,消耗过多计算资源 streamers.SetMaximumPropagation(100.0) # 控制计算精度和速度。流线是通过数值积分计算的,步长越小,计算结果越精确 streamers.SetInitialIntegrationStep(0.2) # 定义停止时间。如果流体粒子所在位置的速度矢量大小低于这个阈值0.01,流线追踪将自动停止 streamers.SetTerminalSpeed(.01) streamers.Update() scalarRange = [0] * 2 scalarRange[0] = streamers.GetOutput().GetPointData().GetScalars().GetRange()[0] scalarRange[1] = streamers.GetOutput().GetPointData().GetScalars().GetRange()[1] print("range: ", scalarRange[0], ", ", scalarRange[1]) """ 主要作用是将3D 空间中的线条(例如流线追踪器输出的细线)转换成具有一定粗细的管状几何体, 使其在视觉上更饱满和突出 """ tubes = vtkTubeFilter() tubes.SetInputConnection(streamers.GetOutputPort()) tubes.SetRadius(0.3) tubes.SetNumberOfSides(6) """ SetVaryRadius 用来控制这些管状结构的半径是保持恒定,还是根据数据场中的某个标量值来变化 0表示半径恒定,1表示随标量变化,2随矢量变化,3随标量绝对值变化 """ tubes.SetVaryRadius(0) lut = vtkLookupTable() lut.SetHueRange(.667, 0.0) lut.Build() streamerMapper = vtkPolyDataMapper() streamerMapper.SetInputConnection(tubes.GetOutputPort()) streamerMapper.SetScalarRange(scalarRange[0], scalarRange[1]) streamerMapper.SetLookupTable(lut) streamerActor = vtkActor() streamerActor.SetMapper(streamerMapper) iso = vtkContourFilter() iso.SetInputConnection(reader.GetOutputPort()) iso.SetValue(0, 175) isoMapper = vtkPolyDataMapper() isoMapper.SetInputConnection(iso.GetOutputPort()) isoMapper.ScalarVisibilityOff() isoActor = vtkActor() isoActor.SetMapper(isoMapper) isoActor.GetProperty().SetRepresentationToWireframe() isoActor.GetProperty().SetOpacity(0.25) outline = vtkOutlineFilter() outline.SetInputConnection(reader.GetOutputPort()) outlineMapper = vtkPolyDataMapper() outlineMapper.SetInputConnection(outline.GetOutputPort()) outlineActor = vtkActor() outlineActor.SetMapper(outlineMapper) outlineActor.GetProperty().SetColor(colors.GetColor3d("Black")) # Add the actors to the renderer, set the background and size. # ren1.AddActor(outlineActor) ren1.AddActor(streamerActor) ren1.AddActor(isoActor) ren1.SetBackground(colors.GetColor3d("Wheat")) renWin.SetSize(640, 480) renWin.SetWindowName('CarotidFlow') cam1 = vtkCamera() cam1.SetClippingRange(17.4043, 870.216) cam1.SetFocalPoint(136.71, 104.025, 23) cam1.SetPosition(204.747, 258.939, 63.7925) cam1.SetViewUp(-0.102647, -0.210897, 0.972104) cam1.Zoom(1.2) ren1.SetActiveCamera(cam1) # Render the image. # renWin.Render() iren.Start() if __name__ == '__main__': main()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/23 7:39:33

ColoredAnnotatedCube 等高线与方向标记

一:主要的知识点 1、说明 本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客 2、知识点纪要 本段代码主要涉及的有①vtkBandedPolyDataContourFilter分类着色…

作者头像 李华
网站建设 2026/2/27 17:37:52

Z-Image-Turbo多GPU部署:释放你的创作生产力

Z-Image-Turbo多GPU部署:释放你的创作生产力 为什么需要多GPU部署Z-Image-Turbo 如果你正在使用Z-Image-Turbo进行高分辨率图像生成,可能会遇到单卡性能瓶颈的问题。设计工作室、广告公司等需要批量生成高清图像的场景,单卡往往难以满足业务需…

作者头像 李华
网站建设 2026/2/28 0:00:27

BewlyBewly第三方插件高效配置指南:4大核心模块完整解析

BewlyBewly第三方插件高效配置指南:4大核心模块完整解析 【免费下载链接】BewlyBewly Improve your Bilibili homepage by redesigning it, adding more features, and personalizing it to match your preferences. 项目地址: https://gitcode.com/gh_mirrors/be…

作者头像 李华
网站建设 2026/2/27 18:18:33

notepad++历史版本对比:新增OCR功能是否值得升级

notepad历史版本对比:新增OCR功能是否值得升级 📌 技术背景与升级动因 Notepad 作为广受欢迎的轻量级文本编辑器,长期以来以高效、简洁、插件丰富著称。然而,在 AI 能力快速融入开发工具的当下,其在智能辅助方面的短板…

作者头像 李华
网站建设 2026/2/28 14:29:58

WebODM终极指南:开源无人机地图制作的完整解决方案

WebODM终极指南:开源无人机地图制作的完整解决方案 【免费下载链接】WebODM User-friendly, commercial-grade software for processing aerial imagery. 🛩 项目地址: https://gitcode.com/gh_mirrors/we/WebODM 你是否也曾为昂贵的商业无人机数…

作者头像 李华
网站建设 2026/2/27 17:01:03

图书扫描数字化:OCR替代手动录入全流程

图书扫描数字化:OCR替代手动录入全流程 引言:从纸质到数字,OCR如何重塑信息录入方式 在图书管理、档案数字化和出版行业,大量历史文献仍以纸质形式存在。传统的人工录入方式不仅效率低下(平均每分钟仅能输入20-30字&am…

作者头像 李华