• VTK中光线投射法实现体绘制【转】


    VTK中光线投射法实现体绘制


    1、体绘制函数
    VTK 为使用者提供了三种用于光线投射法的函数分别是:
    等值面绘制函数(vtkVolumeRayCastIsosurfaceFunction);
    最大密度投影函数(vtkVolumeRayCastMIPFunction);
    合成体绘制函数(vtkVolumeRayCastCompositeFunction)
    其中最常用的是合成体绘制函数,最大密度投影函数在显示血管影像方面有比较好的作用。但是如图所看到的,MIP函数没有空间立体感,也就是不能提供深度的信息。


    2、不透明度映射函数
    不透明度映射函数是设置光线方向上的灰度值及其不透明度映射。
    vtkPiecewiseFunction *opacityTransferFunction = vtkPiecewiseFunction::New();
    opacityTransferFunction->AddPoint(10, 0.0);//灰度值及不透明度值
    opacityTransferFunction->AddPoint(50,0.1);
    opacityTransferFunction->AddPoint(200 ,0.1);
    opacityTransferFunction->AddPoint(2900,0.1);
    opacityTransferFunction->AddPoint(2950,0.8);
    opacityTransferFunction->AddPoint(3050,1);//不透明度值为1则为完全不透明
    opacityTransferFunction->ClampingOff();

    3、颜色映射函数
    颜色映射函数是设置灰度值与RGB颜色的映射。
    vtkColorTransferFunction *colorTransferFunction = vtkColorTransferFunction::New();
    colorTransferFunction->AddRGBPoint(0.0, 0.91, 0.65, 0.66); //灰度值及RGB颜色值
    colorTransferFunction->AddRGBPoint(30.0, 0.91, 0.65, 0.66);
    colorTransferFunction->AddRGBPoint(128.0, 0.91, 0.65, 0.66);
    colorTransferFunction->AddRGBPoint(1200.0, 0.43, 0.43, 0.43);
    colorTransferFunction->AddRGBPoint(1800.0, 0.43, 0.43, 0.43);
    colorTransferFunction->AddRGBPoint(2950, .9, 0.0, 0.0);
    colorTransferFunction->AddRGBPoint(3050, .9, 0.0, 0.0);
    colorTransferFunction->ClampingOff();

    4、梯度变换函数
    梯度变换函数设置灰度值变换的大小与不透明度之间的映射。
    vtkPiecewiseFunction *gradient=vtkPiecewiseFunction::New();
    gradient->AddPoint(50,.2);//灰度值变化梯度与不透明度的关系
    gradient->AddPoint(1500,.7);
    gradient->AddPoint(2000,.1);
    5、体数据属性设置
    vtkVolumeProperty *volumeProperty = vtkVolumeProperty::New();
    volumeProperty->SetColor(colorTransferFunction);//载入颜色映射函数
    volumeProperty->SetScalarOpacity(opacityTransferFunction);//载入不透明度映射
    volumeProperty->SetGradientOpacity(gradient);//载入梯度映射
    volumeProperty->ShadeOn();
    volumeProperty->SetInterpolationTypeToLinear();//采用线性插值
    6、光线投射函数设置及体绘制映射
    本程序采用合成体绘制函数:
    vtkVolumeRayCastCompositeFunction*compositeFunction=
    vtkVolumeRayCastCompositeFunction::New();
    vtkVolumeRayCastMapper *volumeMapper = vtkVolumeRayCastMapper::New();
    volumeMapper->SetVolumeRayCastFunction(compositeFunction);//载入体绘制方法
    volumeMapper->SetInput(append->GetOutput());//载入图像数据
    volumeMapper->SetSampleDistance(.5);
    vtkVolume *volume = vtkVolume::New();
    volume->SetMapper(volumeMapper);//设置映射
    volume->SetProperty(volumeProperty);//设置属性


  • 相关阅读:
    [CSS] Showing horizontal scrollbar always for the table
    [Angular Unit Testing] Testing Component methods
    [Angular Unit Testing] Testing Services with dependencies
    Win7下unetbootin-windows-585工具制作Ubuntu12.04 U盘启动盘
    一个外行谈移动互联网产品的生与死
    unity 距离某天还有多久
    UI线程与worker线程
    关于 unity3d securityexception no valid crossdomain policy available 的错误解决方法
    小窍门:变更Windows Azure Websites自带的node.exe版本
    Windows SVN变更发送邮件通知(JAVA实现)
  • 原文地址:https://www.cnblogs.com/yxnchinahlj/p/2013330.html
Copyright © 2020-2023  润新知