level 1
wzddzy123
楼主
各位大神求帮个忙,我现在需要做一个交互,勾画区域之后,把相应的ct图像数据转成体数据,然后渲染出来。我现在想做个简单的,就是先拿一张ct图像进行渲染,而且是渲染成一个体数据,请问怎么做?
目前我写的代码是这样的:
vtkDICOMImageReader *Imagereader = vtkDICOMImageReader::New();
Imagereader->SetDirectoryName("C:/Users/DZY/Desktop/123");
Imagereader->SetDataScalarTypeToShort();
Imagereader->Update();
vtkImageData *VolData = vtkImageData::New();
VolData = Imagereader->GetOutput();
VolData->SetOrigin(0.0, 0.0, 0.0);
vtkSmartVolumeMapper *mapper = vtkSmartVolumeMapper::New();
mapper->SetInputData(VolData);
mapper->SetBlendModeToComposite();
vtkColorTransferFunction *colorFun = vtkColorTransferFunction::New();
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);
vtkVolumeProperty *volproperty = vtkVolumeProperty::New();
volproperty->SetInterpolationTypeToLinear();
volproperty->ShadeOn();
volproperty->SetAmbient(0.1);
volproperty->SetDiffuse(0.9);
volproperty->SetSpecular(0.2);
volproperty->SetSpecularPower(10.0);
//volproperty->SetScalarOpacityUnitDistance(0.8919);
vtkVolume *volume = vtkVolume::New();
volume->SetProperty(volproperty);
volume->SetMapper(mapper);
/********************添加坐标系**************/
vtkAxesActor* axes = vtkAxesActor::New();
axes->GetXAxisCaptionActor2D()->GetProperty()->SetColor(1.0, 0.0, 0.0);
axes->GetYAxisCaptionActor2D()->GetProperty()->SetColor(0.0, 2.0, 0.0);
axes->GetZAxisCaptionActor2D()->GetProperty()->SetColor(0.0, 0.0, 3.0);
axes->SetTotalLength(100, 100, 100);
vtkRenderer *render = vtkRenderer::New();
render->AddVolume(volume);
render->AddActor(axes);
render->ResetCamera();
render->SetBackground(1.0, 1.0, 1.0);
vtkRenderWindow *renWin = vtkRenderWindow::New();
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
renWin->AddRenderer(render);
renWin->SetSize(640, 480);
renWin->Render();
vtkInteractorStyleTrackballCamera *style =
vtkInteractorStyleTrackballCamera::New();
iren->SetInteractorStyle(style);
iren->SetRenderWindow(renWin);
//iren->Initialize();
iren->Start();
//DSR_ReleaseVolumeData();
//DSR_ReleseDicomSeriesReaderObj();
return 0;
效果是这样的,上面能看见星星点点的点,但仔细看,就像把整个图片给栅格化了,勉强能看出来ct切片的轮廓。这个效果很奇怪啊,我用的是vtkSmartVolumeMapper,如果用vtkVolumeRayCastMapper就什么都不显示了

我渲染两张就可以出现了,请问这两个mapper有什么区别吗,而且为什么会有点的效果

2017年09月04日 03点09分
1
目前我写的代码是这样的:
vtkDICOMImageReader *Imagereader = vtkDICOMImageReader::New();
Imagereader->SetDirectoryName("C:/Users/DZY/Desktop/123");
Imagereader->SetDataScalarTypeToShort();
Imagereader->Update();
vtkImageData *VolData = vtkImageData::New();
VolData = Imagereader->GetOutput();
VolData->SetOrigin(0.0, 0.0, 0.0);
vtkSmartVolumeMapper *mapper = vtkSmartVolumeMapper::New();
mapper->SetInputData(VolData);
mapper->SetBlendModeToComposite();
vtkColorTransferFunction *colorFun = vtkColorTransferFunction::New();
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);
vtkVolumeProperty *volproperty = vtkVolumeProperty::New();
volproperty->SetInterpolationTypeToLinear();
volproperty->ShadeOn();
volproperty->SetAmbient(0.1);
volproperty->SetDiffuse(0.9);
volproperty->SetSpecular(0.2);
volproperty->SetSpecularPower(10.0);
//volproperty->SetScalarOpacityUnitDistance(0.8919);
vtkVolume *volume = vtkVolume::New();
volume->SetProperty(volproperty);
volume->SetMapper(mapper);
/********************添加坐标系**************/
vtkAxesActor* axes = vtkAxesActor::New();
axes->GetXAxisCaptionActor2D()->GetProperty()->SetColor(1.0, 0.0, 0.0);
axes->GetYAxisCaptionActor2D()->GetProperty()->SetColor(0.0, 2.0, 0.0);
axes->GetZAxisCaptionActor2D()->GetProperty()->SetColor(0.0, 0.0, 3.0);
axes->SetTotalLength(100, 100, 100);
vtkRenderer *render = vtkRenderer::New();
render->AddVolume(volume);
render->AddActor(axes);
render->ResetCamera();
render->SetBackground(1.0, 1.0, 1.0);
vtkRenderWindow *renWin = vtkRenderWindow::New();
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
renWin->AddRenderer(render);
renWin->SetSize(640, 480);
renWin->Render();
vtkInteractorStyleTrackballCamera *style =
vtkInteractorStyleTrackballCamera::New();
iren->SetInteractorStyle(style);
iren->SetRenderWindow(renWin);
//iren->Initialize();
iren->Start();
//DSR_ReleaseVolumeData();
//DSR_ReleseDicomSeriesReaderObj();
return 0;
效果是这样的,上面能看见星星点点的点,但仔细看,就像把整个图片给栅格化了,勉强能看出来ct切片的轮廓。这个效果很奇怪啊,我用的是vtkSmartVolumeMapper,如果用vtkVolumeRayCastMapper就什么都不显示了

我渲染两张就可以出现了,请问这两个mapper有什么区别吗,而且为什么会有点的效果