【问题标题】:How to restore brightness and contrast in VTK?如何在VTK中恢复亮度和对比度?
【发布时间】:2013-06-26 07:10:33
【问题描述】:

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

但是,我希望启用一个按钮以将亮度和对比度恢复为原始值。我已经进行了一些研究,但在文档中找不到任何关于它的功能,也找不到任何可以在运行时更改的保存的亮度和对比度值。

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

【问题讨论】:

  • 你试过get/setColorLevel和get/setColorWindow了吗?
  • 非常感谢您的帮助,很抱歉回复晚了。然而不幸的是,它似乎不起作用。我已经尝试过使用以下代码:void MainWindow::on_luminosityResetButton_clicked(){imageViewer->SetColorLevel(128);imageViewer->SetColorWindow(255);ui->qvtkWidget->update();},其中 imageViewer 是 vtkSmartPointer 类型的全局变量。但它只是做任何事情。这些功能是有道理的(我也用不同的值尝试过它们,结果是一样的),也许我只是忘记了让它们工作的东西......

标签: vtk dicom brightness contrast


【解决方案1】:

按照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();
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多