VTK笔记-生成MIP图像-vtkImageSlabReslice类

MIP

  MIP(Maximum/Minimum Intensity Projection),最大/最小密度投影重建。
  MIP可以较真实地反应组织密度差异,使得血管的异常改变、形态、走形强化;但是只适用于外观形态的显示。
  在容积扫描数据中对每条径线上每个像素的最大强度值进行编码并投射成像。MIP的灰阶度反映CT值的相对大小,且比较敏感,即使小的差异也能被检测,如钙化灶、骨骼CT非常高,充盈对比剂的血管同样很高的CT值,但总是低于钙化灶和骨骼,在MIP图像上,其亮度不一样,可区分。
在这里插入图片描述

MIP应用价值(最大密度投影重建)

  广泛应用于具有相对高密度的组织和结构,如显影的血管、骨骼、肺部肿块以及明显强化的软组织病灶等,对于密度差异甚小的组织结构以及病灶则难以显示。
在这里插入图片描述

最小密度投影重建(MinP)

  它是在某一平面方向上对所选取的三维组织层块中的最小密度进行投影,主要用于气道的显示。偶尔也用于肝脏增强后肝内扩张胆管的显示。
  多张胸部CT图像生成的MIP;
在这里插入图片描述

vtkImageSlabReslice

在这里插入图片描述
vtkImageSlabReslice类派生自vtkImageReslice类,在切片的基础上,可以设定Slab的厚度,进行多切面的投影叠加。由于vtkImageReslice类继承自vtkThreadedImageAlgorithm类,内部是多线程的,使用方法SetNumberOfThreads()来设置线程个数。vtkImageSlabReslice类以三维图像为输入,沿某一方向产生一个二维的有一定厚度的MPR。
很像vtkimanageslice,reslice轴方向余弦可以通过SetResliceAxes或SetResliceAxesDirectionCosines方法设置。输出间距由SetOutputSpacing控制,输出原点由SetOutputOrigin控制。重新格式化时,由SetBackgroundColor或SetBackgroundLevel控制的位于Volume外部的像素的默认值。SetResliceAxesOrigin()方法还可以用于提供切片将通过的(x,y,z)点。
注意:vtkGPUVolumeRayCastMapper类也有MIP的体渲染方式,具体使用请看官方文档;

接口

投影方式

vtkImageSlabReslice类使用混合函数获取有厚度的切片图像,支持的混合函数包括穿过板的最小强度混合(VTK_IMAGE_SLAB_MIN)、最大强度混合(VTK_IMAGE_SLAB_MAX)和穿过板的平均(平均)强度值(VTK_IMAGE_SLAB_MEAN)。

int BlendMode;
vtkSetMacro(BlendMode, int);
vtkGetMacro(BlendMode, int);
void SetBlendModeToMin() { this->SetBlendMode(VTK_IMAGE_SLAB_MIN); }
void SetBlendModeToMax() { this->SetBlendMode(VTK_IMAGE_SLAB_MAX); }
void SetBlendModeToMean() { this->SetBlendMode(VTK_IMAGE_SLAB_MEAN); }

板间距

板间距是切片层与切片层之间的距离,是在世界坐标系下的真实距离,单位为mm;
板内层个数NumBlendSamplePoints可以由SlabThickness和SlabResolution计算得到,即(2 x (int)(0.5 x SlabThickness/SlabResolution)) + 1;

double SlabResolution;
vtkSetMacro(SlabResolution, double);
vtkGetMacro(SlabResolution, double); 

板厚

SlabThickness用来记录板的厚度,必须是非0的正数;

double SlabThickness;
vtkSetMacro(SlabThickness, double);
vtkGetMacro(SlabThickness, double);

切片层个数

NumBlendSamplePoints是指在板内横截面使用的采样点数。如果NumBlendSamplePoints等于1,就相当是vtkImageReslice,一个薄的Reslic切片;NumBlendSamplePoints可以由SlabThickness和SlabResolution计算得到;

