-
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