1 #include "vtkAutoInit.h" 2 VTK_MODULE_INIT(vtkRenderingOpenGL2); 3 VTK_MODULE_INIT(vtkInteractionStyle); 4 5 #include <vtkSmartPointer.h> 6 #include <vtkImageData.h> 7 #include <vtkImageFFT.h> 8 #include <vtkImageRFFT.h> 9 #include <vtkRenderWindow.h> 10 #include <vtkRenderWindowInteractor.h> 11 #include <vtkInteractorStyleImage.h> 12 #include <vtkRenderer.h> 13 #include <vtkImageActor.h> 14 #include <vtkImageCast.h> 15 #include <vtkJPEGReader.h> 16 #include <vtkImageExtractComponents.h> 17 #include <vtkImageFourierCenter.h> 18 #include <vtkImageMagnitude.h> 19 #include <vtkImageShiftScale.h> 20 21 //测试图像:../data/lena-gray.jpg 22 int main(int argc, char* argv[]) 23 { 24 vtkSmartPointer<vtkJPEGReader> reader = 25 vtkSmartPointer<vtkJPEGReader>::New(); 26 reader->SetFileName ("lena-gray.jpg"); 27 reader->Update(); 28 29 vtkSmartPointer<vtkImageFFT> fftFilter = 30 vtkSmartPointer<vtkImageFFT>::New(); 31 fftFilter->SetInputConnection(reader->GetOutputPort()); 32 fftFilter->SetDimensionality(2); 33 fftFilter->Update(); 34 35 vtkSmartPointer<vtkImageExtractComponents> fftExtractReal = 36 vtkSmartPointer<vtkImageExtractComponents>::New(); 37 fftExtractReal->SetInputConnection(fftFilter->GetOutputPort()); 38 fftExtractReal->SetComponents(0); 39 40 double range[2]; 41 fftExtractReal->GetOutput()->GetScalarRange(range); 42 43 vtkSmartPointer<vtkImageShiftScale> ShiftScale = 44 vtkSmartPointer<vtkImageShiftScale>::New(); 45 ShiftScale->SetOutputScalarTypeToUnsignedChar(); 46 ShiftScale->SetScale( 255.0 / (range[1]-range[0]) ); 47 ShiftScale->SetShift(-range[0]); 48 ShiftScale->SetInputConnection(fftExtractReal->GetOutputPort()); 49 ShiftScale->Update(); 50 51 vtkSmartPointer<vtkImageRFFT> rfftFilter = 52 vtkSmartPointer<vtkImageRFFT>::New(); 53 rfftFilter->SetInputConnection(fftFilter->GetOutputPort()); 54 rfftFilter->SetDimensionality(2); 55 rfftFilter->Update(); 56 57 vtkSmartPointer<vtkImageExtractComponents> ifftExtractReal = 58 vtkSmartPointer<vtkImageExtractComponents>::New(); 59 ifftExtractReal->SetInputConnection(rfftFilter->GetOutputPort()); 60 ifftExtractReal->SetComponents(0); 61 62 vtkSmartPointer<vtkImageCast> rfftCastFilter = 63 vtkSmartPointer<vtkImageCast>::New(); 64 rfftCastFilter->SetInputConnection(ifftExtractReal->GetOutputPort()); 65 rfftCastFilter->SetOutputScalarTypeToUnsignedChar(); 66 rfftCastFilter->Update(); 67 68 vtkSmartPointer<vtkImageActor> originalActor = 69 vtkSmartPointer<vtkImageActor>::New(); 70 originalActor->SetInputData(reader->GetOutput()); 71 72 vtkSmartPointer<vtkImageActor> fftActor = 73 vtkSmartPointer<vtkImageActor>::New(); 74 fftActor->SetInputData(ShiftScale->GetOutput()); 75 76 vtkSmartPointer<vtkImageActor> rfftActor = 77 vtkSmartPointer<vtkImageActor>::New(); 78 rfftActor->SetInputData(rfftCastFilter->GetOutput()); 79 80 double originalViewport[4] = {0.0, 0.0, 0.33, 1.0}; 81 double fftViewport[4] = {0.33, 0.0, 0.66, 1.0}; 82 double rfftViewport[4] = {0.66, 0.0, 1.0, 1.0}; 83 84 vtkSmartPointer<vtkRenderer> originalRenderer = 85 vtkSmartPointer<vtkRenderer>::New(); 86 originalRenderer->SetViewport(originalViewport); 87 originalRenderer->AddActor(originalActor); 88 originalRenderer->ResetCamera(); 89 originalRenderer->SetBackground(1.0, 1.0, 1.0); 90 91 vtkSmartPointer<vtkRenderer> fftRenderer = 92 vtkSmartPointer<vtkRenderer>::New(); 93 fftRenderer->SetViewport(fftViewport); 94 fftRenderer->AddActor(fftActor); 95 fftRenderer->ResetCamera(); 96 fftRenderer->SetBackground(1.0, 1.0, 1.0); 97 98 vtkSmartPointer<vtkRenderer> rfftRenderer = 99 vtkSmartPointer<vtkRenderer>::New(); 100 rfftRenderer->SetViewport(rfftViewport); 101 rfftRenderer->AddActor(rfftActor); 102 rfftRenderer->ResetCamera(); 103 rfftRenderer->SetBackground(1.0, 1.0, 1.0); 104 105 vtkSmartPointer<vtkRenderWindow> renderWindow = 106 vtkSmartPointer<vtkRenderWindow>::New(); 107 renderWindow->AddRenderer(originalRenderer); 108 renderWindow->AddRenderer(fftRenderer); 109 renderWindow->AddRenderer(rfftRenderer); 110 renderWindow->SetSize(640, 320); 111 renderWindow->Render(); 112 renderWindow->SetWindowName("FFTAndRFFTExample"); 113 114 vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = 115 vtkSmartPointer<vtkRenderWindowInteractor>::New(); 116 vtkSmartPointer<vtkInteractorStyleImage> style = 117 vtkSmartPointer<vtkInteractorStyleImage>::New(); 118 119 renderWindowInteractor->SetInteractorStyle(style); 120 renderWindowInteractor->SetRenderWindow(renderWindow); 121 renderWindowInteractor->Initialize(); 122 renderWindowInteractor->Start(); 123 124 return EXIT_SUCCESS; 125 }标签:ShiftScale,1.0,VTK,频域,vtkSmartPointer,renderWindow,New,include,44 From: https://www.cnblogs.com/ybqjymy/p/17631006.html