0

QT5+VTK 7.0.0 で構成されたボリューム スライスを表示しようとしています。ただし、vtkImageSlice + vtkImageStackを使用しても、 5つのスライスではなく1 つのスライスしか表示されない理由がわかりません。これは私が使用しているコードです:

/*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++;
}

これは、関数を実行したときに得た出力 (スクリーンショット) です。 スクリーンショット

すべての vtk オブジェクトは、vtkSmartPointer< vtk object type >::New()を使用してコンストラクターで作成されました。誰でも私を助けてくれることを願っています。ありがとうございました。

4

1 に答える 1

1

vtkImageStack のスライスは物理的に同じ場所にあります。Photoshop のレイヤーと考えてください。したがって、各画像スライスにレイヤー番号を割り当てる必要があります。

vtkImageProperty::SetLayerNumber(int)vtkImageStack::SetActiveLayer(int)を見てください。

スライスごとにマップする別のルックアップ テーブルを作成するか、不透明度を変更して、スタック内のスライスが透けて見えるようにします。

そして、あなたのコードを読んでくれるすべての人に好意を持ってもらいif(!(idx<5))if(idx>=5).

HTH、

ミロ

于 2016-03-10T19:12:37.737 に答える