1#!/usr/bin/env python 2import vtk 3from vtk.util.misc import vtkGetDataRoot 4VTK_DATA_ROOT = vtkGetDataRoot() 5 6# Performs a correlation in frequency domain. 7s1 = vtk.vtkImageCanvasSource2D() 8s1.SetScalarTypeToFloat() 9s1.SetExtent(0,255,0,255,0,0) 10s1.SetDrawColor(0) 11s1.FillBox(0,255,0,255) 12s1.SetDrawColor(2.0) 13s1.FillTriangle(10,100,190,150,40,250) 14s2 = vtk.vtkImageCanvasSource2D() 15s2.SetScalarTypeToFloat() 16s2.SetExtent(0,31,0,31,0,0) 17s2.SetDrawColor(0.0) 18s2.FillBox(0,31,0,31) 19s2.SetDrawColor(2.0) 20s2.FillTriangle(10,1,25,10,1,5) 21fft1 = vtk.vtkImageFFT() 22fft1.SetDimensionality(2) 23fft1.SetInputConnection(s1.GetOutputPort()) 24fft1.ReleaseDataFlagOff() 25fft1.Update() 26# Pad kernel out to same size as image. 27pad2 = vtk.vtkImageConstantPad() 28pad2.SetInputConnection(s2.GetOutputPort()) 29pad2.SetOutputWholeExtent(0,255,0,255,0,0) 30fft2 = vtk.vtkImageFFT() 31fft2.SetDimensionality(2) 32fft2.SetInputConnection(pad2.GetOutputPort()) 33fft2.ReleaseDataFlagOff() 34fft2.Update() 35# conjugate is necessary for correlation (not convolution) 36conj = vtk.vtkImageMathematics() 37conj.SetOperationToConjugate() 38conj.SetInput1Data(fft2.GetOutput()) 39conj.Update() 40# Correlation is multiplication in frequency space. 41mult = vtk.vtkImageMathematics() 42mult.SetOperationToComplexMultiply() 43mult.SetInput1Data(fft1.GetOutput()) 44mult.SetInput2Data(conj.GetOutput()) 45rfft = vtk.vtkImageRFFT() 46rfft.SetDimensionality(2) 47rfft.SetInputConnection(mult.GetOutputPort()) 48real = vtk.vtkImageExtractComponents() 49real.SetInputConnection(rfft.GetOutputPort()) 50real.SetComponents(0) 51viewer = vtk.vtkImageViewer() 52viewer.SetInputConnection(real.GetOutputPort()) 53viewer.SetColorWindow(256) 54viewer.SetColorLevel(127.5) 55# make interface 56#skipping source 57# --- end of script -- 58