Как восстановить яркость и контрастность в ВТК?
Я занимаюсь разработкой приложения на C++, используя Qt + VTK. На самом деле, у меня есть QVTKWidget, используемый для отображения изображения DICOM. Я использовал vtkImageViewer2 с vtkInteractorStyleImage, поэтому я могу изменять яркость и контрастность изображения, щелкая по нему мышью, пока нажата левая кнопка.
Однако я хочу включить кнопку для восстановления яркости и контрастности при их исходных значениях. Я провел какое-то исследование, но не могу найти ни функции, касающейся этого, в документации, ни сохраненных значений яркости и контрастности, которые я могу изменить во время выполнения.
Я надеюсь, что кто-то может помочь. Спасибо.
1 ответ
Следуя этому примеру, я смог поместить этот код вместе:
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();
}
Теперь это работает (яркость и контраст получают первоначальные значения), но я не совсем понял логику этого. Таким образом, я не помечаю свой собственный ответ как правильный (в надежде получить более подходящий ответ), но все равно выкладываю его. Я видел эту же проблему (без ответа) в другом месте, и я надеюсь, что она может быть полезна для других.