如何恢复VTK的亮度和对比度?

时间:2013-06-26 07:10:34

标签: vtk dicom brightness contrast

我正在使用Qt + VTK开发一个C ++应用程序。实际上,我有一个QVTKWidget,用于显示DICOM图像。我使用 vtkImageViewer2 vtkInteractorStyleImage ,因此我可以通过鼠标点击图像来改变图像的亮度和对比度,同时按下左键。

但是,我希望启用一个按钮,以恢复原始值的亮度和对比度。我做了一些研究,但是在文档中找不到任何关于它的函数,也没有找到任何可以在运行时更改的亮度和对比度值。

我希望有人可以提供帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

按照this示例,我已经能够将此代码添加到:

void MainWindow::on_luminosityResetButton_clicked()
{
    vtkSmartPointer<vtkImageShiftScale> shiftScaleFilter = 
    vtkSmartPointer<vtkImageShiftScale>::New();
    shiftScaleFilter->SetOutputScalarTypeToUnsignedChar();
    #if VTK_MAJOR_VERSION <= 5
        shiftScaleFilter->SetInputConnection(imageData->GetProducerPort());
    #else
        shiftScaleFilter->SetInputData(imageData);
    #endif
    shiftScaleFilter->SetShift(0);
    shiftScaleFilter->SetScale(0);
    shiftScaleFilter->Update();

    // Create actors
    vtkSmartPointer<vtkImageSliceMapper> originalSliceMapper = vtkSmartPointer<vtkImageSliceMapper>::New();
    #if VTK_MAJOR_VERSION <= 5
        originalSliceMapper->SetInputConnection(imageData->GetProducerPort());
    #else
        originalSliceMapper->SetInputData(imageData);
    #endif

    vtkSmartPointer<vtkImageSlice> originalSlice = vtkSmartPointer<vtkImageSlice>::New();
    originalSlice->SetMapper(originalSliceMapper);

    vtkSmartPointer<vtkImageSliceMapper> shiftScaleMapper = vtkSmartPointer<vtkImageSliceMapper>::New();
    shiftScaleMapper->SetInputConnection(shiftScaleFilter->GetOutputPort());

    vtkSmartPointer<vtkImageSlice> shiftScaleSlice = vtkSmartPointer<vtkImageSlice>::New();
    shiftScaleSlice->SetMapper(shiftScaleMapper);
    shiftScaleSlice->GetProperty()->SetInterpolationTypeToNearest();

    renderer->AddViewProp(originalSlice);

    vtkSmartPointer<vtkRenderer> shiftScaleRenderer =
        vtkSmartPointer<vtkRenderer>::New();
    shiftScaleRenderer->AddViewProp(shiftScaleSlice);

    ui->qvtkWidget->update();
}

现在它起作用(亮度和对比度获得原始值),但我还没有完全理解它背后的逻辑。 所以,我没有将自己的答案标记为正确答案(希望得到更恰当的答案),但无论如何我都会发布。我在其他地方看到了同样的问题(没有答案),我希望它对其他人有用。