三维重建 PyQt Python VTK 体绘制 医学图像可视化系统,可提供源码(横断面,冠状面,矢状面,3D)

这篇具有很好参考价值的文章主要介绍了三维重建 PyQt Python VTK 体绘制 医学图像可视化系统,可提供源码(横断面,冠状面,矢状面,3D)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文实现了 Python C++ 版本 的 四视图,横断面,冠状面,矢状面,3D

三维重建 医学图像的可视化 PyQt Python VTK四视图(横断面,冠状,矢状面,3D)
主要功能:
1.支持 JPG PNG TIF DICOM RAW MHD Nii 等多种数据格式导入
2. 四视图搭建,,横断面,冠状面,矢状面 3D;
3. 四窗口每个窗口可以最大化,恢复
3.二维数据视图的图层切换, 缩放,窗宽窗位调整功能;可以通过进度条换图层;可以通过进度条调整窗宽窗位;
4.三维可视化数据显示,缩放,旋转 ,平移
5.测量功能,2D 距离测量 角度测量 :
6.3D 体绘制 ,三维可视化数据显示,缩放,旋转 ,平移

效果:

python vtk 体绘制,VTK,Python,pyqt

python vtk 体绘制,VTK,Python,pyqt

python vtk 体绘制,VTK,Python,pyqt

 视频:

python-vtk-measure-ppp

这里主要讲一下体绘制:

1.固定点光线投影算法

vtkFixedPointVolumeRayCastMapper

该类能够实现基于Alpha合成的体绘制方法和最大密度投影体绘制方法,能够支持任意类型或者独立多元数据。
例如,当输入为二元独立数据时,第一源数据用于颜色映射,而第二元作为不透明度映射。该类使用了空间跳跃技术来加速体绘制的渲染过程,而在内部计算时,统一使用了float数据类型。
vtkFixedPointVolumeRayCastMapper与vtkVolumeRayCastMapper对比两个类的使用方法基本一致,都支持设置光线采样步长、图像采样距离、自动调整图像采样距离等操作。

vtkFixedPointVolumeRayCastMapper

只支持基于Alpha合成的体绘制方法和最大密度体绘制方法,

 光线投影+最大密度投影+等值面法

void SetBlendModeToComposite();
void SetBlendModeToMaximumIntensity();
void SetBlendModeToMinimumIntensity();
void SetBlendModeToAddictive();

2、基于GPU加速的光线投射体会自算法

vtkGPUVolumeRayCastMapper类实现了基于GPU加速光线投影体绘制算法。该类的使用方法与上面各类基本一致。同样可以实现光线采样步长、图像采样距离、自动调整图像采样距离等。


	vtkSmartPointer<vtkGPUVolumeRayCastMapper> volumeMapper =
		vtkSmartPointer<vtkGPUVolumeRayCastMapper>::New();
	volumeMapper->SetInputData(reader->GetOutput());;
	volumeMapper->SetSampleDistance(volumeMapper->GetSampleDistance() / 2);	//设置光线采样距离
 


 3.样例:

分别:

