Python-医学图像处理之三维重建(进行切片级重建)

       对于从事医学图像处理的小伙伴而言,医学图像三维重建并不是一个陌生的东西啦~ 例如,在对图像分割结果进行展示或者验证时,我们常常通过对分割结果进行三维可视化的方式进行展示和说明。

       那废话不多说,今天就来教大家如何根据自己的分割结果进行三维重建。

       这里呢,我用现在正在做的韧带分割进行说明。

       首先,通过深度学习或者传统方法对医学图像进行分割,得到二值化的分割结果(如图1所示)。将分割结果放置在一个文件夹里。

图1 分割结果

       这里要注意,我们的分割结果的图片名称,需要按医学图像切片的顺序命名,不然重建时会出现错乱!!!!

       然后,读入数据。这里呢,我们使用的是vtk库。

reader = vtk.vtkPNGReader()
reader.SetDataScalarTypeToUnsignedChar()
reader.SetFileDimensionality(3)

path = r"./sag/" #读取 图像分割结果文件夹 路径

reader.SetFilePrefix(path)  # 文件夹路径
reader.SetFilePattern("%s%d.png")

       如果是JPG或JPEG格式的图片,可以使用vtk.vtkJPEGReader()函数进行替换。当然png对应的地方也不要忘记进行替换哦~

       接下来,是一些参数的设置。这些参数将决定我们重建结果的正确性!!!

reader.SetDataExtent(3, 384, 3, 384, 1, 50) #384是图像大小, 倒数两个参数(1,50):重建的切片范围

       这里,需要修改图像大小和重建范围。这里对重建范围进行一下说明,我这里的1,50也就是说,从我分割结果的第1张到第50张进行重建,小伙伴们可以根据自己的需求进行修改。

reader.SetDataSpacing(0.5625, 0.5625, 1.76) #前两个是 像素距离,最后一个是 层厚

       这里需要修改的是像素距离和层厚,这个地方,小伙伴们根据自己的医学图像数据进行对应的修改就行。

      之后呢,就是vtk三维重建的常规套路啦,建立actor、mapper等等,这里就不过多赘述啦~

      这里给大家展示一下我重建的结果(如图2所示)。

图2 重建结果

       最后附上代码,希望对各位小伙伴有所帮助鸭~

import vtk

reader = vtk.vtkPNGReader()
reader.SetDataScalarTypeToUnsignedChar()
reader.SetFileDimensionality(3)

path = r"./sag/" #读取文件路径
path2 = "./FX_sag_patella_lig.ply" #保存模型路径

reader.SetFilePrefix(path)  # 文件夹路径
reader.SetFilePattern("%s%d.png")

reader.SetDataExtent(3, 384, 3, 384, 1, 50) #384是图像大小, 倒数两个参数(1,50):重建的切片范围
reader.SetDataSpacing(0.5625, 0.5625, 1.76) #前两个是 像素距离,最后一个是 层厚

reader.SetDataOrigin(0, 0, 0)
reader.Update()

skinExtractor = vtk.vtkContourFilter()
skinExtractor.SetInputConnection(reader.GetOutputPort())
skinExtractor.SetValue(0, 255)
skinExtractor.ComputeGradientsOn()
skinExtractor.ComputeScalarsOn()

smooth = vtk.vtkSmoothPolyDataFilter()
smooth.SetInputConnection(skinExtractor.GetOutputPort())
smooth.SetNumberOfIterations(300)

skinNormals = vtk.vtkPolyDataNormals()
skinNormals.SetInputConnection(smooth.GetOutputPort())
skinNormals.SetFeatureAngle(100)
skinNormals.Update()

skinMapper = vtk.vtkPolyDataMapper()
skinMapper.SetInputConnection(skinNormals.GetOutputPort())
skinMapper.ScalarVisibilityOff()

skin = vtk.vtkActor()
skin.SetMapper(skinMapper)
skin.SetOrigin(skin.GetCenter())

arender = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(arender)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)

arender.AddActor(skin)

arender.ResetCamera()
arender.SetBackground(.2, .3, .4)
arender.ResetCameraClippingRange()

renWin.SetSize(500, 500)
style = vtk.vtkInteractorStyleTrackballCamera()
iren.SetInteractorStyle(style)

vtkWriter = vtk.vtkPLYWriter()
vtkWriter.SetInputData(skinNormals.GetOutput())
vtkWriter.SetFileName(path2)
vtkWriter.Write()

renWin.Render()
iren.Initialize()
iren.Start()

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
图像处理在计算机视觉领域有着广泛的应用,其中三维重建是一个重要的研究方向。通过对多个二维图像进行处理和分析,可以实现对三维场景的重建和可视化。下面就以matlab算法实战应用案例精讲三维重建为例,介绍其实现方法和代码。 首先,三维重建的实现需要用到一组二维图像,可以通过摄像机或者其他方式获取到。然后,在matlab中,我们可以使用一些图像处理工具包如Image Processing Toolbox或者Computer Vision Toolbox来进行图像处理和分析。比如,可以使用特征点匹配的方法来找到多个二维图像之间的对应关系,然后通过三角测量法或者其他三维重建算法来计算相应的三维点坐标。 同时,我们还可以使用matlab的绘图工具来对获取到的三维点云数据进行可视化展示,比如绘制三维点云或者三维曲面。这样,就可以实现对三维场景的重建和可视化,为后续的虚拟现实、增强现实等应用奠定基础。 此外,如果希望使用python实现三维重建,也可以借助一些图像处理和计算机视觉的库,比如OpenCV、numpy、scipy等。在python中,同样可以通过特征点匹配和三维重建算法来实现三维重建,并使用matplotlib等库来进行可视化展示。 综上所述,通过matlab或python实现三维重建需要结合图像处理、计算机视觉、数学建模等多个领域的知识和工具,通过对多个二维图像的处理和分析,实现对三维场景的重建和可视化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cherry330

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值