Я использую класс библиотеки 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()
этого класса, но это не помогло.
Есть ли у кого-то такая же проблема и каким-то образом ее решить?
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();
Вы попробуйте, чтобы увидеть, если альфа-канал по цвету не теряется в процессе ?? – Destrif
Две распространенные причины слишком темных изображений: 1) (отсутствие) гамма-коррекции и 2) альфа-смешивание. Глядя на изображения справа, я поставил бы на альфа-смешение: ваша альфа настроена на интенсивность и равна нулю для светло-голубого фона. Попробуйте отключить альфа-смешение, если вы можете – Destrif
Для vtkImageData я устанавливаю: AllocateScalars (VTK_DOUBLE, 1). Данные изображения состоят из одного компонента двойных значений на пиксель, поэтому нет альфа-канала. Эти же данные отображаются правильно в vtkImageViewer2. – Springfield762