• VTK vtkFixedPointVolumeRayCastMapper 一个固定像素点的体数据映射器


    在vtkImageData中,绘制体数据一种软实现的光线投射算法。算法可以处理所有种类的数据类型,最多四种组件。算法可以采用复合或者MIP渲染方式,并且可以与几何数据混合起来渲染。设置采样间距space可以用来加速渲染进程。此外, 对于固定点精度是15的数据中,可以执行很好的计算。该算法是多线程的,可以跨多核心处理并行扫描。

    对于vtkVolumeRayCastMapper来说,该算法是一个很好的替代者。但是,对于下面几种情况该算法无法实现。

    • 不能工作在等值面光线投射的情况下
    • 它只能用内插值取代以前分类组合
    • 它只有最大标量值MIP渲染。

    VtkVolumeRayCastMapper不能用于下面2中情况,但vtkFixedPointVolumeRayCastMapper无此限制。

    • 如果数据不是无符号的字符或者无符号的短整形
    • 如果数据位多个组件的组合

    从无符号字符类型到双精度浮点类型,该算法都可以处理。

    通过创建子采样的提数据,执行跨越式的空间。在原始体数据中,4 × 4 × 4 单元的由最小,最大,并结合渐变和标志值表示。

     1 public class FixedPointVolumeFactory
     2     {
     3         public vtkImageData ImageData { get; set; }
     4 
     5         public FixedPointVolumeFactory(vtkImageData imageData)
     6         {
     7             this.ImageData = imageData;
     8         }
     9 
    10         public virtual vtkVolume NewActor()
    11         {
    12             return vtkVolume.New();
    13         }
    14 
    15         public virtual List<vtkProp> MakeActors()
    16         {
    17             List<vtkProp> actors = new List<vtkProp>();
    18             var actor = this.NewActor();
    19 
    20             vtkColorTransferFunction colorTFunc = this.GenerateColorTFunc();
    21             vtkPiecewiseFunction opacityFunc = this.GenerateOpacityFunc();
    22             vtkPiecewiseFunction gradient = this.GenerateGradientFunc();
    23 
    24             vtkVolumeProperty volumeProperty = vtkVolumeProperty.New();
    25             volumeProperty.SetColor(colorTFunc);
    26             volumeProperty.SetScalarOpacity(opacityFunc);
    27             volumeProperty.SetGradientOpacity(opacityFunc);
    28             volumeProperty.SetInterpolationTypeToLinear();
    29             volumeProperty.ShadeOn();
    30 
    31             //成体绘制函数:
    32             var volumeMapper = vtkFixedPointVolumeRayCastMapper.New();
    33             volumeMapper.SetInput(this.ImageData);
    34             volumeMapper.SetSampleDistance(0.5f);
    35 
    36             actor.SetMapper(volumeMapper);
    37             actor.SetProperty(volumeProperty);
    38 
    39 
    40             actors.Add(actor);
    41             return actors;
    42         }
    43 
    44         /// <summary>
    45         /// 梯度变换函数设置灰度值变换的大小与不透明度之间的映射。
    46         /// </summary>
    47         /// <returns></returns>
    48         private vtkPiecewiseFunction GenerateGradientFunc()
    49         {
    50             var gradient = vtkPiecewiseFunction.New();
    51             gradient.AddPoint(50, .2);//灰度值变化梯度与不透明度的关系
    52             gradient.AddPoint(500, 1);
    53             gradient.AddPoint(1500, 0.7);
    54             gradient.AddPoint(2000, .1);
    55             return gradient;
    56         }
    57 
    58         /// <summary>
    59         /// 不透明度映射函数是设置光线方向上的灰度值及其不透明度映射。
    60         /// </summary>
    61         /// <returns></returns>
    62         private vtkPiecewiseFunction GenerateOpacityFunc()
    63         {
    64             var opacityTransferFunction = vtkPiecewiseFunction.New();
    65             opacityTransferFunction.AddPoint(10, 0.0);//灰度值及不透明度值
    66             opacityTransferFunction.AddPoint(50, 0.1);
    67             opacityTransferFunction.AddPoint(200, 0.6);
    68             opacityTransferFunction.AddPoint(1000, 0.6);
    69             opacityTransferFunction.AddPoint(2000, 0.8);
    70             opacityTransferFunction.AddPoint(3000, 1);//不透明度值为1则为完全不透明
    71             opacityTransferFunction.ClampingOff();
    72             return opacityTransferFunction;
    73         }
    74 
    75         /// <summary>
    76         /// 颜色映射函数是设置灰度值与RGB颜色的映射。
    77         /// </summary>
    78         /// <returns></returns>
    79         private vtkColorTransferFunction GenerateColorTFunc()
    80         {
    81             var colorTransferFunction = vtkColorTransferFunction.New();
    82             colorTransferFunction.AddHSVPoint(0, 0.67, 0.5, 1);
    83             colorTransferFunction.AddHSVPoint(94, 0.67, 0.17, 1);
    84             colorTransferFunction.AddHSVPoint(139, 0, 0.4, 0);
    85             colorTransferFunction.AddHSVPoint(160, 0.28, 0.447, 1);
    86             colorTransferFunction.AddHSVPoint(254, 0.38, 0.413, 1);
    87             colorTransferFunction.ClampingOff();
    88             return colorTransferFunction;
    89         }
    90     }
  • 相关阅读:
    灵活的JavaScript(一)
    菜鸟快飞之JavaScript对象、原型、继承(三)
    菜鸟快飞之JavaScript对象、原型、继承(二)
    菜鸟快飞之JavaScript对象、原型、继承(一)
    undo清理 &redo 持久化
    mysql执行计划分析
    mysql5.6的统计信息
    pt-online-schema-change原理分析
    校验主从数据并修复
    使用伪master+binlog恢复数据
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14239807.html
Copyright © 2020-2023  润新知