VTK读取dcm文件(医学影像文件)的一个核心的知识点就是,窗宽窗位。
知识点:
窗宽/窗位的概念
窗宽是图像显示的灰度范围。一般显示器的灰度范围为256级,而医学图像的灰度范围则远远大于该范围,因此通过显示器显示时不能显示所有灰度级,需要使用窗宽来定义欲显示的灰度范围。灰度值高于该范围的最大值时:白影。低于:黑影。比如,窗宽200,窗位100,则可视范围:0-200;窗位500,可视范围:400-600
QDialog *dlg = new QDialog();
dlg->resize(600, 600);
vtkSmartPointer<vtkImageViewer2> imageView = vtkSmartPointer<vtkImageViewer2>::New();
vtkSmartPointer<vtkRenderer> render = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkGenericOpenGLRenderWindow> renderwindow =
vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
QVTKOpenGLWidget *vtkWidget = new QVTKOpenGLWidget(dlg);
vtkWidget->resize(600, 600);
vtkWidget->SetRenderWindow(renderwindow);
vtkWidget->GetRenderWindow()->AddRenderer(render);
vtkSmartPointer<vtkDICOMImageReader> reader = vtkSmartPointer<vtkDICOMImageReader>::New();
reader->SetFileName("C:\\Users\\admin\\Desktop\\VTK\\0000.dcm");
reader->Update();
imageView->SetInputConnection(reader->GetOutputPort());
imageView->SetRenderWindow(vtkWidget->GetRenderWindow());
imageView->SetRenderer(render);
imageView->SetupInteractor(vtkWidget->GetRenderWindow()->GetInteractor());
imageView->SetColorLevel(11414); //核心部分,如果不设置的话。可能会出现白色或者黑色
imageView->SetColorWindow(21822);
qDebug() << "colorLevel : "<<imageView->GetColorLevel()<<" colorWindow:"<<imageView->GetColorWindow();
render->ResetCamera();
render->DrawOn();
vtkWidget->GetRenderWindow()->Render();