添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
千杯不醉的豆腐  ·  搜索结果·  8 月前    · 
谈吐大方的楼房  ·  讯飞链BaaS平台·  9 月前    · 
风流的开水瓶  ·  ABAP ...·  1 年前    · 


本文实现了 Python C++ 版本 的 四视图,横断面,冠状面,矢状面,3D

主要功能:

1:可以通过进度条换层
2:鼠标双击放大/缩小窗口
3:按住鼠标中键拖动图像
4:鼠标右键滑动放大/缩小图像

效果:

三维重建 医学图像的可视化 PyQt Python VTK 四视图(横断面,冠状面,矢状面,3D)_进度条

视频:


small_python_vtk_4window


这里主要讲一下体绘制:

1.固定点光线投影算法

vtkFixedPointVolumeRayCastMapper

该类能够实现基于Alpha合成的体绘制方法和最大密度投影体绘制方法,能够支持任意类型或者独立多元数据。
例如,当输入为二元独立数据时,第一源数据用于颜色映射,而第二元作为不透明度映射。该类使用了空间跳跃技术来加速体绘制的渲染过程,而在内部计算时,统一使用了float数据类型。
vtkFixedPointVolumeRayCastMapper与vtkVolumeRayCastMapper对比两个类的使用方法基本一致,都支持设置光线采样步长、图像采样距离、自动调整图像采样距离等操作。

vtkFixedPointVolumeRayCastMapper

只支持基于Alpha合成的体绘制方法和最大密度体绘制方法,

光线投影+最大密度投影+等值面法

void SetBlendModeToComposite();
void SetBlendModeToMaximumIntensity();
void SetBlendModeToMinimumIntensity();
void SetBlendModeToAddictive();

2、基于GPU加速的光线投射体会自算法

vtkGPUVolumeRayCastMapper类实现了基于GPU加速光线投影体绘制算法。该类的使用方法与上面各类基本一致。同样可以实现光线采样步长、图像采样距离、自动调整图像采样距离等。

vtkSmartPointer<vtkGPUVolumeRayCastMapper> volumeMapper =
		vtkSmartPointer<vtkGPUVolumeRayCastMapper>::New();
	volumeMapper->SetInputData(reader->GetOutput());;
	volumeMapper->SetSampleDistance(volumeMapper->GetSampleDistance() / 2);	//设置光线采样距离

3.样例:

分别:

1.MIP
2.CompositeRamp
3.CompositeShadeRamp
4.CT_Skin
5.CT_Bone
6.CT_Muscle
7.RGB_Composite

