C#开发PACS医学影像三维重建(十三):基于人体CT值从皮肤渐变到骨骼的梯度透明思路
当我们将CT切片重建为三维体之后,通常会消除一些不必要的外部组织来观察内部病灶,
一般思路是根据人体常见CT值范围来使得部分组织透明来达到效果,
但这是非黑即白的,即,要么显示皮肤,要么显示神经,要么显示骨骼…
然而,当病灶介于两个CT值范围中间或重合时,要观察病灶这将是一个非常困难的工作,需要手动旋转、切割等一系列操作,
严重降低判断准确性和工作效率,故此采用梯度透明思想来展现渐变过程。
准备一张人体CT值范围表参考:

当我们对三维体使用鼠标操作时,将CT值从最小值到最大值映射到三维体上面,并将透明度从0到100渐变,
如果能自己用代码实现效果最好,否则也可以用VTK进行梯度透明,部分C++代码如下:
vtkSmartPointer<vtkPiecewiseFunction> GradualOp = vtkSmartPointer<vtkPiecewiseFunction>::New();
GradualOp->AddPoint(10, 0.0);
GradualOp->AddPoint(20, 0.5);
GradualOp->AddPoint(30, 1.0);
	volumeProperty->SetGradientOpacity(GradualOp);
梯度小于10点的不透明度乘子设为0,完全透明。
梯度大小为10时,不透明度为0;
梯度大小为20时,不透明度乘子为0.5;
梯度大小在10-20时,不透明度乘子通过线性映射至0-0.5之间的数值;
当梯度大小在20-30之间时,不透明度乘子通过线性映射至0.5-1.0之间;
梯度值大于30时,不透明度乘子为1
同样最后还是用观察者模式展现体重建
//设置相机
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);//装载绘图窗口
依照上述思想,实现最终效果,
案例①:从面部重建渐变到口腔牙齿,显露出牙床钢钉:

更为直观、方便的观察牙床钢钉及口腔其他情况:

案例②:颅脑及上胸腔平扫,从皮肤渐变到肌肉、神经、骨骼

渐变过程中观察骨骼、神经、血管等病灶:

C#开发PACS医学影像三维重建(十三):基于人体CT值从皮肤渐变到骨骼的梯度透明思路的更多相关文章
- C#开发PACS医学影像三维重建(一):使用VTK重建3D影像
		
VTK简介: VTK是一个开源的免费软件系统,主要用于三维计算机图形学.图像处理和可视化.Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的. 因为使用C#语言开发,而VTK是C++ ...
 - C#开发PACS医学影像处理系统(十三):绘图处理之病灶测量
		
接上一篇文章,当我们可以绘制图形标记后,就可以在此操作类上面进行扩展, 比如测量类工具,目前整理出的常用绘图和测量功能如下: 测量工具类:(图形标记类请参考本系列文章:绘图处理之图形标记) 功能 说明 ...
 - C#开发PACS医学影像处理系统(六):加载Dicom影像
		
对于一款软件的扩展性和维护性来说,上层业务逻辑和UI表现一定要自己开发才有控制权,否则项目上线之后容易被掣肘, 而底层图像处理,我们不需要重复造轮子,这里推荐使用fo-dicom,同样基于Dicom3 ...
 - C#开发PACS医学影像处理系统(十五):Dicom影像交叉定位线算法
		
1.定位线概念:某个方位的影像在另一个方向的影像上的投影相交线,例如横断面(从头到脚的方向)在矢状面(从左手到右手)上的影像投影面交线. 举个例子:右边的是MR(核磁共振)的某一帧切片,这是从头开始扫 ...
 - C#开发PACS医学影像处理系统(十六):2D处理之影像平移和缩放
		
1.平移,利用WPF中控件边距来控制位移: /// <summary> /// 平移图像 /// </summary> /// <param name="X&q ...
 - C#开发PACS医学影像处理系统(十七):2D处理之影像旋转和翻转
		
