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

主要功能:

1:可以通过进度条换层      
2:鼠标双击放大/缩小窗口
3:按住鼠标中键拖动图像
4:鼠标右键滑动放大/缩小图像

效果:

视频:

small_python_vtk_4window

这里主要讲一下体绘制:

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

  // Create our volume and mappervtkNew<vtkVolume> volume;vtkNew<vtkFixedPointVolumeRayCastMapper> mapper;mapper->SetInputConnection(reader->GetOutputPort());vtkNew<vtkColorTransferFunction> colorFun;vtkNew<vtkPiecewiseFunction> opacityFun;// Create the property and attach the transfer functionsvtkNew<vtkVolumeProperty> property;property->SetIndependentComponents(independentComponents);property->SetColor(colorFun);property->SetScalarOpacity(opacityFun);property->SetInterpolationTypeToLinear();// connect up the volume to the property and the mappervolume->SetProperty(property);volume->SetMapper(mapper);// Depending on the blend type selected as a command line option,// adjust the transfer functionswitch (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 datacase 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 datacase 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 datacase 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 datacase 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 sizerenWin->SetSize(600, 600);renWin->SetWindowName("FixedPointVolumeRayCastMapperCT");renWin->Render();// Add the volume to the scenerenderer->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 datarenWin->Render();iren->Start();

三维重建 医学图像的可视化 PyQt Python VTK 四视图(横断面,冠状面,矢状面,3D)相关推荐

  1. 三维重建 PyQt Python VTK 医学图像的可视化 vtkImageView2三视图(横断面,冠状面,矢状面)

    概述: 本文实现了 Python C++ 版本 的 四视图,MPR 和 三维重建:同时有C++ Qt版本 效果展示: 视频展示: VTK四视图 vtkImageViewer2 一个方便易用的2D图像显 ...

  2. 练习:VTK 四视图显示(三视图+三正交切片)

    版本:vtk9.2.0+vs2022 主要功能如下:根据三正交切片的位置联动显示其他窗口切片,在三正交切片调整窗宽窗位后其他三视图同步窗宽窗位,并显示切片序号 #include <vtkActo ...

  3. VTK CT重建(一) MPR 多层面重建 四视图

    目录 概述: MPR,全称是multi-planar reformation / reconstruction,是常用的医学图像后处理技术 优化后的视频: vtkImageReslice 参考资料 概 ...

  4. 第15.12节PyQt(Python+Qt)入门学习:可视化设计界面组件布局详解

    一.引言 在Qt Designer中,在左边部件栏的提供了界面布局相关部件,如图: 可以看到共包含有四种布局部件,分别是垂直布局(Vertical Layout).水平布局(Horizontal La ...

  5. Python+pyqt+dicom+vtk 使用pyinstaller打包软件时正常,运行报错vtkmodules.all、pydicom.encoders.pylibjpeg等错误

    ** Python+pyqt+dicom+vtk 使用pyinstaller打包软件时正常,运行时报vtkmodules.all.pydicom.encoders.pylibjpeg.No modul ...

  6. Python数据可视化matplotlib:第四回:文字图例尽眉目

    Python数据可视化matplotlib:第四回:文字图例尽眉目 1. Figure和Axes上的文本 大家可以看到有些论文或者博客上都有绘制的很漂亮的图,其中大部分都在图形绘制上进行一定的注释说明 ...

  7. Python+vtk 实现激光点云数据可视化学习(2021.7.12)

    Python+VTK实现激光点云数据可视化学习 2021.7.12 1.激光点云与VTK简介 2.配置Python环境(Conda+PyCharm+Python3.6+VTK) 3.点云数据(大约60 ...

  8. numpy 创建加一行_数据科学|可视化图解Python科学计算包Numpy

    文章申明 文章作者:梁斌伟 责任编辑:郭德真 微信编辑:玖蓁 本文转载自公众号 实战统计学 (ID:statrcn) 原文链接:可视化图解Python科学计算包NumPy 作者:梁斌伟 编者按: 你真 ...

  9. Python vtk学习(1)

    Vtk,(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学.图像处理和可视化.Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的,包含有 ...

最新文章

  1. Servlet基础:接口、类、请求响应、配置、会话追踪、上下文、协作、异常
  2. CV:基于face库利用cv2调用摄像头(或视频)根据人脸图片实现找人(先指定要识别已知人脸的文件夹转为numpy_array+输入新图片遍历已有numpy_array)
  3. search by Belonging to my team测试 - with manager role
  4. C#如何测试代码运行时间
  5. 跨境电商独立站建站优化清单
  6. 强大的日志分析工具AWStats经典备忘
  7. 2019年第五届计蒜之道复赛总结
  8. 开发时多选操作的实现
  9. 使用遇到的问题_使用三防整理剂做织物整理会遇到这些问题...
  10. k8s——Kubernetes配置yaml文件详解
  11. DFT compiler极简示例2(使用autofix)
  12. php网页代码字体大小,HTML网页字体大小的设置
  13. vhdl变量除法_在VHDL中实现高精度快速除法
  14. Arcgis(二) 绘制区域划分示意图——以重庆五大功能区为例
  15. 商场室内地图导航如何实现,便捷、低成本智慧商业综合体一站式解决方案
  16. winform中使用ReportViewer的时候,找不到报表数据面板.
  17. github 开源android项目
  18. Unisoc RNDIS上网业务流程学习笔记
  19. 文言文编程?厉害了程序员!
  20. 承香墨影的行业周报-0x0010

热门文章

  1. java学到能看懂代码_一篇文章能够看懂基础源代码之JAVA篇
  2. JavaScript中的表单编程
  3. 开发者方案 · 久坐提醒 / 喝水提醒小助手·树莓派4B/咕咕机G2/涂鸦 Link SDK
  4. 《RA-UNet: A hybrid deep attention-aware network to extract liver and tumor in CT scans》
  5. 物联网趣谈-我接触的第一个设备
  6. Looper 需要手动 quit,那主线程 Looper 呢?
  7. Ubuntu16.04 获取并启用root账户的方法
  8. Java实现 LeetCode 377 组合总和 Ⅳ
  9. ERROR Plumber found unhandled error: Error in plugin gulp-htmlmin
  10. 工程项目提成标准方案_工程项目提成方案汇总