2016-07-06 27 views
1

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?

enter image description here

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(); 
+0

Haben Sie zu sehen versuchen, wenn ein Alpha-Kanal auf die Farbe nicht während des Prozesses verloren geht ?? – Destrif

+0

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

+0

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

Antwort

1

löste ich diese Frage. Um die Bilder mit wl/ww-Transformation richtig anzuzeigen, müssen Sie die Zeile 327 in der Funktion void vtkResliceImageViewer :: InstallPipeline() auskommentieren oder entfernen.

Linie 327: this->WindowLevel->SetLookupTable(this->GetLookupTable());