1

MetaImageReader を使用して .mhd ファイルからヘッダーを読み取ることにより、医用画像を .raw 形式で表示することになっている単純なファイルがあります。私は VTK にあまり詳しくないので、2 つの異なるコード スニペットを試してみました (実際には、それらは vtk とキットウェアの Web サイトの例です)。それらのどれも機能しませんでした。私は VTK を初めて使用するので、これが 3D 画像を表示する正しい方法であるかどうかはわかりません。私の .mhd ファイルは、画像が 3 次元であると教えてくれるからです。

void render1() {
// read input image
vtkSmartPointer<vtkMetaImageReader> reader = vtkSmartPointer<vtkMetaImageReader>::New();
reader->SetFileName("header.mhd");
reader->Update();

vtkSmartPointer<vtkImageViewer2> viewer = vtkSmartPointer<vtkImageViewer2>::New();
viewer->SetInputConnection(reader->GetOutputPort());

// render window
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();

viewer->SetupInteractor(renderWindowInteractor);
viewer->GetRenderer()->ResetCamera();

renderWindowInteractor->Initialize();
renderWindowInteractor->Start();
}

リーダーを JPEGReader などに変更して JPEG ファイルをロードすると、画像が表示されます。私が試した別の例は次のとおりです。

void render2() {
// read input image
vtkSmartPointer<vtkMetaImageReader> reader = vtkSmartPointer<vtkMetaImageReader>::New();
reader->SetFileName("header.mhd");
reader->Update();

// Visualize
vtkSmartPointer<vtkImageActor> actor = vtkSmartPointer<vtkImageActor>::New();
actor->GetMapper()->SetInputConnection(reader->GetOutputPort());

vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);
renderer->ResetCamera();

vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);

vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
vtkSmartPointer<vtkInteractorStyleImage> style = vtkSmartPointer<vtkInteractorStyleImage>::New();

renderWindowInteractor->SetInteractorStyle(style);
renderWindowInteractor->SetRenderWindow(renderWindow);
renderWindowInteractor->Initialize();
renderWindowInteractor->Start();
}

エラーは発生しません。背景が黒いウィンドウだけが表示されます。ウィンドウをクリックしてマウスを動かすと、マウスの移動量に応じて、ウィンドウの中央にある四角形が黒から白のグレースケールで表示されます。

よくある単純な間違いを犯したように思えますが、キットウェア会社自体のサンプルコードを使用しているため、ここで立ち往生しています。

4

0 に答える 0