1.MIP
2.CompositeRamp
3.CompositeShadeRamp
4.CT_Skin
5.CT_Bone
6.CT_Muscle
7.RGB_Composite文章来源地址https://www.toymoban.com/news/detail-700095.html

  // Create our volume and mapper
  vtkNew<vtkVolume> volume;
  vtkNew<vtkFixedPointVolumeRayCastMapper> mapper;

  mapper->SetInputConnection(reader->GetOutputPort());
   vtkNew<vtkColorTransferFunction> colorFun;
  vtkNew<vtkPiecewiseFunction> opacityFun;
  // Create the property and attach the transfer functions
  vtkNew<vtkVolumeProperty> property;
  property->SetIndependentComponents(independentComponents);
  property->SetColor(colorFun);
  property->SetScalarOpacity(opacityFun);
  property->SetInterpolationTypeToLinear();

  // connect up the volume to the property and the mapper
  volume->SetProperty(property);
  volume->SetMapper(mapper);

  // Depending on the blend type selected as a command line option,
  // adjust the transfer function
  switch (blendType)
  {
  // MIP
  // Create an opacity ramp from the window and level values.
  // Color is white. Blending is MIP.
  case 0:
    colorFun->AddRGBSegment(0.0, 1.0, 1.0, 1.0, 255.0, 1.0, 1.0, 1.0);
    opacityFun->AddSegment(opacityLevel - 0.5 * opacityWindow, 0.0,
                           opacityLevel + 0.5 * opacityWindow, 1.0);
    mapper->SetBlendModeToMaximumIntensity();
    break;

  // CompositeRamp
  // Create a ramp from the window and level values. Use compositing
  // without shading. Color is a ramp from black to white.
  case 1:
    colorFun->AddRGBSegment(opacityLevel - 0.5 * opacityWindow, 0.0, 0.0, 0.0,
                            opacityLevel + 0.5 * opacityWindow, 1.0, 1.0, 1.0);
    opacityFun->AddSegment(opacityLevel - 0.5 * opacityWindow, 0.0,
                           opacityLevel + 0.5 * opacityWindow, 1.0);
    mapper->SetBlendModeToComposite();
    property->ShadeOff();
    break;

  // CompositeShadeRamp
  // Create a ramp from the window and level values. Use compositing
  // with shading. Color is white.
  case 2:
    colorFun->AddRGBSegment(0.0, 1.0, 1.0, 1.0, 255.0, 1.0, 1.0, 1.0);
    opacityFun->AddSegment(opacityLevel - 0.5 * opacityWindow, 0.0,
                           opacityLevel + 0.5 * opacityWindow, 1.0);
    mapper->SetBlendModeToComposite();
    property->ShadeOn();
    break;

  // CT_Skin
  // Use compositing and functions set to highlight skin in CT data
  // Not for use on RGB data
  case 3:
    colorFun->AddRGBPoint(-3024, 0, 0, 0, 0.5, 0.0);
    colorFun->AddRGBPoint(-1000, .62, .36, .18, 0.5, 0.0);
    colorFun->AddRGBPoint(-500, .88, .60, .29, 0.33, 0.45);
    colorFun->AddRGBPoint(3071, .83, .66, 1, 0.5, 0.0);

    opacityFun->AddPoint(-3024, 0, 0.5, 0.0);
    opacityFun->AddPoint(-1000, 0, 0.5, 0.0);
    opacityFun->AddPoint(-500, 1.0, 0.33, 0.45);
    opacityFun->AddPoint(3071, 1.0, 0.5, 0.0);

    mapper->SetBlendModeToComposite();
    property->ShadeOn();
    property->SetAmbient(0.1);
    property->SetDiffuse(0.9);
    property->SetSpecular(0.2);
    property->SetSpecularPower(10.0);
    property->SetScalarOpacityUnitDistance(0.8919);
    break;

  // CT_Bone
  // Use compositing and functions set to highlight bone in CT data
  // Not for use on RGB data
  case 4:
    colorFun->AddRGBPoint(-3024, 0, 0, 0, 0.5, 0.0);
    colorFun->AddRGBPoint(-16, 0.73, 0.25, 0.30, 0.49, .61);
    colorFun->AddRGBPoint(641, .90, .82, .56, .5, 0.0);
    colorFun->AddRGBPoint(3071, 1, 1, 1, .5, 0.0);

    opacityFun->AddPoint(-3024, 0, 0.5, 0.0);
    opacityFun->AddPoint(-16, 0, .49, .61);
    opacityFun->AddPoint(641, .72, .5, 0.0);
    opacityFun->AddPoint(3071, .71, 0.5, 0.0);

    mapper->SetBlendModeToComposite();
    property->ShadeOn();
    property->SetAmbient(0.1);
    property->SetDiffuse(0.9);
    property->SetSpecular(0.2);
    property->SetSpecularPower(10.0);
    property->SetScalarOpacityUnitDistance(0.8919);
    break;

  // CT_Muscle
  // Use compositing and functions set to highlight muscle in CT data
  // Not for use on RGB data
  case 5:
    colorFun->AddRGBPoint(-3024, 0, 0, 0, 0.5, 0.0);
    colorFun->AddRGBPoint(-155, .55, .25, .15, 0.5, .92);
    colorFun->AddRGBPoint(217, .88, .60, .29, 0.33, 0.45);
    colorFun->AddRGBPoint(420, 1, .94, .95, 0.5, 0.0);
    colorFun->AddRGBPoint(3071, .83, .66, 1, 0.5, 0.0);

    opacityFun->AddPoint(-3024, 0, 0.5, 0.0);
    opacityFun->AddPoint(-155, 0, 0.5, 0.92);
    opacityFun->AddPoint(217, .68, 0.33, 0.45);
    opacityFun->AddPoint(420, .83, 0.5, 0.0);
    opacityFun->AddPoint(3071, .80, 0.5, 0.0);

    mapper->SetBlendModeToComposite();
    property->ShadeOn();
    property->SetAmbient(0.1);
    property->SetDiffuse(0.9);
    property->SetSpecular(0.2);
    property->SetSpecularPower(10.0);
    property->SetScalarOpacityUnitDistance(0.8919);
    break;

  // RGB_Composite
  // Use compositing and functions set to highlight red/green/blue regions
  // in RGB data. Not for use on single component data
  case 6:
    opacityFun->AddPoint(0, 0.0);
    opacityFun->AddPoint(5.0, 0.0);
    opacityFun->AddPoint(30.0, 0.05);
    opacityFun->AddPoint(31.0, 0.0);
    opacityFun->AddPoint(90.0, 0.0);
    opacityFun->AddPoint(100.0, 0.3);
    opacityFun->AddPoint(110.0, 0.0);
    opacityFun->AddPoint(190.0, 0.0);
    opacityFun->AddPoint(200.0, 0.4);
    opacityFun->AddPoint(210.0, 0.0);
    opacityFun->AddPoint(245.0, 0.0);
    opacityFun->AddPoint(255.0, 0.5);

    mapper->SetBlendModeToComposite();
    property->ShadeOff();
    property->SetScalarOpacityUnitDistance(1.0);
    break;
  default:
    vtkGenericWarningMacro("Unknown blend type.");
    break;
  }

  // Set the default window size
  renWin->SetSize(600, 600);
  renWin->SetWindowName("FixedPointVolumeRayCastMapperCT");
  renWin->Render();

  // Add the volume to the scene
  renderer->AddVolume(volume);

  renderer->ResetCamera();
  renderer->SetBackground(colors->GetColor3d("SlateGray").GetData());

  auto camera = renderer->GetActiveCamera();
  camera->SetPosition(56.8656, -297.084, 78.913);
  camera->SetFocalPoint(109.139, 120.604, 63.5486);
  camera->SetViewUp(-0.00782421, -0.0357807, -0.999329);
  camera->SetDistance(421.227);
  camera->SetClippingRange(146.564, 767.987);

  // interact with data
  renWin->Render();

  iren->Start();

