2016-07-06 2 views
1

Я использую класс библиотеки vtkResliceImageViewer vtk для отображения DICOM files. Изображения слишком темные. Я не знаю, использую ли я его неправильно или это ошибка (была аналогичная нерешенная проблема, опубликованная ранее: Correct display of DICOM images ITK-VTK (images too dark)).vtkResliceImageViewer отображает неправильное (слишком темное) изображение dicom

Я использую пользовательский DICOM считыватель данных, и я уверен, что данные в порядке. vtkImageViewer2 класс отображает его правильно. Я уверен, что это не проблема, связанная с Modality LUT, Rescale Slope/Intercept, VOI LUT и window center/width (значения в порядке).

Прилагаю пример базового кода, производя два изображения. Window center = 40 и width = 400 жестко запрограммированы и на 100% соответствуют тестируемому изображению. Окно рендеринга с красным фоном отображает изображение, используя класс vtkImageViewer2, и это прекрасно. Окно рендеринга с зеленым фоном отображает изображение с использованием vtkResliceImageViewer, и слишком темно. Когда я установил WindowLevel to -40 вместо 40, он будет близок к соответствующему отображаемому изображению.

В обоих случаях используется vtkImageMapToWindowLevelColors, чтобы применить преобразование окна. Я пробовал использовать методы SetOutputFormatToLuminance() и PassAlphaToOutputOff() этого класса, но это не помогло.

Есть ли у кого-то такая же проблема и каким-то образом ее решить?

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

Вы попробуйте, чтобы увидеть, если альфа-канал по цвету не теряется в процессе ?? – Destrif

+0

Две распространенные причины слишком темных изображений: 1) (отсутствие) гамма-коррекции и 2) альфа-смешивание. Глядя на изображения справа, я поставил бы на альфа-смешение: ваша альфа настроена на интенсивность и равна нулю для светло-голубого фона. Попробуйте отключить альфа-смешение, если вы можете – Destrif

+0

Для vtkImageData я устанавливаю: AllocateScalars (VTK_DOUBLE, 1). Данные изображения состоят из одного компонента двойных значений на пиксель, поэтому нет альфа-канала. Эти же данные отображаются правильно в vtkImageViewer2. – Springfield762

ответ

1

Я решил эту проблему. Для правильного отображения изображений с комментарием преобразования wl/ww или удаления строки 327 в функции void vtkResliceImageViewer :: InstallPipeline().

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

Смежные вопросы