VTK 实现MinIP Activiz
2019独角兽企业重金招聘Python工程师标准>>>
public partial class Form1 : Form
{
#region 私有变量
private Kitware.VTK.vtkRenderer _render = null;
private Kitware.VTK.vtkRenderWindow _renWin = null;
private Kitware.VTK.vtkRenderWindowInteractor _iren = null;
private Kitware.VTK.vtkDICOMImageReader _reader = null;
private double opacityWindow = 4096;
private double opacityLevel = 2048;
#endregion
#region 属性
public string FileDir
{
get;
set;
}
#endregion
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
FolderBrowserDialog dlg = new FolderBrowserDialog();
if (DialogResult.OK == dlg.ShowDialog())
{
FileDir = dlg.SelectedPath;
}
}
private void renderWindowControl1_Load(object sender, EventArgs e)
{
_render = renderWindowControl1.RenderWindow.GetRenderers().GetFirstRenderer();
_renWin = renderWindowControl1.RenderWindow;
_iren = renderWindowControl1.RenderWindow.GetInteractor();
}
private void button2_Click(object sender, EventArgs e)
{
if (!String.IsNullOrEmpty(FileDir))
{
_reader = new Kitware.VTK.vtkDICOMImageReader();
_reader.SetDirectoryName(FileDir);
_reader.SetDataByteOrderToLittleEndian();
_reader.Update();
_reader.SetDataScalarTypeToShort();
_reader.UpdateWholeExtent();
_reader.GetOutput().UpdateInformation();
double[] range = _reader.GetOutput().GetScalarRange();//获得颜色映射标量值的范围
double min = range[1];//
double max = range[0];//
double diff = max - min;
double slope = 255.0 / diff;//斜率
double inter = -slope * min;//截距
double shift = inter / slope;
vtkImageShiftScale vtkImageCast = vtkImageShiftScale.New();
//With vtkImageShiftScale Pixels are shifted
//(a constant value added) and then scaled (multiplied by a scalar. As a convenience,
//this class allows you to set the output scalar type similar to vtkImageCast.
//This is because shift scale operations frequently convert data types.
//如果不进行转换,vtkVolumeRayCastMapper会无法渲染short类型的数据,
//必须要经过转换将数据转换为vtkVolumeRayCastMapper可以渲染的数据
vtkImageCast.SetInput(_reader.GetOutput());
vtkImageCast.SetScale(slope);
vtkImageCast.SetShift(shift);
vtkImageCast.SetOutputScalarTypeToUnsignedShort();
vtkImageCast.Update();
//获得透明度转换函数的参数
range = vtkImageCast.GetOutput().GetScalarRange();
double level = 0.5 * (range[1] + range[0]);
double window = range[1] - range[0];
vtkPiecewiseFunction opacityFun = new vtkPiecewiseFunction();
opacityFun.AddPoint(level - window / 2, 0.0);
opacityFun.AddPoint(level + window / 2, 1.0);
vtkPiecewiseFunction grayTransferFun = new vtkPiecewiseFunction();
grayTransferFun.AddSegment(level - window / 2, 0.0, level + window / 2, 1.0);
vtkVolumeProperty property = new vtkVolumeProperty();
property.SetInterpolationTypeToLinear();
property.SetScalarOpacity(opacityFun);
property.SetColor(grayTransferFun);
vtkVolumeRayCastMIPFunction mipFun = new vtkVolumeRayCastMIPFunction();
mipFun.SetMaximizeMethodToOpacity();
vtkVolumeRayCastMapper mapper = new vtkVolumeRayCastMapper();
mapper.SetVolumeRayCastFunction(mipFun);
mapper.SetInput(vtkImageCast.GetOutput());
// mapper.SetInput(_reader.GetOutput());
//会报错:无法渲染非unsigned char或者unsigned short 类型的数据
//vtkVolumeRayCastMapper (09C92D38):
//Cannot volume render data of type short, only unsigned char or unsigned short.
vtkVolume volume = new vtkVolume();
volume.SetProperty(property);
volume.SetMapper(mapper);
_render.AddViewProp(volume);
_render.ResetCamera();
_renWin.Render();
_iren.Initialize();
_iren.Start();
}
else
{
MessageBox.Show("请先选定文件夹!");
}
}
}
转载于:https://my.oschina.net/u/2009228/blog/536371
VTK 实现MinIP Activiz相关推荐
- java vtk 三维_[WPF VTK]三维图形开发基础(四)
0.条条大路 前面介绍的使用WPF自己撰写算法实现点数据的三角划分以图实现轮廓的三维重构. 但简单的算法以及不加其他处理效果不佳,对于点数据的三角划分在查阅了一些论文后发现有: 基于图的最短路径.De ...
- VTK Examples中MIP和MPR的功能实现与源码分析
本篇博客由Markdown编辑器编辑而成. 1. 前言 在之前关于ParaView技术调研中,已经通过修改ParaView5.0的源代码实现了MIP/minIP/aveIP的功能.但是由于对ParaV ...
- ActiViz(VTK的C#库)C#64位VTK如何在Visual Studio里创建RenderWindowControl控件
Visual Studio17里只支持x86位控件拖拽,不支持x64.那怎样在64位的组件form窗口中放RenderWindowControl控件呢?下面我们就详细介绍一下在Visual Studi ...
- vtk实现MPR、MIP、minIP、aveIP
本文参考:VTK Examples中MIP和MPR的功能实现与源码分析 另参考:6种常见的三维重建方式 先编译VTK.VTK Examples 找到MPR示例,这个示例所在的位置在: VTK_Sour ...
- vtk相机_C#开发PACS医学影像三维重建(一)使用VTK重建3D影像
VTK简介: VTK是一个开源的免费软件系统,主要用于三维计算机图形学.图像处理和可视化.Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的. 因为使用C#语言开发,而VTK是C++ ...
- 【VTK】VTK 之一 环境准备
VTK总结 http://blog.sina.com.cn/s/articlelist_2216172153_3_1.html VTK教程 http://blog.csdn.net/www_dolin ...
- MIP 和 MinIP
一.概述 MIP:maximum intensity projection 最大密度投影 MinIP:Minimum intensity projection 最小密度投影 MIP主要用于CT血管造影 ...
- Activiz学习点滴(一)——常用类
程序集 Kitware.VTK.dll, v5.8.0.607 namespace Kitware.VTK public class WrappedObject : Kitware.mummy.Run ...
- Activiz 使用笔记-3 数据源(1)
2019独角兽企业重金招聘Python工程师标准>>> activiz本身自带的user guide 比较简单,所以我按着vtk的user guide来慢慢学.从简单例子入手去学习V ...
最新文章
- ASP.NET 4.0: 请求验证模式变化导致ValidateRequest=false失效
- Python应用实战案例-Python实现K线图绘制
- ORA-01180: can not create datafile 1 :解决一例
- 低配服务器装那个系统吗,用低配服务器好还是高配vps
- c语言字符型计算器,求用c语言编程四则混合运算计算器?
- Ant Design Landing 产品首页的设计神器
- java 多个数字_java 输入多个数字
- Python中的与或非
- 如何使用磁性套索工具进行抠图
- python和c++同时订阅两个话题,在一个回调函数中处理
- 小学计算机京剧脸谱教案,[热门]《戏曲脸谱》小学美术教学案例
- 银行的总行,营业部,支行,分理处有什么样的关系
- 关键词查找并标注出来
- IT职业规划:大公司VS小公司,怎样选择更有前途?
- 再谈SQL-to-SQL翻译器
- ubuntu插入U盘,无法识别
- 雷神轮胎携手JBL 演绎科技降噪、感受非凡音悦
- 百度索引量与“site”结果是不是一样的,site总是接近百度索引量
- Debian/Ubuntu 时区和自动校时设置
- gis data editor.php,我们的漏洞Webug 3.0中级进阶攻略(上)