相关文章推荐
没有腹肌的开水瓶  ·  Android OpenSL ES ...·  1 年前    · 
开朗的熊猫  ·  PostgreSQL 14 ...·  1 年前    · 
聪明伶俐的泡面  ·  Alpine镜像中not ...·  1 年前    · 

VTK简介

VTK(Visualization Toolkit)是一个用于3D计算机图形学、图像处理和可视化的开源软件包。它包括一组C++类和工具,可以让用户创建和处理复杂的3D图形和数据可视化。VTK提供了多种算法,如体绘制、剪切、切片、等值面、等值线、流线、轮廓线、纹理映射等,可以处理各种类型的数据,包括体数据、网格数据、点云数据等。VTK也提供了Python、Java等多种编程语言的接口,方便用户在不同的环境中使用。
VTK的应用十分广泛,包括医学图像处理、工程和科学可视化、计算流体动力学、地球科学、物理模拟等领域。由于其开源和免费的特点,VTK被广泛应用于学术界和工业界,并得到了许多用户和贡献者的支持和发展。

什么是体绘制?

体绘制(Voxel-Based Volume Rendering),也称为三维重建(区别于投影图像的三维重建),直接利用体数据来生成二维图像的绘制技术。与面绘制(Surface Rendering)不同的是体绘制技术不需要提取体数据内部的等值面,它是一个对三维体数据进行采样和合成的过程。体绘制能够通过设置不透明度值来显示体数据内部的不同成分和细节。常用于人体CT图像通过设置不透明度来显示各种器官与组织。总的来说体绘制是包含体数据,而面绘制则是让整个模型由多种多边形构成模型表面,但内部是空的,想要看到模型各个切面的数据还是需要使用体绘制。

体绘制效果图

超声图像大小尺寸为 208 x 240,切面一共176张,往z轴延伸。
体绘制

VTK体绘制渲染管线

体绘制,也称为三维重建(区别于投影图像的三维重建),直接利用体数据来生成二维图像的绘制技术。与面绘制不同的是体绘制技术不需要提取体数据内部的等值面,它是一个对三维体数据进行采样和合成的过程。体绘制能够通过设置不透明度值来显示体数据内部的不同成分和细节。常用于人体CT图像通过设置不透明度来显示各种器官与组织。总的来说体绘制是包含体数据,而面绘制则是让整个模型由多种多边形构成模型表面,但内部是空的,想要看到模型各个切面的数据还是需要使用体绘制。
本代码适用于对CT、MRI等有序 医学 图像 进行 三维重建 ,也可以用于其他针对有序切片 进行 三维重建 的情况。 使用 python 完成。 代码中附带了详细的 使用 流程,大家只需要按照自己的要求修改指定参数和路径即可。 本代码是 使用 基于CT、MRI等 医学 影像基于 图像 分割得到的二值结果 进行 重建。因此,在重建前需要先对 医学 图像 进行 图像 分割,分割出自己需要的部分,对分割结果 进行 二值化(背景为黑、分割出的部分为白色),这里要注意的是,分割结果需要按照原切片序列的顺序 进行 命名。 希望对大家有所帮助!如果大家感兴趣,也可以看看我的其他博客和资源哦~
#include < vtk Renderer.h> #include < vtk RenderWindowInteractor.h> #include < vtk PolyDataMapper.h> #include < vtk Actor.h> #include < vtk MarchingCubes.h> #include 虽然Delaunay三角剖分算法可以实现网格曲面重建,但是其应用主要在二维剖分,在三维空间网格生成中遇到了问题。因为在三维点云曲面重建中,Delaunay条件不在满足,不仅基于最大最小角判断的对角线交换准则不在成立,而且基于外接圆判据的Delaunay三角化也不能保证网格质量。 VTK SurfaceReconstructionFilter则实现了一种隐式曲面重建方法,即将 # 读取 超声 图像 数据 reader = vtk . vtk DICOMImageReader() reader.SetDirectoryName("path/to/dicom/files") reader.Update() # 创建 vtk ImageData数据 imageData = vtk . vtk ImageData() imageData.SetDimensions(reader.GetOutput().GetDimensions()) imageData.AllocateScalars( vtk . VTK _UNSIGNED_SHORT, 1) imageData.SetSpacing(reader.GetOutput().GetSpacing()) imageData.SetOrigin(reader.GetOutput().GetOrigin()) imageData.GetPointData().SetScalars(reader.GetOutput().GetPointData().GetScalars()) # 进行 等值面提取和渲染 contourFilter = vtk . vtk MarchingCubes() contourFilter.SetInputData(imageData) contourFilter.ComputeNormalsOn() contourFilter.SetValue(0, 1000) # 设置等值面的值 mapper = vtk . vtk PolyDataMapper() mapper.SetInputConnection(contourFilter.GetOutputPort()) actor = vtk . vtk Actor() actor.SetMapper(mapper) actor.GetProperty().SetColor(1.0, 1.0, 1.0) # 设置渲染颜色 # 创建渲染窗口和渲染器 renderer = vtk . vtk Renderer() renderer.AddActor(actor) renderer.SetBackground(0.0, 0.0, 0.0) # 设置背景颜色 renderWindow = vtk . vtk RenderWindow() renderWindow.AddRenderer(renderer) renderWindow.SetWindowName("Ultrasound 3D Reconstruction") # 创建交互器 interactor = vtk . vtk RenderWindowInteractor() interactor.SetRenderWindow(renderWindow) # 启动渲染器和交互器 renderWindow.Render() interactor.Start() 当然,这只是基本示例,如果要 进行 更复杂的 超声 图像 处理和可视化,还需要进一步了解和学习 VTK 中的其他类和方法。