超声图像大小尺寸为 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
中的其他类和方法。