int NumBlendSamplePoints;   
vtkGetMacro(NumBlendSamplePoints, int);  

示例

#include "vtkMetaImageReader.h"
#include "vtkImageData.h"
#include "vtkMatrix4x4.h"
#include "vtkImageReslice.h"
#include "vtkLookupTable.h"
#include "vtkImageMapToColors.h"
#include "vtkImageActor.h"
#include "vtkImageMapper3D.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkInteractorStyleImage.h"
#include "vtkImageSlabReslice.h"
#include "vtkAutoInit.h" 
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);using namespace std;
int main() {vtkNew<vtkMetaImageReader> reader;reader->SetFileName("D:\\brain.mhd");reader->Update();int extent[6];double spacing[3];double origin[3];reader->GetOutput()->GetExtent(extent);reader->GetOutput()->GetSpacing(spacing);reader->GetOutput()->GetOrigin(origin);double center[3];center[0] = origin[0] + spacing[0] * 0.5 * (extent[0] + extent[1]);center[1] = origin[1] + spacing[1] * 0.5 * (extent[2] + extent[3]);center[2] = origin[2] + spacing[2] * 0.5 * (extent[4] + extent[5]);static double axialElements[16] = {1, 0, 0, 0,0, 1, 0, 0,0, 0, 1, 0,0, 0, 0, 1};vtkNew<vtkMatrix4x4> resliceAxes;resliceAxes->DeepCopy(axialElements);resliceAxes->SetElement(0, 3, center[0]);resliceAxes->SetElement(1, 3, center[1]);resliceAxes->SetElement(2, 3, center[2]);vtkNew<vtkImageSlabReslice> reslice;reslice->SetInputConnection(reader->GetOutputPort());reslice->SetOutputDimensionality(2);reslice->SetResliceAxes(resliceAxes);reslice->SetInterpolationModeToLinear();reslice->SetSlabThickness(200);reslice->SetBlendModeToMax();reslice->Update();vtkNew<vtkLookupTable> colorTable;colorTable->SetRange(0, 1000);colorTable->SetValueRange(0.0, 1.0);colorTable->SetSaturationRange(0.0, 0.0);colorTable->SetRampToLinear();colorTable->Build();vtkNew<vtkImageMapToColors> colorMap;colorMap->SetLookupTable(colorTable);colorMap->SetInputConnection(reslice->GetOutputPort());vtkNew<vtkImageActor> imgActor;imgActor->GetMapper()->SetInputConnection(colorMap->GetOutputPort());vtkNew<vtkRenderer> renderer;renderer->AddActor(imgActor);renderer->SetBackground(1.0, 1.0, 1.0);vtkNew<vtkRenderWindow> renderWindow;renderWindow->AddRenderer(renderer);renderWindow->Render();renderWindow->SetSize(640, 480);renderWindow->SetWindowName("ImageResliceExample");vtkNew<vtkRenderWindowInteractor> renderWindowInteractor;vtkNew<vtkInteractorStyleImage> imagestyle;renderWindowInteractor->SetInteractorStyle(imagestyle);renderWindowInteractor->SetRenderWindow(renderWindow);renderWindowInteractor->Initialize();renderWindowInteractor->Start();return 0;
}

SetSlabThickness使用2.0的效果;
在这里插入图片描述
SetSlabThickness使用20.0的效果;
在这里插入图片描述
SetSlabThickness使用200.0的效果;
在这里插入图片描述

参考资料

1.VTK Examples中MIP和MPR的功能实现与源码分析
2.vtk最大密度投影MIP

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/38134.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重温马云英文演讲:最伟大的成功

“机会在哪呢&#xff1f;”每当创业者发出这个疑问&#xff0c;我们就该重温马云的这段英文演讲&#xff0c;让奋斗的热血重新沸腾起来。你有什么。你有年轻的身体&#xff0c;你有奇妙的想法&#xff0c;你有乐观的心态&#xff0c;你有无限的可能性&#xff01; 演讲全文&am…

马云退隐前,在年会上说了最重要的三件事

