news 2026/7/15 21:16:56

MarchingCubes 网格数据体素化并提取等值面

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MarchingCubes 网格数据体素化并提取等值面

一:主要的知识点

1、说明

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

2、知识点纪要

本段代码主要涉及的有①MarchingCubes提取等值面的机理,②多边形体素化


二:代码及注释

import vtkmodules.vtkRenderingOpenGL2 from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkCommonDataModel import vtkImageData from vtkmodules.vtkFiltersCore import vtkFlyingEdges3D, vtkMarchingCubes from vtkmodules.vtkFiltersSources import vtkSphereSource from vtkmodules.vtkImagingHybrid import vtkVoxelModeller from vtkmodules.vtkRenderingCore import ( vtkActor, vtkPolyDataMapper, vtkRenderWindow, vtkRenderWindowInteractor, vtkRenderer ) if __name__ == '__main__': colors = vtkNamedColors() iso_value = 50 volume = vtkImageData() sphere_source = vtkSphereSource() sphere_source.SetPhiResolution(20) sphere_source.SetThetaResolution(20) sphere_source.Update() bounds = list(sphere_source.GetOutput().GetBounds()) """ 根据现有包围盒,将包围盒大小进行扩大 """ for i in range(0, 6, 2): dist = bounds[i + 1] - bounds[i] bounds[i] = bounds[i] - 0.1 * dist bounds[i + 1] = bounds[i + 1] + 0.1 * dist """ vtkVoxelModeller 将任意几何对象(如多边形数据)转换为体素化的三维体积数据 通过计算每个体素点到几何表面的距离场来生成体数据 """ voxel_modeller = vtkVoxelModeller() voxel_modeller.SetInputConnection(sphere_source.GetOutputPort()) voxel_modeller.SetModelBounds(bounds) voxel_modeller.SetSampleDimensions(50, 50, 50) voxel_modeller.SetScalarTypeToFloat() """ SetMaximumDistance 设定体素化过程中距离场的渐变范围的厚度 渐变范围的厚度的意思: 体素化的两种思路: 1)二值化(Binary)模式 每个体素(voxel)的值要么是 1(在几何体内),要么是 0(在几何体外)表面就是 内外的分界线 2) 带渐变的距离场(Signed Distance Field, SDF) 每个体素的值表示 到几何表面的距离,通常内部为负,外部为正 在表面附近的一个“带状区域”里,值会平滑过渡,而不是硬切换 vtkVoxelModeller.SetMaximumDistance(d) 控制的就是这个带状区域的厚度 d 例子: 假设我们有一个球,半径 = 10,SetMaximumDistance(0.5): 在表面上:值 ≈ 0.5 (归一化后 ≈ 0.5)。 表面以内 0.5 个体素厚度的区域:值逐渐减小到 0。 表面以外 0.5 个体素厚度的区域:值逐渐增大到 1。 超过 0.5 的距离后,值就被**截断(clamp)**了,不再渐变,而是固定为 0(内部)或 1(外部)。 这样就形成了一个 宽度 = 1.0(内外各 0.5) 的渐变区域 """ voxel_modeller.SetMaximumDistance(0.1) voxel_modeller.Update() volume.DeepCopy(voxel_modeller.GetOutput()) """ 当你用 vtkFlyingEdges3D(或 vtkMarchingCubes)提取等值面时 0.5 恰好是“几何表面”的位置 < 0.5 是物体内部,> 0.5 是外部 所以 iso_value = 0.5 表示提取出原始几何体的近似表面 """ iso_value = 0.5 surface = vtkFlyingEdges3D() surface.SetInputData(volume) surface.ComputeNormalsOn() surface.SetValue(0, iso_value) """ iso_value 和SetMaximumDistance中的数字的关系 MaximumDistance 控制“场的模糊范围”,相当于“球体表面周围的缓冲区厚度”; iso_value = 0.5 则是一个固定的“分界线”,永远对应原始几何表面的位置。 换句话说: MaximumDistance 决定场数据是如何从“表面”向外/向内过渡; 但你提取几何时,仍然要用 0.5 来还原表面。 前者控制场的平滑/模糊厚度 后者是标准化后的等值阈值,固定用 0.5 才能提取原始几何表面 """ renderer = vtkRenderer() renderer.SetBackground(colors.GetColor3d('DarkSlateGray')) render_window = vtkRenderWindow() render_window.AddRenderer(renderer) render_window.SetWindowName('MarchingCubes') interactor = vtkRenderWindowInteractor() interactor.SetRenderWindow(render_window) mapper = vtkPolyDataMapper() mapper.SetInputConnection(surface.GetOutputPort()) mapper.ScalarVisibilityOff() actor = vtkActor() actor.SetMapper(mapper) actor.GetProperty().SetColor(colors.GetColor3d('MistyRose')) renderer.AddActor(actor) render_window.Render() interactor.Start()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/16 11:27:39

企业级部署:奇安信天擎在金融行业的实战案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 设计一个金融行业专用的奇安信天擎部署方案。包括网络架构图&#xff08;DMZ、内网分区&#xff09;、策略配置模板&#xff08;如文件监控、进程控制、漏洞防护&#xff09;、应急…

作者头像 李华
网站建设 2026/7/15 19:12:23

【牛客周赛 107】E 题【小苯的刷怪笼】题解

题目链接 题目大意 给定三个正整数 n,a,kn, a, kn,a,k&#xff0c;其中&#xff1a; nnn 为怪物的数量&#xff0c;nnn 个怪物站成一排&#xff0c;从左到右编号 111 到 nnn&#xff1b;aaa 为 nnn 个怪物的血量和&#xff0c;且每个怪物的血量都是正数&#xff1b;kkk 为小苯…

作者头像 李华
网站建设 2026/7/16 5:26:33

5大技巧让DownKyi成为你的B站视频下载神器

5大技巧让DownKyi成为你的B站视频下载神器 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xff09;。 项目地址: h…

作者头像 李华
网站建设 2026/7/16 8:15:35

java计算机毕业设计陕商院餐厅管理系统 高校智慧食堂订餐与后台运营一体化平台 面向校园多餐厅的在线点餐与膳食服务系统

计算机毕业设计陕商院餐厅管理系统n1c029&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。后疫情时代&#xff0c;陕商院实行错峰就餐&#xff0c;传统窗口排长队、纸质登记易交叉…

作者头像 李华
网站建设 2026/7/16 0:11:14

互联网大厂Java面试:从Spring Boot到微服务架构的深度剖析

场景描述 在某个晴朗的下午&#xff0c;超好吃来到了一家知名互联网大厂面试Java开发岗位。面试官是一位资深的技术专家&#xff0c;他对超好吃的简历表现出了极大的兴趣。 第一轮面试&#xff1a;基础技术与框架 面试官&#xff1a; “我们先从基础开始&#xff0c;超好吃&…

作者头像 李华
网站建设 2026/7/16 9:51:52

2025年专业嵌入式软件开发公司权威榜单发布

在当今数字化飞速发展的时代&#xff0c;嵌入式软件在各个领域都发挥着至关重要的作用&#xff0c;从智能家居到工业自动化&#xff0c;嵌入式软件无处不在。2025年专业嵌入式软件开发公司权威榜单近日发布&#xff0c;为企业和开发者选择合适的合作伙伴提供了重要参考。以下是…

作者头像 李华