// Create our volume and mapper
  vtkNew<vtkVolume> volume;
  vtkNew<vtkFixedPointVolumeRayCastMapper> mapper;
  mapper->SetInputConnection(reader->GetOutputPort());
   vtkNew<vtkColorTransferFunction> colorFun;
  vtkNew<vtkPiecewiseFunction> opacityFun;
  // Create the property and attach the transfer functions
  vtkNew<vtkVolumeProperty> property;
  property->SetIndependentComponents(independentComponents);
  property->SetColor(colorFun);
  property->SetScalarOpacity(opacityFun);
  property->SetInterpolationTypeToLinear();
  // connect up the volume to the property and the mapper
  volume->SetProperty(property);
  volume->SetMapper(mapper);
  // Depending on the blend type selected as a command line option,
  // adjust the transfer function
  switch (blendType)
  // MIP
  // Create an opacity ramp from the window and level values.
  // Color is white. Blending is MIP.
  case 0:
    colorFun->AddRGBSegment(0.0, 1.0, 1.0, 1.0, 255.0, 1.0, 1.0, 1.0);
    opacityFun->AddSegment(opacityLevel - 0.5 * opacityWindow, 0.0,
                           opacityLevel + 0.5 * opacityWindow, 1.0);
    mapper->SetBlendModeToMaximumIntensity();
    break;
  // CompositeRamp
  // Create a ramp from the window and level values. Use compositing
  // without shading. Color is a ramp from black to white.
  case 1:
    colorFun->AddRGBSegment(opacityLevel - 0.5 * opacityWindow, 0.0, 0.0, 0.0,
                            opacityLevel + 0.5 * opacityWindow, 1.0, 1.0, 1.0);
    opacityFun->AddSegment(opacityLevel - 0.5 * opacityWindow, 0.0,
                           opacityLevel + 0.5 * opacityWindow, 1.0);
    mapper->SetBlendModeToComposite();
    property->ShadeOff();
    break;
  // CompositeShadeRamp
  // Create a ramp from the window and level values. Use compositing
  // with shading. Color is white.
  case 2:
    colorFun->AddRGBSegment(0.0, 1.0, 1.0, 1.0, 255.0, 1.0, 1.0, 1.0);
    opacityFun->AddSegment(opacityLevel - 0.5 * opacityWindow, 0.0,
                           opacityLevel + 0.5 * opacityWindow, 1.0);
    mapper->SetBlendModeToComposite();
    property->ShadeOn();
    break;
  // CT_Skin
  // Use compositing and functions set to highlight skin in CT data
  // Not for use on RGB data
  case 3:
    colorFun->AddRGBPoint(-3024, 0, 0, 0, 0.5, 0.0);
    colorFun->AddRGBPoint(-1000, .62, .36, .18, 0.5, 0.0);
    colorFun->AddRGBPoint(-500, .88, .60, .29, 0.33, 0.45);
    colorFun->AddRGBPoint(3071, .83, .66, 1, 0.5, 0.0);
    opacityFun->AddPoint(-3024, 0, 0.5, 0.0);
    opacityFun->AddPoint(-1000, 0, 0.5, 0.0);
    opacityFun->AddPoint(-500, 1.0, 0.33, 0.45);
    opacityFun->AddPoint(3071, 1.0, 0.5, 0.0);
    mapper->SetBlendModeToComposite();
    property->ShadeOn();
    property->SetAmbient(0.1);
    property->SetDiffuse(0.9);
    property->SetSpecular(0.2);
    property->SetSpecularPower(10.0);
    property->SetScalarOpacityUnitDistance(0.8919);
    break;
  // CT_Bone
  // Use compositing and functions set to highlight bone in CT data
  // Not for use on RGB data
  case 4:
    colorFun->AddRGBPoint(-3024, 0, 0, 0, 0.5, 0.0);
    colorFun->AddRGBPoint(-16, 0.73, 0.25, 0.30, 0.49, .61);
    colorFun->AddRGBPoint(641, .90, .82, .56, .5, 0.0);
    colorFun->AddRGBPoint(3071, 1, 1, 1, .5, 0.0);
    opacityFun->AddPoint(-3024, 0, 0.5, 0.0);
    opacityFun->AddPoint(-16, 0, .49, .61);
    opacityFun->AddPoint(641, .72, .5, 0.0);
    opacityFun->AddPoint(3071, .71, 0.5, 0.0);
    mapper->SetBlendModeToComposite();
    property->ShadeOn();
    property->SetAmbient(0.1);
    property->SetDiffuse(0.9);
    property->SetSpecular(0.2);
    property->SetSpecularPower(10.0);
    property->SetScalarOpacityUnitDistance(0.8919);
    break;
  // CT_Muscle
  // Use compositing and functions set to highlight muscle in CT data
  // Not for use on RGB data
  case 5:
    colorFun->AddRGBPoint(-3024, 0, 0, 0, 0.5, 0.0);
    colorFun->AddRGBPoint(-155, .55, .25, .15, 0.5, .92);
    colorFun->AddRGBPoint(217, .88, .60, .29, 0.33, 0.45);
    colorFun->AddRGBPoint(420, 1, .94, .95, 0.5, 0.0);
    colorFun->AddRGBPoint(3071, .83, .66, 1, 0.5, 0.0);
    opacityFun->AddPoint(-3024, 0, 0.5, 0.0);
    opacityFun->AddPoint(-155, 0, 0.5, 0.92);
    opacityFun->AddPoint(217, .68, 0.33, 0.45);
    opacityFun->AddPoint(420, .83, 0.5, 0.0);
    opacityFun->AddPoint(3071, .80, 0.5, 0.0);
    mapper->SetBlendModeToComposite();
    property->ShadeOn();
    property->SetAmbient(0.1);
    property->SetDiffuse(0.9);
    property->SetSpecular(0.2);
    property->SetSpecularPower(10.0);
    property->SetScalarOpacityUnitDistance(0.8919);
    break;
  // RGB_Composite
  // Use compositing and functions set to highlight red/green/blue regions
  // in RGB data. Not for use on single component data
  case 6:
    opacityFun->AddPoint(0, 0.0);
    opacityFun->AddPoint(5.0, 0.0);
    opacityFun->AddPoint(30.0, 0.05);
    opacityFun->AddPoint(31.0, 0.0);
    opacityFun->AddPoint(90.0, 0.0);
    opacityFun->AddPoint(100.0, 0.3);
    opacityFun->AddPoint(110.0, 0.0);
    opacityFun->AddPoint(190.0, 0.0);
    opacityFun->AddPoint(200.0, 0.4);
    opacityFun->AddPoint(210.0, 0.0);
    opacityFun->AddPoint(245.0, 0.0);
    opacityFun->AddPoint(255.0, 0.5);
    mapper->SetBlendModeToComposite();
    property->ShadeOff();
    property->SetScalarOpacityUnitDistance(1.0);
    break;
  default:
    vtkGenericWarningMacro("Unknown blend type.");
    break;
  // Set the default window size
  renWin->SetSize(600, 600);
  renWin->SetWindowName("FixedPointVolumeRayCastMapperCT");
  renWin->Render();
  // Add the volume to the scene
  renderer->AddVolume(volume);
  renderer->ResetCamera();
  renderer->SetBackground(colors->GetColor3d("SlateGray").GetData());
  auto camera = renderer->GetActiveCamera();
  camera->SetPosition(56.8656, -297.084, 78.913);
  camera->SetFocalPoint(109.139, 120.604, 63.5486);
  camera->SetViewUp(-0.00782421, -0.0357807, -0.999329);
  camera->SetDistance(421.227);
  camera->SetClippingRange(146.564, 767.987);
  // interact with data
  renWin->Render();
  iren->Start();
.net 5性能 net性能优化

从2004年底开始接触C#到现在也有2年多的时间了,因为有C++方面的基础,对于C#,我习惯于与C++对比。现在总结一些.NET方面的性能优化方面的经验,算是对这两年多的.NET工作经历的总结。     由于使用C#时间不长,欢迎各高手补充。     标有 ★ 表示特别重要,会严重影响性能,程序中不应

java 飞机游戏素材 java飞机类

1 总体需求分析1.1 类1、主类2、我方飞机类3、线程类2.2 效果图2 实现2.1 飞机类 MyPlane飞机类包括以下参数:位置x、y速度vx、vy图片图标myicom:设置为飞机的图片 飞机类包括以下方法:有参构造方法:初始化x、y,保证第一次绘制飞机能够有坐标public MyPlane(int x, int y) { this.x = x; this.y =