Ich verwende vtkResliceImageViewer vtk Bibliotheksklasse zur Anzeige DICOM files
. Bilder sind zu dunkel. Ich weiß nicht, ob ich es falsch benutze oder es ist ein Fehler (es gab ähnliche ungelöste Probleme, die vorher gepostet wurden: Correct display of DICOM images ITK-VTK (images too dark)).vtkResliceImageViewer Anzeige falsch (zu dunkel) dicom Bild
Ich benutze benutzerdefinierte DICOM
Datenleser und ich bin mir sicher, Daten sind in Ordnung. vtkImageViewer2
Klasse zeigt es korrekt an. Ich bin mir sicher, dass dies kein Problem mit Modality LUT
, Rescale Slope/Intercept
, VOI LUT
und window center/width
verbunden ist (Werte sind in Ordnung).
Ich füge Basiscodebeispiel an, das zwei Bilder produziert. Window center = 40
und width = 400
sind fest codiert und sind 100% für das getestete Bild geeignet. Render-Fenster mit rotem Hintergrund zeigt Bild mit vtkImageViewer2
Klasse und es ist völlig in Ordnung. Render-Fenster mit grünem Hintergrund Bild mit vtkResliceImageViewer
anzeigen und es ist zu dunkel. Wenn ich WindowLevel to -40
anstelle von 40 einstelle, sieht es in der Nähe des korrekt angezeigten Bildes aus.
Beide Klassen verwenden vtkImageMapToWindowLevelColors
, um die Fensterumwandlung anzuwenden. Ich habe versucht, SetOutputFormatToLuminance()
und PassAlphaToOutputOff()
Methoden dieser Klasse zu verwenden, aber das hat nicht geholfen.
Hat jemand das gleiche Problem und löste es irgendwie?
SeriesDataReader dataReader;
vtkSmartPointer<vtkImageData> data = dataReader.ReadSeriesData();
vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->SetSize(900, 900);
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->SetBackground(0, 1, 0);
renderer->ResetCamera();
renderWindow->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindow> renderWindow2 = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow2->SetSize(900, 900);
vtkSmartPointer<vtkRenderer> renderer2 = vtkSmartPointer<vtkRenderer>::New();
renderer2->SetBackground(1, 0, 0);
renderer2->ResetCamera();
renderWindow2->AddRenderer(renderer2);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor2 = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor2->SetRenderWindow(renderWindow2);
vtkSmartPointer<vtkImageViewer2> imageViewer = vtkSmartPointer<vtkImageViewer2>::New();
imageViewer->SetInputData(data);
imageViewer->SetColorLevel(40.0);
imageViewer->SetColorWindow(400.0);
imageViewer->SetupInteractor(renderWindowInteractor2);
imageViewer->SetRenderWindow(renderWindow2);
imageViewer->SetRenderer(renderer2);
imageViewer->Render();
imageViewer->GetRenderer()->ResetCamera();
imageViewer->Render();
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
vtkSmartPointer<vtkResliceImageViewer> resliceImageViewer = vtkSmartPointer<vtkResliceImageViewer>::New();
resliceImageViewer->SetupInteractor(renderWindowInteractor);
resliceImageViewer->SetRenderWindow(renderWindow);
resliceImageViewer->SetSliceOrientationToXY();
resliceImageViewer->SetRenderer(renderer);
resliceImageViewer->SetInputData(data);
resliceImageViewer->SetSliceOrientation(2);
resliceImageViewer->SetResliceModeToAxisAligned();
resliceImageViewer->SetColorLevel(40.0);
resliceImageViewer->SetColorWindow(400.0);
resliceImageViewer->SetResliceMode(0);
resliceImageViewer->GetRenderer()->ResetCamera();
resliceImageViewer->Render();
imageViewer->GetRenderWindow()->Render();
renderWindowInteractor2->Initialize();
imageViewer->GetRenderWindow()->Render();
renderWindowInteractor2->Start();
resliceImageViewer->GetRenderWindow()->Render();
renderWindowInteractor->Initialize();
resliceImageViewer->GetRenderWindow()->Render();
renderWindowInteractor->Start();
Haben Sie zu sehen versuchen, wenn ein Alpha-Kanal auf die Farbe nicht während des Prozesses verloren geht ?? – Destrif
Zwei häufige Gründe für zu dunkle Bilder sind: 1) (fehlende) Gammakorrektur und 2) Alpha-Blending. Wenn ich mir die Bilder auf der rechten Seite anschaue, wette ich auf Alpha-Blending: Ihr Alpha ist auf die Intensität eingestellt und auf den hellblauen Hintergrund auf Null. Versuchen Sie Alpha-Blending zu deaktivieren, wenn Sie können – Destrif
Für vtkImageData ich festlegen: AllocateScalars (VTK_DOUBLE, 1). Bilddaten bestehen aus einer Komponente mit doppelten Werten pro Pixel, so dass kein Alpha-Kanal vorhanden ist. Die gleichen Daten werden in vtkImageViewer2 ordnungsgemäß angezeigt. – Springfield762