轉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();

}

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章