1.任意角度旋转 在XAML设计器中,设置RotateTransform属性 <InkCanvas x:Name="ToolInkCanvas" UseCustomCurso ...
 - C#开发PACS医学影像处理系统(二):界面布局之菜单栏
		
在菜单栏布局上,为了使用自定义窗体样式和按钮,我们需要先将窗体设置为无边框,然后添加一个Grid作为菜单栏并置顶,VerticalAlignment="Top" logo图片和标题 ...
 - C#开发PACS医学影像处理系统(三):界面布局之工具栏
		
工具栏布局采用WPF中Grid作为容器,按钮采用自定义样式和图标,并采用Separator分割线: XAML设计器代码: 其中 Style="{StaticResource ButtonS ...
 - C#开发PACS医学影像处理系统(十二):绘图处理之图形标记
		
在医生实际使用过程中,对于有病灶的影像需要一些2D绘图操作,例如对于病灶的标记和测量, 这就牵涉到在WPF中的2D绘图操作技术,一般的思路是监听鼠标的按下和抬起以及运动轨迹,目前整理出的常用绘图和测量 ...
 
随机推荐
- 可以直接调用 Thread 类的 run ()方法么?
			
当然可以.但是如果我们调用了 Thread 的 run()方法,它的行为就会和普通的方 法一样,会在当前线程中执行.为了在新的线程中执行我们的代码,必须使用 Thread.start()方法.
 - 是否可以继承 String 类?
			
String 类是 final 类,不可以被继承. 补充:继承 String 本身就是一个错误的行为,对 String 类型最好的重用方式是关 联关系(Has-A)和依赖关系(Use-A)而不是继承关 ...
 - 微信APP支付V3版本签名 && APP下单/订单查询接口Python版实现
			
问题背景 最近接入微信支付,微信官方并没有提供Python版的服务端SDK,因而只能根据文档手动实现一版,这里记录一下微信支付的整体流程.踩坑过程与最终具体实现. 微信支付APP下单流程 根据微信官方 ...
 - Streamlit:快速数据可视化界面工具
			
目录 Streamlit简介 Streamlit使用指南 常用命令 显示文本 显示数据 显示图表 显示媒体 交互组件 侧边栏 缓存机制 Streamlit使用Hack Streamlit的替代品 相关 ...
 - Canvas 与 SVG
			
什么是SVG? 引用w3c的一段话就是: SVG 指可伸缩矢量图形 (Scalable Vector Graphics) SVG 用来定义用于网络的基于矢量的图形 SVG 使用 XML 格式定义图形 ...
 - 小小标签,强大功能——深藏不露的 <input>
			
<input> 虽只是一个看似简单的 HTML 表单元素,但它这么一个单一的元素,就有多达 30 多个属性(attribute),相信无论你是个小菜鸟还是像我一样写了 15 年 HTML ...
 - 伪元素的margin值挤压主体元素解决
			
伪元素的margin值挤压主体元素解决 主体是两个p标签,需要再其左侧添加一个竖线,很常见的需求 目标 前提条件 1. 右侧的文字个数不固定 问题 1. 需要让before元素为`float:left ...
 - 前端每日实战:89# 视频演示如何用 CSS 和 D3 创作旋臂粒子动画
			
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/xJrOqd 可交互视频 此视频是可 ...
 - CSS样式写在JSP代码中的几种方法
			
1.行内样式. 可以直接把css代码写在现有的HTML标签元素的开始标签里面,并且css样式代码要写在style=" "双引号中才可以, 如: <p style=" ...
 - ssm 框架实现增删改查CRUD操作(Spring + SpringMVC + Mybatis 实现增删改查)
			
ssm 框架实现增删改查 SpringBoot 项目整合 一.项目准备 1.1 ssm 框架环境搭建 1.2 项目结构图如下 1.3 数据表结构图如下 1.4 运行结果 二.项目实现 1. Emplo ...