网站首页 > 技术文章 正文
VTK简介:
VTK是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的。
因为使用C#语言开发,而VTK是C++的,所以推荐使用VTK的.Net开发库:ActiViz。
本系列文章主要以技术和代码讲解为主,ActiViz的安装和环境配置可以参考:
ActiViz(VTK的C#库)学习使用心得之二:Activiz.NET的下载和安装
官网资料:
https://www.kitware.eu/product/activiz
三维重建技术介绍:
对于一些复杂的图像,医生希望用三维重建来观察病灶点来辅助诊断,一般在医学领域内的三维重建类型分为以下六种:
多层面重建(MPR)
最大密度投影(MIP)
表面阴影遮盖(SSD)
容积漫游技术(VR)
曲面重建(CPR)
虚拟内镜技术(VE)
本系列教程最终效果(实际效果受显卡能力决定):
当我们下载并安装好ActiViz之后,准备好要三维重建的Dcm文件,在VS2017中新建一个桌面应用程序项目:
引用相关的动态库:
在Form1的Load事件中:
private void Form1_Load(object sender, EventArgs e)
{
//创建数据读取对象
vtkDICOMImageReader reader = new vtkDICOMImageReader();
//小端字节
reader.SetDataByteOrderToLittleEndian();
//设置切片数据路径
reader.SetDirectoryName(@"C:\Users\Administrator\Desktop\vtk\801");
vtkImageShrink3D shrink = new vtkImageShrink3D();
shrink.SetShrinkFactors(4, 4, 1);
shrink.AveragingOn();
shrink.SetInput((vtkDataObject)(reader.GetOutput()));
//提取等值面
vtkMarchingCubes skinExtractor = new vtkMarchingCubes();
//建立算法对象,从CT切片数据中提取出皮肤
skinExtractor.SetValue(0, 50); //提取出CT值为50的组织
skinExtractor.SetInputConnection(shrink.GetOutputPort());
vtkDecimatePro deci = new vtkDecimatePro();
deci.SetTargetReduction(0.3);
deci.SetInputConnection(skinExtractor.GetOutputPort());
vtkSmoothPolyDataFilter smooth = new vtkSmoothPolyDataFilter(); //光滑图像
smooth.SetInputConnection(deci.GetOutputPort());
smooth.SetNumberOfIterations(200);
vtkPolyDataNormals skinNormals = new vtkPolyDataNormals(); //法线
skinNormals.SetInputConnection(smooth.GetOutputPort());
skinNormals.SetFeatureAngle(60.0);
vtkStripper stripper = new vtkStripper();
stripper.SetInputConnection(skinNormals.GetOutputPort());
vtkDataSetMapper skinMapper = new vtkDataSetMapper();
skinMapper.SetInput(stripper.GetOutput());
skinMapper.ScalarVisibilityOff();
//设置相机
vtkCamera aCamera = new vtkCamera();
aCamera.SetViewUp(0, 0, -1);
aCamera.SetPosition(0, 1, 0);
aCamera.SetFocalPoint(0, 0, 0);
aCamera.ComputeViewPlaneNormal();
//设置Actor
vtkActor coneActor = new vtkActor();
coneActor.SetMapper(skinMapper);
coneActor.GetProperty().SetAmbient(0.5);
coneActor.GetProperty().SetDiffuse(1);
coneActor.GetProperty().SetSpecular(0.6);
//显示类
vtkRenderer renderer = renderWindowControl1.RenderWindow.GetRenderers().GetFirstRenderer();
renderer.AddActor(coneActor);//添加coneActor对象
//renderer.AddActor2D(new vtkProp());//添加textActor对象
renderer.SetBackground(0, 0, 0);
renderer.SetActiveCamera(aCamera);//添加相机
renderer.ResetCamera();
vtkRenderWindow renWin = renderWindowControl1.RenderWindow;//设置绘图窗口renWin->AddRenderer(renderer);//装载绘图类
vtkWin32RenderWindowInteractor iren = new vtkWin32RenderWindowInteractor();
iren.SetRenderWindow(renWin);//装载绘图窗口
}
这里我用的是头颅的CT影像切片,运行后就得到了一个未上色的三维模型:
修改上面的代码,尝试提取脑部血管模型:
//建立算法对象,从CT切片数据中提取出皮肤
skinExtractor.SetValue(0, 250); //血管CT值为200-300左右
C#开发PACS、RIS医学影像处理系统
原文地址:
https://www.cnblogs.com/Uncle-Joker/p/13692517.html
猜你喜欢
- 2025-07-08 NVIDIA正式发布新一代AI抗锯齿DLSS 2.0:性能提升最多75%
- 2025-07-08 PS5《控制:终极版》新增扩充内容和次世代增强视觉功能
- 2025-07-08 苹果发布OSX 10.11/Watch OS第4测试版
- 2025-07-08 《孤注一掷》:网线另一端的千谎百计
- 2025-07-08 俄军在乌境内使用化学武器?专家质疑,美乌“不确定”
- 2025-07-08 学会这些Final Cut Pro X键盘快捷键,助你轻松编辑视频
- 2025-07-08 苹果visionOS 26、watchOS 26登场,外观功能大升级
- 2025-07-08 为了省钱而买的GTX显卡 因为这个功能我后悔了
- 2025-07-08 Python学不会来打我(52)面向对象编程“继承”思想详解
- 2025-07-08 AnyCAD Rapid .Net三维控件-WinForms集成教程
- 最近发表
-
- Qt编程进阶(63):Qt Quick高级控件的使用
- Qt编程进阶(47):QML鼠标事件处理(qt编程难不难)
- 使用Xamarin和Visual Studio开发Android可穿戴设备应用
- Qt使用教程:创建Qt Quick应用程序(三)
- QML性能优化 | 常见界面元素优化(qml布局自适应大小)
- Qt使用教程:创建移动应用程序(二)
- Qt Quick 多媒体开发播放音乐和视频
- Qt使用教程:创建Qt Quick UI表单(三)
- 如何将 Qt 3D 渲染与 Qt Quick 2D 元素结合创建太阳系行星元素?
- QML控件:TextInput, TextField, TextEdit, TextArea用法及自定义
- 标签列表
-
- axure 注册码 (25)
- exploit db (21)
- mutex_lock (30)
- oracleclient (27)
- nfs (25)
- springbatch (28)
- oracle数据库备份 (25)
- dir (26)
- connectionstring属性尚未初始化 (23)
- output (32)
- panel滚动条 (28)
- centos 5 4 (23)
- sql学习 (33)
- c 数组 (33)
- pascal语言教程 (23)
- ppt 教程 (35)
- java7 (24)
- 自适应网站制作 (32)
- server服务自动停止 (25)
- 超链接去掉下划线 (34)
- 什么是堆栈 (22)
- map entry (25)
- ubuntu装qq (25)
- outputstreamwriter (26)
- fill_parent (22)