作者&#xff1a;黄小斜 今天是9月10号教师节&#xff0c;也是马老师卸任阿里巴巴董事长的日子&#xff0c;同时也是阿里巴巴召开20周年年会的日子。有幸抽中了门票&#xff0c;在现场见证这具有历史意义的一幕&#xff0c;马老师在中场时给我们带来了一段演讲&#xff0c;也是…

阿里巴巴CTO独家自述:CTO就是要给CEO扫清障碍和风险

CTO可能不是思想家&#xff0c;但一定是行动派。 本文来自《云栖战略参考》第二期&#xff0c;过程中鲁肃非常坦率地探讨了一位合格CTO应该具备的素质&#xff0c;以及他自己一路摔打成长的心路历程。 一 我的经历 我的经历很简单&#xff0c;2004年之前一直在学校读书&#x…

马云现身西班牙度假 半年多来首次在境外露面

这半年里&#xff0c;马云公开露面的次数不到三次&#xff0c;就连前段时间的世界互联网大会也不见他的身影。 极少数出现在公众视野的马老师似乎在努力低调&#xff0c;但是他的一举一动仍然受人关注。 西班牙多家媒体10月19日报道&#xff0c;马云上周六飞抵西班牙, 在伊维…

【历史上的今天】8 月 22 日:改变世界的程序员们;网络直播的鼻祖;何小鹏离开阿里巴巴

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天 2022 年 8 月 22 日。历史上的今天&#xff0c;Masatoshi Shima 出生&#xff0c;他和 英特尔&#xff08;Intel&#xff09; 合作设计的芯片让第一个微处理器 Intel 400…

马来西亚热情拥抱阿里巴巴 马云倡议的eWTP首次落地海外

摘要&#xff1a;3月22日&#xff0c;马来西亚总理纳吉布与阿里巴巴集团董事局主席马云一同出现在吉隆坡一场盛大启动仪式上&#xff0c;他们将共同见证马云的eWTP理念落地马来西亚。 3月22日&#xff0c;在邀请阿里巴巴集团董事局主席马云、阿里巴巴集团CEO张勇、蚂蚁金服集团…

基于GPT4All的大型语言模型设计生态系统

GPT4All 一套专为强大、定制的大型语言模型设计的生态系统,能够在消费级CPU上本地运行。在GPT4All中,所使用的模型是一个3GB至8GB的文件,读者可以自行下载该文件,并将其插入到GPT4All的开源生态系统软件中。这一软件生态系统由Nomic AI提供支持并进行维护,其目的是确保系统…

chatgpt赋能python:Python在数据可视化中的应用:如何用Python画图

Python在数据可视化中的应用&#xff1a;如何用Python画图 介绍 随着数据科学和人工智能的不断发展&#xff0c;数据可视化成为了一种重要的工具。通过绘制图表&#xff0c;我们可以更直观地理解数据之间的关系&#xff0c;并发现其中的规律和趋势。Python作为一种灵活的编程…

chatgpt赋能python:使用Python绘制散点图:了解基本语法,数据可视化。

使用Python绘制散点图&#xff1a;了解基本语法&#xff0c;数据可视化。 数据是任何研究的基石&#xff0c;因此对于从事各种数据处理工作的人员来说&#xff0c;数据可视化是一个非常重要的工具。Python作为一种非常受欢迎的编程语言&#xff0c;具有广泛的应用&#xff0c;…

chatgpt赋能Python-pythonpandas雷达图代码

前言 在数据可视化中&#xff0c;雷达图是一种非常常用的图表类型。Python中的pandas库提供了快速而简便的雷达图绘制方法&#xff0c;因此在本篇文章中&#xff0c;我们将着重介绍如何使用pandas库绘制雷达图&#xff0c;并提供一些有用的代码示例。 什么是雷达图&#xff1…

chatgpt赋能python:PythonSegno:一款专业的二维码生成器

