VTK图像切片到体积(C ++)

时间:2016-03-10 09:34:22

标签: vtk qvtkwidget

我正在尝试显示在QT5 + VTK 7.0.0中组成的卷片。但是,我不知道为什么使用 vtkImageSlice + vtkImageStack 只显示一个切片而不是五个切片。这是我正在使用它的代码:

/*This function receives an ultrasound image from network.
The function is working fine if we display the 2D images,
but I want to stack a bunch of images in a volume.
The imageStack at the end always keeps one image only.*/
void WDisplay::Disp(QImage b)
{
    // qimagevtk is a vtkSmartPointer<vtkQImageToImageSource> type
    qimagevtk->SetQImage(&b);
    qimagevtk->Update();
    // imageSliceMapper is a vtkSmartPointer<vtkImageSliceMapper> type
    imageSliceMapper->SetInputData(qimagevtk->GetOutput());
    // imageSliceMapper is a vtkSmartPointer<vtkImageSlice> type
    imageSlice->SetMapper(imageSliceMapper);
    imageSlice->GetProperty()->SetOpacity(.5);

    // Stack
    // vtkSmartPointer<vtkImageStack>
    imageStack->AddImage(imageSlice);
    if(!(idx<5)) //idx initialized at zero in the constructor
    {
        // m_renderer ---> vtkRenderer
        m_renderer->AddViewProp(imageStack);
        m_renderer->Render();
        // wvtk ---> QVTKWidget
        wvtk->GetInteractor()->Render();
        idx = 0;
    }
    else
        idx++;
}

这是我运行函数时得到的输出(截图): screenshot

  

每个vtk对象都是使用 vtkSmartPointer&lt; vtk对象类型&gt; :: New()在构造函数中创建的。我希望有人能帮助我。谢谢。

1 个答案:

答案 0 :(得分:0)

vtkImageStack中的切片位于相同的物理位置,想想photoshop中的图层。因此,您需要为每个图像切片分配图层编号。

查看vtkImageProperty::SetLayerNumber(int)vtkImageStack::SetActiveLayer(int)

创建一个不同的查找表来映射每个切片,或者更改不透明度,以便您可以看到堆栈中的切片。

让读取您代码的每个人都受宠,并将if(!(idx<5))更改为if(idx>=5)

HTH,

米罗