find the coin (
green
bounding box rectangle)either manually or by some search for specific color,pattern,hough transform,segmentation… This will limit the area to search for next steps
find the boundary (distinct
red
edge in color intensity)so create a list of points that are the coin boundary (be careful with shadows) just scan for high enough intensity bumps.
compute the circle center
just average of all border points…
test all boundary points for
min/max
distance to centerif the tilt is small then you will have many points with min and max radius so take the middle from them. If the
|max-min|
is very small then you got no tilt. Linebetween min/max distance point and center gives youblack
basis vectors.use
black
basis vectors to measureSo select 2 points (
red
line d) to measure and castgreen
rays from them parallel to basis vectors. Their intersection will create2
linesa,b
. from that it is easy:d = sqrt((a*a)+(b*b))
where
a,b
is the size of the lines in units. you can obtain it like:a_size_unit = a_size_pixel * coin_r_unit / rmax_pixel
b_size_unit = b_size_pixel * coin_r_unit / rmin_pixel
[note]
This image was selected to emphasize the skew but you should use images of planes almost paralel to chip surface to avoid perspective distortion. This image is not a good example the cube is more distant to camera then coin …
To account for this see selection criteria for different projections