Hough transform

advertisement
HOUGH TRANSFORM
HOUGH TRANSFORM
• Introduced in 1962 by Paul Hough
• pronounced like “tough” according to
http://www.citidel.org/bitstream/10117/1289/1/HoughTransf
orm.html
• Detects lines.
• Has been generalized to other shapes as well.
• Handles noise.
• Handles partial occlusion.
PROBLEM: WE PROCESS A GRAY IMAGE AND
CREATE A BINARY VERSION. NEXT, WE WISH TO FIT
LINES TO THE BINARY IMAGE.
• from http://www.cs.uregina.ca/Links/class-info/425nova/Lab4/
MORE EXAMPLES
• from
http://www.cc.utah.edu/~asc10/improc/project4/R
EADME.html
PROBLEM: WE PROCESS A GRAY IMAGE AND
CREATE A BINARY VERSION. NEXT, WE WISH TO FIT
LINES TO THE BINARY IMAGE.
• Slope-intercept equation of line:
y  ax  b
• where a is the slope (y/  x), and b is the y-intercept
PROBLEM: WE PROCESS A GRAY IMAGE AND
CREATE A BINARY VERSION. NEXT, WE WISH TO FIT
LINES TO THE BINARY IMAGE.
• Slope-intercept:
y=ax+b
• We typically think of (x,y) as variables and
(a,b) as constants.
• Instead, let’s think of (a,b) as variables and
(x,y) as constants. Rewritten:
b=-xa+y
• Note that this is also the equation of a line
but in (a,b) space.
• We can pass (infinitely) many lines at
different angles through (x,y). As we do this,
we’ll form a line in (a,b) space.
• Passing many lines through an (x,y) point.
• Figure by Anne Solberg
• Figure by Anne Solberg.
• Two points in (x,y)-space define a line.
• However (if we pass infinitely many lines through
each of these points), we obtain two different lines
in (a,b)-space for each of these points.
• Figure by Anne Solberg.
• Two points in (x,y)-space define a line.
• However (if we pass infinitely many lines through
each of these points), we obtain two different lines
in (a,b)-space for each of these points.
• Then line between them in (x,y)-space gives rise to
a point of intersection in (a,b)-space.
PROBLEM
• (a,b)-space can’t be used in practice because
vertical lines have infinite slope!
PROBLEM
• (a,b)-space can’t be used in practice because
vertical lines have infinite slope!
• Solution:
• Use polar coordinates. Lines are then represented by their
angle  (from the x-axis) and perpendicular distance from
the origin, r.
• All points on the same line will have the same (r,).
r  x cos  y sin 
•
(figure from http://en.wikipedia.org/wiki/Hough_transform)
NOTE
• Each point in (x,y)-space gives rise to a sinusoid in
(r,)-space.
• But that’s OK. Lines in (x,y)-space will still give rise to
intersections in (r,)-space.
DATA STRUCTURE
• Use an accumulator matrix (2D histogram; call it A)
of counts for (r,).
• Voting algorithm.
• We’ll get one vote for each point along the sinusoid.
• Two votes at points of intersection of sinusoids (which denote
lines in (x,y)-space.
• More than two votes for multiple co-linear points (in (x,y)-space).
• Then the points in (r,)-space with the most votes denote strong
lines in (x,y)-space.
DATA STRUCTURE
• Use an accumulator matrix (2D histogram; call it A)
of counts for (r,).
• Voting algorithm.
• So we need to quantize the allowable values for r and .
• For r, we can use all the integer values from 0 to the largest
image diagonal distance. (We could use more as well. For
example, we could multiply this value by 10 and get up to a
resolution of 10ths.)
• For , we can quantize to one degree increments, or we
can use the same number as used for r.
ALGORITHM
• Let Q be the number of angles into which  was
quantized.
• For each point, pi in P:
• For each qi in Q
• Assume that a line at angle =qi passes through pi.
• Calculate r for this line
• Increment A[r, ].
• The values in A that exceed some threshold (or the
K greatest values in A) are the strongest lines.
• What is the complexity of this algorithm?
ALGORITHM
• Let Q be the number of angles into which  was
quantized.
• For each point, pi in P:
• For each qi in Q
• Assume that a line at angle =qi passes through pi.
• Calculate r for this line
• Increment A[r, ].
• The values in A that exceed some threshold (or the
K greatest values in A) are the strongest lines.
• What is the complexity of this algorithm? |P|*|Q|
• But since Q is a constant that we determine, we can think of it as |P|.
GENERALIZATION TO OTHER SHAPES
• y = ax + b can be written as ax + b - y = 0.
• In general, f(x,a)=0, where x and a are vectors.
1. Consider the equation of a circle, (x-a)2 + (y-b) 2 = r2.
• So our vector x above will be <x,y> and a will be <a,b,r> (3D).
1. Consider the equation of an ellipse, (x-h) 2/a2 + (y-k) 2/b2 = 1.
• In this case, our vector x will again be <x,y> and a will be <h,k,a,b>
(4D).
• However, this only characterizes ellipses that are aligned with the
axes. So in general, for ellipses we need 5D space, <h,k,a,b,>.
MORE ABOUT THE
ACCUMULATOR MATRIX …
• Ex. two points:
• (r==10 && c==10)
• (r==100 && c==10)
• Ex. four points:
•
•
•
•
(r==75 && c==75)
(r==200 && c==200)
(r==300 && c==300)
(r==500 && c==500)
• Let’s take a look at one with gimp.
• This test has just two point, (200,200) and (500,500).
• We see nothing (at 18% magnification)!
• At 100% we can begin to see the sinusoids.
• But we are only changing theta by 0.1 so between
0..2 Pi there are only 62 samples.
• So the intersections “miss.”
• So let’s try more samples.
• Let’s try sampling in one degree increments
(resulting in 360 samples).
• Now we see intersections!
• Let’s try sampling in one degree increments
(resulting in 360 samples).
• Now we see intersections!
• And a look at the PGM file confirms that the max
value is 2.
• Let’s try sampling in one degree increments
(resulting in 360 samples).
• Now we see intersections!
• But there appears to be two! Why?
• Let’s try sampling in one degree increments
(resulting in 360 samples).
• Now we see intersections!
• But there appears to be two! Why?
• Because we are rotating around 360 when we only need
180.
• Better!
• But now I’m afraid that I might miss intersections due
to undersampling. So let’s sample tenths or
hundredths of a degree (instead of one degree
increments).
• But where are the most votes?
• Not at the points of intersection!
• Why?
• Because many points along the real curve are mapping
(repeatedly) so a single point in our array.
SOLUTION(S)?
1. (Oversample.) As you trace along a sinusoid,
keep track of the last point and don’t count
repetitions.
• easier to code
• less reliable
2. (Undersample.) As you trace along a sinusoid,
draw straight lines between pairs of points (and still
disallowing repeats as in #1).
• harder to code
• more reliable
MORAL OF THE STORY: SOMETIMES IT’S
BETTER TO PLAY “CONNECT THE DOTS”
THAN IT IS TO OVERSAMPLE!
Download