VTK 16位图像体绘

#include “vtkRenderer.h”
#include “vtkRenderWindow.h”
#include “vtkRenderWindowInteractor.h”
#include “vtkPiecewiseFunction.h”
#include “vtkColorTransferFunction.h”
#include “vtkVolumeProperty.h”
#include “vtkVolumeRayCastIsosurfaceFunction.h”
#include “vtkVolumeRayCastCompositeFunction.h”
#include “vtkVolumeRayCastMapper.h”
#include “vtkVolume.h”
#include “vtkImageCast.h”
#include “vtkVolume16Reader.h”

int main()
{
vtkRenderer *aRender = vtkRenderer::New();
vtkRenderWindow *renWin = vtkRenderWindow::New();
renWin->AddRenderer(aRender);
vtkRenderWindowInteractor *iRen = vtkRenderWindowInteractor::New();
iRen->SetRenderWindow(renWin);

vtkVolume16Reader *reader = vtkVolume16Reader::New();
//初始化16位图像类型,前缀等
reader->SetDataDimensions (256,256);//设数据范围大小
reader->SetImageRange (1,30);//读取图像的文件名 .1–.123
reader->SetDataByteOrderToLittleEndian();//字节格式(字节顺序),如果是littleEndian要倒过来
reader->SetFilePrefix (“E://CT”);//设置文件目录
reader->SetDataSpacing (1, 1, 6);//像素间的间隔

vtkImageCast *readerImageCast = vtkImageCast::New();
	readerImageCast->SetInput((vtkDataObject *)reader->GetOutput());
	readerImageCast->SetOutputScalarTypeToUnsignedShort();

// readerImageCast->ClampOverflowOn();

vtkPiecewiseFunction *opacityTransferFunction = vtkPiecewiseFunction::New();
	opacityTransferFunction->AddPoint(200, 0.0);
    opacityTransferFunction->AddPoint(590, 0.0);
	opacityTransferFunction->AddPoint(1200, 0.0);
    opacityTransferFunction->AddPoint(1300, 0.0);
    opacityTransferFunction->AddPoint(2000, 0.4);
    opacityTransferFunction->AddPoint(4096, 1);
	opacityTransferFunction->ClampingOn();	
	
vtkColorTransferFunction *colorTransferFunction = vtkColorTransferFunction::New();
  colorTransferFunction->AddRGBPoint(0.0, 0.5, 0.0, 0.0);
  colorTransferFunction->AddRGBPoint(500.0, 1.0, 0.5, 0.23);//皮肤
  colorTransferFunction->AddRGBPoint(1280, 1, 1, 0.96);//骨骼
  colorTransferFunction->AddRGBPoint(2550.0, 1, 1, 1);

vtkVolumeProperty *volumeProperty = vtkVolumeProperty::New();
  volumeProperty->SetColor(colorTransferFunction);
  volumeProperty->SetScalarOpacity(opacityTransferFunction);
  volumeProperty->ShadeOn();
  volumeProperty->SetInterpolationTypeToLinear();
  volumeProperty->SetAmbient(0.2);
  volumeProperty->SetDiffuse(0.9);
  volumeProperty->SetSpecular(0.2);
  volumeProperty->SetSpecularPower(10);	

vtkVolumeRayCastCompositeFunction *compositeFunction = vtkVolumeRayCastCompositeFunction::New();
vtkVolumeRayCastIsosurfaceFunction *RayIso=vtkVolumeRayCastIsosurfaceFunction::New();
  RayIso->SetIsoValue  (12000) ;
  
vtkVolumeRayCastMapper *volumeMapper = vtkVolumeRayCastMapper::New();
  volumeMapper->SetVolumeRayCastFunction(RayIso);
  volumeMapper->SetInputConnection(reader->GetOutputPort());


vtkVolume *volume = vtkVolume::New();
	  volume->SetMapper(volumeMapper);
	  volume->SetProperty(volumeProperty);
	  volume->RotateX(130);

// volume->RotateY(35);
// volume->RotateZ(-35);

aRender->AddVolume(volume);
aRender->SetBackground(1, 1, 1);

renWin->SetSize(600, 600);
renWin->Render();

iRen->Initialize();
renWin->Render();
iRen->Start();

aRender->Delete();
renWin->Delete();
iRen->Delete();
reader->Delete();
opacityTransferFunction->Delete();
colorTransferFunction->Delete();
volumeMapper->Delete();
volumeProperty->Delete();
compositeFunction->Delete();
volume->Delete();

return 0;

}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值