到了这里,关于三维重建 PyQt Python VTK 体绘制 医学图像可视化系统,可提供源码(横断面,冠状面,矢状面,3D)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python VTK PyQt5 VTK环境搭建 创建 渲染窗口及三维模型,包含 三维模型交互;

      目录 Part1. VTK 介绍 Part2. PyQt5 VTK环境搭建 安装Anaconda 自带Python Anaconda下载 安装PyQt5 安装 VTK Part3 :PyQt VTK 结合样例: Part1. VTK 介绍 VTK(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。Vtk 是在面向对象原理的基础上设计和实现的

    2024年02月11日
    浏览(50)
  • 三维重建 PyQt Python MRP 四视图(横断面,冠状面,矢状面,3D)

    本文实现了 Python MPR 的 四视图,横断面,冠状面,矢状面,3D MPR(multi-planner reformation)也称多平面重建,多重面重建是将扫描范围内所有的轴位图像叠加起来再对某些标线标定的重组线所指定的组织进行冠状、矢状位、任意角度斜位图像重组。 主要功能: 1:实现了 所有切面与

    2024年02月12日
    浏览(40)
  • VTK——使用包围盒切割医学图像

    vtkDICOMImageReader :专门用于读取医学图像格式 DICOM 的类。DICOM(Digital Imaging and Communications in Medicine)是医学图像和信息的标准。 vtkImageGaussianSmooth :用于图像的高斯平滑处理,主要用于去噪和边缘模糊。 vtkMarchingCubes :Marching Cubes 算法用于从 3D 体积数据生成表面。这在医学成

    2024年02月10日
    浏览(48)
  • 基于C++开发的医院医学影像PACS 可二次开发,三维重建

    医学影像PACS系统源码,集成三维影像后处理功能,包括三维多平面重建、三维容积重建、三维表面重建、三维虚拟内窥镜、最大/小密度投影、心脏动脉钙化分析等功能。系统功能强大,代码完整。有演示。 本套PACS系统专门针对医院工作流程设计的,完全符合医院需要,配置

    2023年04月23日
    浏览(40)
  • 医学影像PACS系统源码: 三维重建基本后处理方法的介绍和说明

    多层面重建(MPR) 最大密度投影(MIP) 最小密度投影(MinIP) 表面阴影遮盖(SSD) 容积漫游技术(VRT) 曲面重建(CPR) 虚拟内镜技术(VE)   1、MPR MPR(Multi-Planar Reformatting),多平面重建,是将扫描范围内所有的轴位图像叠加起来再对某些标线标定的重组线所指定的组织进行

    2024年02月09日
    浏览(57)
  • 【C++医学影像PACS】CT检查中的三维重建是什么检查?

    三维重建是多层螺旋CT的一个最大的优点,也是影像工作多年来,从横断解剖到多平面,乃至立体的一次飞跃,让抽象变的形象,大大地提高了准确性,为临床工作的开展,注入了无限生机,从而解决许多临床上,无法开展的一些难题。   具体的三维重建有以下几种: 第一

    2024年02月16日
    浏览(51)
  • Python三维图像的绘制以及相关图例添加(3D图像 - 图例)

    此部分自行完成,预先准备好需要的数据即可。 本例子实现的是:要在4*4的格子里面的3个格子里分别绘制3条不同颜色的图形。 (为了更加直观,绘图相关的程序不使用循环) (为了更加直观,绘图相关的程序不使用循环) 可以看到3维柱形是通过ax.bar3d()函数设置的, 其中传入的

    2024年02月11日
    浏览(41)
  • python数学建模--sympy三维图像绘制

    在求解二元函数最值的时候,我们不知道自己经过若干个步骤求出的结果是否正确,那么我们该怎么办呢?一种办法就是将这个函数的图像绘制出来 三维图像的作用在于,它不仅能让我们直观的看出待求二元函数在指定区间内的形状,而且对于我们求得的最值以及求极值的步

    2024年02月06日
    浏览(67)
  • 数学建模--三维图像绘制的Python实现

    目录 1.绘制三维坐标轴的方法 2.绘制三维函数的样例1  3.绘制三维函数的样例2 4.绘制三维函数的样例3  5.绘制三维函数的样例4  6.绘制三维函数的样例5           

    2024年02月09日
    浏览(50)
  • 数据可视化——用python绘制气泡图、三维散点图、多重柱形图案例

    目录 前言 一、气泡图的绘制 1、什么是气泡图?他适用于什么数据? 2、图形效果展示 3、导入需要用到的库 4、读取要分析的数据 5、检查数据是否有问题 6、将要对比数据提取出来 7、画图 二、三维散点图的绘制 1、什么是三维散点图? 2、导入需要用到的数据库 3、画图 三

    2024年02月06日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包