1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
package require vtk
package require vtkinteraction
# Performs a correlation in frequency domain.
vtkImageCanvasSource2D s1
s1 SetScalarTypeToFloat
s1 SetExtent 0 255 0 255 0 0
s1 SetDrawColor 0
s1 FillBox 0 255 0 255
s1 SetDrawColor 2.0
s1 FillTriangle 10 100 190 150 40 250
vtkImageCanvasSource2D s2
s2 SetScalarTypeToFloat
s2 SetExtent 0 31 0 31 0 0
s2 SetDrawColor 0.0
s2 FillBox 0 31 0 31
s2 SetDrawColor 2.0
s2 FillTriangle 10 1 25 10 1 5
vtkImageFFT fft1
fft1 SetDimensionality 2
fft1 SetInputConnection [s1 GetOutputPort]
fft1 ReleaseDataFlagOff
fft1 Update
# Pad kernel out to same size as image.
vtkImageConstantPad pad2
pad2 SetInputConnection [s2 GetOutputPort]
pad2 SetOutputWholeExtent 0 255 0 255 0 0
vtkImageFFT fft2
fft2 SetDimensionality 2
fft2 SetInputConnection [pad2 GetOutputPort]
fft2 ReleaseDataFlagOff
fft2 Update
# conjugate is necessary for correlation (not convolution)
vtkImageMathematics conj
conj SetOperationToConjugate
conj SetInput1Data [fft2 GetOutput]
conj Update
# Corrleation is multiplication in frequencey space.
vtkImageMathematics mult
mult SetOperationToComplexMultiply
mult SetInput1Data [fft1 GetOutput]
mult SetInput2Data [conj GetOutput]
vtkImageRFFT rfft
rfft SetDimensionality 2
rfft SetInputConnection [mult GetOutputPort]
vtkImageExtractComponents real
real SetInputConnection [rfft GetOutputPort]
real SetComponents 0
vtkImageViewer viewer
viewer SetInputConnection [real GetOutputPort]
viewer SetColorWindow 256
viewer SetColorLevel 127.5
# make interface
source [file join [file dirname [info script]] WindowLevelInterface.tcl]
|