我正在使用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();
你有沒有嘗試看看,如果顏色的alpha通道過程中,不會丟失? – Destrif
太暗圖像的兩個常見原因是:1)(缺少)伽瑪校正,以及2)阿爾法混合。看看右側的圖像,我會打賭alpha混合:你的阿爾法被設置爲強度,爲淡藍色背景爲零。嘗試禁用alpha混合,如果你可以 – Destrif
對於vtkImageData我設置:AllocateScalars(VTK_DOUBLE,1)。圖像數據由每個像素一個分量的雙倍值組成,因此不存在Alpha通道。相同的數據在vtkImageViewer2中正確顯示。 – Springfield762