转kidwei 最简单但是却最有用的vtk三维重建代码

转载来源:http://blog.163.com/adslxk@126/blog/static/100610671200911169232935/

 

最近无聊,琢磨出了如何通过已有的内存三维体数据场进行三维重建的vtk实现。以抛砖引玉:

const int dim=50;

void main()

{

//手动创建一个内存体数据

unsigned short data[dim][dim][dim];

for (int i=0;i<dim;i++)

for (int j=0;j<dim;j++)

for (int k=0;k<dim;k++)

   data[i][j][k]=1000;

  

//根据内存数据data指针开始创建vtk数据,数据来源也可以是原有系统的三维数据,只要给出数据地址就可以

vtkUnsignedShortArray *array=vtkUnsignedShortArray::New();

array->SetVoidArray(data,dim*dim*dim,1);

//设置三维数据场格式

vtkImageData *imageData=vtkImageData::New();

imageData->GetPointData()->SetScalars(array);

imageData->SetDimensions(dim, dim, dim);//三维数据场的x、y、z方向上的体素个数

imageData->SetScalarTypeToUnsignedShort();//数据类型需要和三维数据场的实际类型一致

imageData->SetSpacing(1,1,1);//每个体素的大小

imageData->SetOrigin(0,0,0);

vtkPiecewiseFunction* opacityTransferFunction=vtkPiecewiseFunction::New();

opacityTransferFunction->AddPoint(1000,1.0);

   opacityTransferFunction->ClampingOff();

vtkColorTransferFunction *colorTransferFunction=vtkColorTransferFunction::New(); colorTransferFunction->AddRGBPoint(1000.0, 0.8, 0.8, 0.8);

vtkVolumeProperty * volumeProperty=vtkVolumeProperty::New();

volumeProperty->SetColor(colorTransferFunction);

volumeProperty->SetScalarOpacity(opacityTransferFunction);

volumeProperty->SetInterpolationTypeToLinear();

vtkVolumeRayCastCompositeFunction* compositeFunction=vtkVolumeRayCastCompositeFunction::New();

vtkVolumeRayCastMapper *volumeMapper=vtkVolumeRayCastMapper::New();

volumeMapper->SetVolumeRayCastFunction(compositeFunction);

volumeMapper->SetInput(imageData);

vtkVolume* volume=vtkVolume::New();

volume->SetMapper(volumeMapper);

volume->SetProperty(volumeProperty);

vtkRenderer* ren=vtkRenderer::New();

ren->AddVolume(volume);

ren->SetBackground(0,0,1);

vtkRenderWindow* renwin=vtkRenderWindow::New();

renwin->AddRenderer(ren);

vtkRenderWindowInteractor* iren=vtkRenderWindowInteractor::New();

iren->SetRenderWindow(renwin);

renwin->Render();

iren->Start();

}

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值