VTK/Examples/Broken/Cxx/Images/ImageIdealHighPass
From KitwarePublic
The output looks empty, but if you change the level of the right renderer (hold the left mouse button and move the mouse up and down) you will see the source image. If you look at the output.vti in Paraview, you will see an array named Iterations. I'm not sure how to interpret it? Why is there no ImageScalars that simply describe the output image as a normal image?
ImageIdealHighPass.cxx
#include <vtkSmartPointer.h> #include <vtkImageData.h> #include <vtkImageFFT.h> #include <vtkImageMandelbrotSource.h> #include <vtkImageIdealHighPass.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkInteractorStyleImage.h> #include <vtkRenderer.h> #include <vtkImageSlice.h> #include <vtkImageSliceMapper.h> #include <vtkImageEllipsoidSource.h> #include <vtkImageCast.h> #include <vtkImageRFFT.h> #include <vtkXMLImageDataWriter.h> int main(int, char *[]) { // Create an image vtkSmartPointer<vtkImageMandelbrotSource> source = vtkSmartPointer<vtkImageMandelbrotSource>::New(); source->Update(); // Display the original image vtkSmartPointer<vtkImageCast> originalCastFilter = vtkSmartPointer<vtkImageCast>::New(); originalCastFilter->SetInputConnection(source->GetOutputPort()); originalCastFilter->SetOutputScalarTypeToUnsignedChar(); originalCastFilter->Update(); vtkSmartPointer<vtkImageSliceMapper> originalSliceMapper = vtkSmartPointer<vtkImageSliceMapper>::New(); originalSliceMapper->SetInputConnection(originalCastFilter->GetOutputPort()); vtkSmartPointer<vtkImageSlice> originalSlice = vtkSmartPointer<vtkImageSlice>::New(); originalSlice->SetMapper(originalSliceMapper); // Compute the FFT of the image vtkSmartPointer<vtkImageFFT> fftFilter = vtkSmartPointer<vtkImageFFT>::New(); fftFilter->SetInputConnection(originalCastFilter->GetOutputPort()); fftFilter->Update(); // High pass filter the FFT vtkSmartPointer<vtkImageIdealHighPass> highPassFilter = vtkSmartPointer<vtkImageIdealHighPass>::New(); highPassFilter->SetInputConnection(fftFilter->GetOutputPort()); highPassFilter->SetXCutOff(.1); highPassFilter->SetYCutOff(.1); //highPassFilter->ReleaseDataFlagOff(); highPassFilter->Update(); // Compute the IFFT of the high pass filtered image vtkSmartPointer<vtkImageRFFT> rfftFilter = vtkSmartPointer<vtkImageRFFT>::New(); rfftFilter->SetInputConnection(highPassFilter->GetOutputPort()); rfftFilter->Update(); // Cast the output back to unsigned char vtkSmartPointer<vtkImageCast> outputCastFilter = vtkSmartPointer<vtkImageCast>::New(); outputCastFilter->SetInputConnection(rfftFilter->GetOutputPort()); outputCastFilter->SetOutputScalarTypeToUnsignedChar(); outputCastFilter->Update(); vtkSmartPointer<vtkXMLImageDataWriter> writer = vtkSmartPointer<vtkXMLImageDataWriter>::New(); writer->SetInputConnection(outputCastFilter->GetOutputPort()); writer->SetFileName("test.vti"); writer->Write(); // Display the high pass filtered image vtkSmartPointer<vtkImageSliceMapper> highPassSliceMapper = vtkSmartPointer<vtkImageSliceMapper>::New(); highPassSliceMapper->SetInputConnection(outputCastFilter->GetOutputPort()); vtkSmartPointer<vtkImageSlice> highPassSlice = vtkSmartPointer<vtkImageSlice>::New(); highPassSlice->SetMapper(highPassSliceMapper); // Define viewport ranges // (xmin, ymin, xmax, ymax) double originalViewport[4] = {0.0, 0.0, 0.5, 1.0}; double highPassViewport[4] = {0.5, 0.0, 1.0, 1.0}; // Setup renderers vtkSmartPointer<vtkRenderer> originalRenderer = vtkSmartPointer<vtkRenderer>::New(); originalRenderer->SetViewport(originalViewport); originalRenderer->AddViewProp(originalSlice); originalRenderer->ResetCamera(); originalRenderer->SetBackground(.4, .5, .6); vtkSmartPointer<vtkRenderer> highPassRenderer = vtkSmartPointer<vtkRenderer>::New(); highPassRenderer->SetViewport(highPassViewport); highPassRenderer->AddViewProp(highPassSlice); highPassRenderer->ResetCamera(); highPassRenderer->SetBackground(.4, .5, .7); vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->SetSize(600, 300); renderWindow->AddRenderer(originalRenderer); renderWindow->AddRenderer(highPassRenderer); vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); vtkSmartPointer<vtkInteractorStyleImage> style = vtkSmartPointer<vtkInteractorStyleImage>::New(); renderWindowInteractor->SetInteractorStyle(style); renderWindowInteractor->SetRenderWindow(renderWindow); renderWindowInteractor->Initialize(); renderWindowInteractor->Start(); return EXIT_SUCCESS; }
CMakeLists.txt
cmake_minimum_required(VERSION 2.8) PROJECT(ImageIdealHighPass) find_package(VTK REQUIRED) include(${VTK_USE_FILE}) if (APPLE) add_executable(ImageIdealHighPass MACOSX_BUNDLE ImageIdealHighPass.cxx) else() add_executable(ImageIdealHighPass ImageIdealHighPass.cxx) endif() if(VTK_LIBRARIES) target_link_libraries(ImageIdealHighPass ${VTK_LIBRARIES}) else() target_link_libraries(ImageIdealHighPass vtkHybrid ) endif()