/********************************************************************** 文件名: 5.6_FFTAndRFFTExample.cpp Copyright (c) 张晓东, 罗火灵. All rights reserved. 更多信息请访问: http://www.vtkchina.org (VTK中国) http://blog.csdn.net/www_doling_net (东灵工作室) **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //测试图像:../data/lena-gray.jpg int main(int argc, char* argv[]) { if (argc < 2) { std::cout< reader = vtkSmartPointer::New(); reader->SetFileName (argv[1]); reader->Update(); vtkSmartPointer fftFilter = vtkSmartPointer::New(); fftFilter->SetInputConnection(reader->GetOutputPort()); fftFilter->SetDimensionality(2); fftFilter->Update(); vtkSmartPointer fftExtractReal = vtkSmartPointer::New(); fftExtractReal->SetInputConnection(fftFilter->GetOutputPort()); fftExtractReal->SetComponents(0); double range[2]; fftExtractReal->GetOutput()->GetScalarRange(range); vtkSmartPointer ShiftScale = vtkSmartPointer::New(); ShiftScale->SetOutputScalarTypeToUnsignedChar(); ShiftScale->SetScale( 255.0 / (range[1]-range[0]) ); ShiftScale->SetShift(-range[0]); ShiftScale->SetInputConnection(fftExtractReal->GetOutputPort()); ShiftScale->Update(); vtkSmartPointer rfftFilter = vtkSmartPointer::New(); rfftFilter->SetInputConnection(fftFilter->GetOutputPort()); rfftFilter->SetDimensionality(2); rfftFilter->Update(); vtkSmartPointer ifftExtractReal = vtkSmartPointer::New(); ifftExtractReal->SetInputConnection(rfftFilter->GetOutputPort()); ifftExtractReal->SetComponents(0); vtkSmartPointer rfftCastFilter = vtkSmartPointer::New(); rfftCastFilter->SetInputConnection(ifftExtractReal->GetOutputPort()); rfftCastFilter->SetOutputScalarTypeToUnsignedChar(); rfftCastFilter->Update(); vtkSmartPointer originalActor = vtkSmartPointer::New(); originalActor->SetInput(reader->GetOutput()); vtkSmartPointer fftActor = vtkSmartPointer::New(); fftActor->SetInput(ShiftScale->GetOutput()); vtkSmartPointer rfftActor = vtkSmartPointer::New(); rfftActor->SetInput(rfftCastFilter->GetOutput()); double originalViewport[4] = {0.0, 0.0, 0.33, 1.0}; double fftViewport[4] = {0.33, 0.0, 0.66, 1.0}; double rfftViewport[4] = {0.66, 0.0, 1.0, 1.0}; vtkSmartPointer originalRenderer = vtkSmartPointer::New(); originalRenderer->SetViewport(originalViewport); originalRenderer->AddActor(originalActor); originalRenderer->ResetCamera(); originalRenderer->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer fftRenderer = vtkSmartPointer::New(); fftRenderer->SetViewport(fftViewport); fftRenderer->AddActor(fftActor); fftRenderer->ResetCamera(); fftRenderer->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer rfftRenderer = vtkSmartPointer::New(); rfftRenderer->SetViewport(rfftViewport); rfftRenderer->AddActor(rfftActor); rfftRenderer->ResetCamera(); rfftRenderer->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer renderWindow = vtkSmartPointer::New(); renderWindow->AddRenderer(originalRenderer); renderWindow->AddRenderer(fftRenderer); renderWindow->AddRenderer(rfftRenderer); renderWindow->SetSize(640, 320); renderWindow->Render(); renderWindow->SetWindowName("FFTAndRFFTExample"); vtkSmartPointer renderWindowInteractor = vtkSmartPointer::New(); vtkSmartPointer style = vtkSmartPointer::New(); renderWindowInteractor->SetInteractorStyle(style); renderWindowInteractor->SetRenderWindow(renderWindow); renderWindowInteractor->Initialize(); renderWindowInteractor->Start(); return EXIT_SUCCESS; }