Professional Documents
Culture Documents
i = 1
a: real part
b: imaginary part
Complex Arithmetic
When you add two complex numbers, the real and
imaginary parts add independently:
(a + bi) + (c + di) = (a + c) + (b + d)i
When you multiply two complex numbers, you crossmultiply them like you would polynomials:
(a + bi) (c + di)
Polynomial Multiplication
p1(x) = 3 x2 + 2 x + 4
p2(x) = 2 x2 + 5 x + 1
-1
1
-i
Real
a + bi = a 2 + b 2
The angle from the real-number axis is its phase:
(a + bi) = tan-1(b / a)
When you multiply two complex numbers, their magnitudes
multiply
|z1z2| = |z1||z2|
And their phases add
z1z2
z2
iii
z1
-1
-1
11
-i
-i
Real
Complex Conjugates
If z = a + bi is a complex number, then its complex conjugate is:
z* = a - bi
The complex conjugate z* has the same magnitude but opposite phase
When you add z to z*, the imaginary parts cancel and you get a real number:
(a + bi) + (a - bi) = 2a
When you multiply z to z*, you get the real number equal to |z|2:
(a + bi)(a - bi) = a2 (bi)2 = a2 + b2
Complex Division
If z1 = a + bi, z2 = c + di, z = z1 / z2,
the division can be accomplished by multiplying the numerator and
denominator by the complex conjugate of the denominator:
(a + bi)(c di) ac + bd bc ad
= 2
+i 2
z=
2
2
(c + di)(c di) c + d c + d
Eulers Formula
Remember that under complex multiplication:
Magnitudes multiply
Phases add
If we have two numbers of the form mca (where c is some constant), then
multiplying we get:
(mca ) (ncb) = mnca + b
What constant c can represent complex numbers?
Eulers Formula
Any complex number can be represented using Eulers formula:
a = |z|cos( )
b = |z|sin( )
-1
-i
Real
z = |z|ei (z)
and raise it to some power
zn = [|z|ei (z)]n
= |z|n ei n (z)
zn has magnitude |z|n and phase n (z)
Imaginary
i
-1
n = 1, 5
n = 2, 6
n = 0, 4 , 8
1
-i
n = 3, 7
Real
Imaginary
i
n=2
n = 1, 9
n=3
-1
n=4
n = 0, 8
1
Real
n=5
n=7
-i
n=6
Harmonic Functions
What does x(t) = eit look like?
x(t) is a harmonic function (a building block for later analysis)
Imaginary
Angular frequency
eit
-1
1
-i
Real
Time
Real Part
Imaginary Part
(eit)
(eit)
cos(t)
sin(t)
Convolution
Convolution of an input x(t) with the impulse response h(t) is
written as
x(t) * h(t)
That is to say,
x(t ) h(t ) =
x( )h( t ) d
x[ j ] h[ j ] = x[k ] h[ j k ]
k
x(t ) h(t ) =
x( )h( t ) d
x[ j ] h[ j ] = x[k ] h[ j k ]
Think of it this way:
=
=
=
=
=
x[j] * h[j] =
[
[
[
[
[
__
__
__
__
__
4
2
3
3
1
4
2
5
]
]
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
]
]
]
]
]
x[k] h[j k]
k
= [ __ __ __ __ __ __ __ __ __ ]
=
=
=
=
=
x[j] * h[j] =
[
[
[
[
[
1
__
__
__
__
4
2
3
3
1
4
2
5
]
]
2
__
__
__
__
3
__
__
__
__
4
__
__
__
__
5
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
]
]
]
]
]
x[k] h[j k]
k
= [ __ __ __ __ __ __ __ __ __ ]
=
=
=
=
=
x[j] * h[j] =
[
[
[
[
[
1
__
__
__
__
4
2
3
3
1
4
2
5
]
]
2
4
__
__
__
3
8
__
__
__
4
12
__
__
__
5
16
__
__
__
__
20
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
__
]
]
]
]
]
x[k] h[j k]
k
= [ __ __ __ __ __ __ __ __ __ ]
=
=
=
=
=
x[j] * h[j] =
[
[
[
[
[
1
__
__
__
__
4
2
3
3
1
4
2
5
]
]
2
4
__
__
__
3
8
3
__
__
4
12
6
__
__
5
16
9
__
__
__
20
12
__
__
__
__
15
__
__
__
__
__
__
__
__
__
__
__
__
]
]
]
]
]
x[k] h[j k]
k
= [ __ __ __ __ __ __ __ __ __ ]
=
=
=
=
=
x[j] * h[j] =
[
[
[
[
[
1
__
__
__
__
4
2
3
3
1
4
2
5
]
]
2
4
__
__
__
3
8
3
__
__
4
12
6
1
__
5
16
9
2
__
__
20
12
3
__
__
__
15
4
__
__
__
__
5
__
__
__
__
__
__
]
]
]
]
]
x[k] h[j k]
k
= [ __ __ __ __ __ __ __ __ __ ]
=
=
=
=
=
x[j] * h[j] =
[
[
[
[
[
1
__
__
__
__
4
2
3
3
1
4
2
5
]
]
2
4
__
__
__
3
8
3
__
__
4
12
6
1
__
5
16
9
2
2
__
20
12
3
4
__
__
15
4
6
__
__
__
5
8
__
__
__
__
10
]
]
]
]
]
x[k] h[j k]
k
= [ __ __ __ __ __ __ __ __ __ ]
=
=
=
=
=
x[j] * h[j] =
[
[
[
[
[
1
__
__
__
__
4
2
3
3
1
4
2
5
]
]
2
4
__
__
__
3
8
3
__
__
4
12
6
1
__
5
16
9
2
2
__
20
12
3
4
__
__
15
4
6
__
__
__
5
8
__
__
__
__
10
]
]
]
]
]
x[k] h[j k]
k
= [ 1
6 14 23 34 39 25 13 10 ]
x(t ) h(t ) =
x( )h( t ) d
In two dimensions:
I ( x, y ) h ( x, y ) =
I ( x , y )h( x x , y y )d x d y
I [ x, y ] h[ x, y ] = I [ j , k ]h[ x j , y k ]
k
____
1 ____
2
2____
____
____
____
____
____
____
____
____
____
____
____
____
____
____
____
____
____
____
____
____
____
____
____
____
____
____
____
____
____
____
____
____
____
Properties of Convolution
Commutative: f * g = g * f
Associative: f * (g * h) = (f * g) * h
Distributive over addition: f * (g + h) = f * g + f * h
Derivative:
d
( f g) = f g + f g
dt
Useful Functions
Square: a(t)
Triangle: a(t)
Gaussian: G(t, s)
Step: u(t)
Impulse/Delta: (t)
Comb (Shah Function): combh(t)
Each has their two- or three-dimensional equivalent.
Square
1 if t a
a (t ) =
0 otherwise
-a
What does f(t) * a(t) do to a signal f(t)?
What is a(t) * a(t)?
Triangle
1 t
a
a (t ) =
0
if t a
1
otherwise
-a
Gaussian
1
G (t , ) = e
2 2
2 2
G (t , 1 ) G (t , 2 ) = G (t , 12 + 22 )
Step Function
1 if t 0
u (t ) =
0 otherwise
Impulse/Delta Function
Weve seen the delta function before:
if t = 0
(t ) =
and
0 otherwise
(t )dt = 1
if t = k
(t k ) =
0 otherwise
What is a function f(t) convolved with (t)?
What is a function f(t) convolved with (t - k)?
combh (t ) = (t hk )
h is the spacing
2h 3h
Convolution Filtering
Convolution is useful for modeling the behavior of filters
It is also useful to do ourselves to produce a desired effect
When we do it ourselves, we get to choose the function that the
input will be convolved with
This function that is convolved with the input is called the
convolution kernel
Questions: Convolution
Frequency Analysis
Here, we write a square
wave as a sum of sine
waves:
http://www.physics.gatech.edu/gcuo/UltrafastOptics/PhysicalOptics/
http://www.cs.sfu.ca/~hamarneh/courses/cmpt340_04_1
Frequency Analysis
To use transfer functions, we must first decompose a signal into its component
frequencies
Basic idea: any signal can be written as the sum of phase-shifted sines and
cosines of different frequencies
The mathematical tool for doing this is the Fourier Transform
image
www.dai.ed.ac.uk/HIPR2/ fourier.htm
wave magnitudes
wave phases
u v = u [ j] v[ j]
j
f g =
f ( x) g ( x)dx
Vectors {k[j]}
Transform
ak = v ek = v [ j ] ek [ j ] ak = f ek =
j
Inverse
Functions {ek(t)}
v = ak ek
k
f (t )ek* (t )dt
f (t ) = ak ek (t )
k
ak = f ei 2s k t
Transform
ak = f ek =
f (t )ek* (t )dt
Inverse
f (t ) = ak ek (t )
k
Harmonics {ei2st}
f (t )e i 2s k t dt
f (t ) = ak ei 2s k t
k
Fourier Series
ak = f ei 2s k t
Transform
f (t )e i 2s k t dt
Fourier Transform
F ( s ) = f ei 2st
Inverse
f (t )e i 2st dt
f (t ) = ak ei 2s k t
k
f (t ) =
i 2s k t
F
(
s
)
e
ds
F (s) =
f (t )e i 2st dt
f (t ) =
i 2st
F
(
s
)
e
ds
Notation
Let F denote the Fourier Transform:
F = F(f )
Let F-1 denote the Inverse Fourier Transform:
f = F-1(F )
Real part
Imaginary part
Magnitude
Phase
image
www.dai.ed.ac.uk/HIPR2/ fourier.htm
F = ( F ) 2 + ( F ) 2
( F )
( F ) = arctan
( F )
|F|
(F)
1
F [s] =
N
and
f [t ] =
N 1
f [t ]e
i 2 st
t =0
N 1
F[s]e
i 2 st
s =0
Note: For a periodic function, the discrete Fourier transform is the same as
the continuous transform
i 2 st
1
N
Transform
1
F [ s] =
N
i 2 st
1 i 2 st N
e
N
F [ s] =
N 1
f [t ]e
i 2 st
f [t ] =
t =0
N 1
t =0
F [ s] =
Inverse
f [t ]e
N 1
f [t ]e
t =0
N 1
F[s]e
i 2 st
s =0
i 2 st
i 2 st
f [t ] =
N 1
s =0
1
f [t ] =
N
F [s]e
N 1
F [s]e
s =0
i 2 st
i 2 st
f [t ] =
N 1
f [t ]e
i 2 st
t =0
N 1
F[s]e
s =0
i 2 st
Questions:
What would the code for the discrete Fourier transform look
like?
What would its computational complexity be?
If we let
WN = e
i 2
1
F [s] =
N
N 1
t =0
f [t ] WNst
1
F [s] =
2M
2 M 1
t =0
f [t ] W2stM
s ( 2t )
s ( 2t +1)
F [s] =
f
[
2
t
]
W
f
[
2
t
1
]
W
+
+
2M
2M
2 M t = 0
M t =0
Notice that
W2sM( 2t )
and
So,
W2sM( 2t +1)
=e
=e
i 2 s ( 2t )
i 2 s ( 2t +1)
1 1
F [s] =
2 M
M 1
t =0
2M
2M
=e
f [2t ] WMst
=e
i 2 st
i 2 st
1
+
M
Me
= WMst
i 2 s
M 1
f [2t
t =0
2M
= WMstW2sM
+ 1] WMstW2sM
M 1
t =0
Can be written as
f [2t ] WMst
1
+
M
M 1
f [2t
t =0
+ 1] WMstW2sM
1
F [ s ] = Feven ( s ) + Fodd ( s )W2sM
2
We can use this for the first M terms of the Fourier transform of
2M items, then we can re-use these values to compute the last M
terms as follows:
1
F [ s + M ] = Feven ( s ) Fodd ( s )W2sM
2
// A complex value.
even = FFT(EvenTerms(f));
odd = FFT( OddTerms(f));
for (s = 0; s < M; s++) {
result[s ] = even[s] + W_2M^s * odd[s];
result[s+M] = even[s] W_2M^s * odd[s];
}
}
O(N2)
O(N log N)
Remember: The FFT is just a faster algorithm for computing the DFT it
does not produce a different result
Fourier Pairs
Use the Fourier Transform, denoted F, to get the weights for
each harmonic component in a signal:
F ( s ) = F ( f (t )) =
f (t )e i 2st dt
f (t ) = F 1 ( F ( s )) =
i 2st
F
(
s
)
e
ds
f (t ) F ( s )
Sinusoids
Spatial Domain
f(t)
Frequency Domain
F(s)
cos(2t)
[(s + ) + (s )]
sin(2t)
[(s + ) - (s )]i
Constant Functions
Spatial Domain
f(t)
Frequency Domain
F(s)
(s)
a (s)
http://www.cis.rit.edu/htbooks/nmr/chap-5/chap-5.htm
Frequency Domain
F(s)
(t)
http://www.cis.rit.edu/htbooks/nmr/chap-5/chap-5.htm
Square Pulse
Spatial Domain
f(t)
a(t)
Frequency Domain
F(s)
sin(2 as )
2a sinc(2as ) =
s
Sinc Function
The Fourier transform of a square function, a(t) is the (normalized) sinc
function:
sin( x)
sinc( x) =
To show this, we substitute the value of a(t) = 1 for a < t < a into the
equation for the continuous FT, i.e.
a
F ( s) =
i 2 st
e
dt
1
F (s) =
i 2 s
i 2 sa
i 2 sa
eu du =
1
e i 2 as ei 2 as =
i 2 s
1
[cos(2 as) + i sin(2 as) cos(2 as) i sin(2 as)] =
i 2 s
1
1
[2i sin(2 as )] =
sin(2 as ) = 2a sinc(2as ).
i 2 s
s
Triangle
Spatial Domain
f(t)
Frequency Domain
F(s)
a(t)
a sinc2(as)
1/ 2 (t )
1/2 sinc (s / 2)
-1/2
0.5
1/2
Frequency Domain
F(s)
combh(t) = (t mod h)
(t mod 1/h)
http://www.cis.rit.edu/htbooks/nmr/chap-5/chap-5.htm
Gaussian
Spatial Domain
f(t)
e
e
t 2
Frequency Domain
F(s)
s 2
( s )
Graphical Picture
e
http://www.med.harvard.edu/JPNM/physics/didactics/improc/intro/fourier3.html
( s )
cos(2t)
Sine
sin(2t)
Shifted Deltas
[ (s + ) - (s )]i
Unit Function
Delta Function
(s)
Constant
Delta Function
a (s)
Delta Function
(t)
Unit Function
Comb
(t mod h)
Comb
(t mod 1/h)
Square Pulse
a(t)
Sinc Function
2a sinc(2as)
Triangle
a(t)
Sinc Squared
a sinc2(as)
Gaussian
t 2
Gaussian
s 2
f2(t) = f1(t a)
F1 = F(f1)
F2 = F(f2)
then
|F2| = |F1|
f2(t) = f1(a t)
F1 = F(f1)
F2 = F(f2)
then
F2(s) = (1/|a|) F1(s / a)
f (t ) dt =
F (s)
ds
implies
G=FH
g=fh
implies
G=F*H
Deconvolution
If G = FH, cant you reverse the process by F = G / H?
This is called deconvolution: the undoing of convolution
Problem: most systems have noise, which limits deconvolution,
especially when H is small.
F (u, v) =
f ( x, y )e i 2 (ux + vy ) dx dy
f ( x, y ) =
i 2 (ux + vy )
F
(
u
,
v
)
e
dx dy
hu , v [ x, y ] = e
i 2ux / N i 2vy / M
= e i 2 (ux / N + vy / M )
1
F [u , v] =
NM
N 1 M 1
f [ x, y ]e i 2 (ux / N + vy / M )
x =0 y =0
f [ x, y ] =
N 1 M 1
i 2 (ux / N + vy / M )
F
[
u
,
v
]
e
u =0 v =0
Frequency v in y
This follows from rotational invariance
in the
Direction (u, v)
Properties
All other properties of 1D FTs apply to 2D and 3D:
Linearity
Shift
Scaling
Rayleighs Theorem
Convolution Theorem
Rotation
Rotating a 2D function rotates its Fourier Transform
If
f2 = rotate(f1)
= f1(x cos() y sin(), x sin() + y cos())
F(f1)
F2 = F(f2)
F1 =
then
F2(s) = F1(x cos() y sin(), x sin() + y cos())
i.e., the Fourier Transform is rotationally invariant.
needs
more
boundary
padding!
http://mail.udlap.mx/~oldwall/docencia/IMAGENES/chapter2/image_232_IS548.html
1
F [u , v] =
NM
N 1 M 1
1
=
NM
N 1 M 1
1
M
f [ x, y ]e i 2 (ux / N + vy / M )
x =0 y =0
x =0 y =0
M 1
f [ x, y ]e i 2ux / N e i 2vy / M
y =0
N 1
f [ x, y]e
x =0
i 2ux / N
i 2vy / M
e
Correlation
Convolution is
f (t ) * g (t ) =
f ( ) g (t )d
Correlation is
f (t ) * g (t ) =
f ( ) g (t + )d
Template Convolution
Actually, is a correlation method
Goal: maximize correlation between target and probe image
Here: only translations allowed but rotations also possible
target
probe
http://www.reindeergraphics.com/tutorial/chap4/fourier11.html
Particle Picking
Use spherical, or rotationally averaged probes
Goal: maximize correlation between target and probe image
microscope image of latex spheres
target
probe
http://www.reindeergraphics.com/tutorial/chap4/fourier11.html
Autocorrelation
Autocorrelation is the correlation of a function with itself:
f (t) * f(-t)
Useful to detect self-similarities or repetitions / symmetry within
one image!
Power Spectrum
The power spectrum of a signal is the Fourier Transform of its
autocorrelation function:
P(s) = F(f (t) * f (-t))
= F(s) F*(s)
= |F(s)|2
It is also the squared magnitude of the Fourier transform of the
function
It is entirely real (no imaginary part).
Useful for detecting periodic patterns / texture in the image.
http://www.reindeergraphics.com/tutorial/chap4/fourier13.html
http://web.engr.oregonstate.edu/~enm/cs519
2003 School of Electrical Engineering and Computer Science, Oregon State University, Dearborn Hall, Corvallis, Oregon, 97331
Resources
Textbooks:
Kenneth R. Castleman, Digital Image Processing, Chapters 9,10
John C. Russ, The Image Processing Handbook, Chapter 5