Python Segno: 一款专业的二维码生成器 随着二维码的不断普及&#xff0c;二维码的应用场景也越来越广泛。比如在商品、广告等领域&#xff0c;我们经常可以看到精美的二维码。但数字出版、酒店、餐馆等行业也在使用二维码作为访问、付款等操作的工具。当然&#xff0c;对于开…

chatgpt赋能python:用Python绘制柱形图:一篇全面的指南

用Python绘制柱形图&#xff1a;一篇全面的指南 如果你想用数据去解决一些问题&#xff0c;或者向别人展示一些数据&#xff0c;那么绘制柱形图&#xff08;Bar chart&#xff09;就是一个好的选择。不仅因为它清晰、易懂&#xff0c;而且因为它是一种数据可视化的方式&#x…

chatgpt赋能python:Python方波绘制代码

Python方波绘制代码 Python是一种高级编程语言&#xff0c;已经被广泛应用于许多领域&#xff0c;包括数据科学、机器学习、Web应用程序开发等。在本文中&#xff0c;我们将介绍如何使用Python编写方波绘制代码。 什么是方波&#xff1f; 方波是一种周期性波形&#xff0c;具…

chatgpt赋能python:Python绘制动画:用代码让图像动起来

Python绘制动画&#xff1a;用代码让图像动起来 Python是一种强大的编程语言&#xff0c;可以用于各种应用领域&#xff0c;包括图形图像处理。利用Python的绘图库和动画库&#xff0c;可以快速、简便地实现动画效果。本文介绍Python绘制动画的基本概念与技巧&#xff0c;帮助…

chatgpt赋能python:Python编程绘制方波无穷级数

Python编程绘制方波无穷级数 在数学领域&#xff0c;方波无穷级数是指一种周期为 T T T 的函数&#xff0c;可以被表示为一组正弦函数的无穷级数。简单来说&#xff0c;它是由许多个正弦波合成的周期函数。 Python作为一种高效的编程语言&#xff0c;可以很容易地用来绘制方…

chatgpt赋能python:用Python绘制区域图,探索数据背后的故事

用Python绘制区域图&#xff0c;探索数据背后的故事 随着大数据时代的到来&#xff0c;数据可视化变得越来越受到重视。而区域图&#xff08;Area chart&#xff09;是一种常用的数据可视化图表类型之一。它可以说明一个数量随着时间的变化而发生的趋势&#xff0c;以及各类数…

chatgpt赋能python:多级雷达图绘制Python

多级雷达图绘制Python 介绍&#xff1a; 雷达图是一种常用于展示多维度数据的图表&#xff0c;它能够直观地呈现不同变量之间的相对大小及其关系。但当数据维度过多时&#xff0c;单一的雷达图已经无法满足需求&#xff0c;这时需要用到多级雷达图。 多级雷达图是指将多个雷…

chatgpt赋能python:Python绘制连线图:掌握数据可视化的基础技能

Python绘制连线图&#xff1a;掌握数据可视化的基础技能 什么是连线图&#xff1f; 连线图&#xff08;Line Chart&#xff09;又叫折线图、曲线图。通常用于表示随时间或者其他连续变量的变化趋势。可以用于展示数据的波动情况、趋势变化和周期性变化等。 Python绘制连线图…

chatgpt赋能python:Python绘制散点图及如何修改属性

Python绘制散点图及如何修改属性 Python是一种高级编程语言&#xff0c;广泛应用于数据分析、科学计算、Web开发、人工智能等领域。在数据分析和可视化方面&#xff0c;Python有着出色的表现。其中&#xff0c;绘制散点图是常见的数据可视化方式之一。本文将介绍如何用Python绘…

chatgpt赋能python:Python绘制散点图不同形状

Python绘制散点图不同形状 散点图是数据可视化中常用的一种图表形式&#xff0c;用于展现两个变量之间的关系。在Python中&#xff0c;我们可以使用Matplotlib库轻松实现散点图的绘制。除了基本的圆形散点图外&#xff0c;Matplotlib还提供了多种不同形状的散点图&#xff0c;…