VTK/Examples/Broken/Cxx/Images/ImageIdealHighPass

From KitwarePublic

Jump to: navigation, search

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()
Personal tools