The program is now able to detect and distinguish between
quadrilaterals, rectangles, squares, ellipses and circles at various
angles of rotation. 

When running the blob identification rule in
parallel, I noticed that certain quadrilaterals sometimes fail to
detect. I have set that part to run in one thread until it gets
fixed. The program still runs quite fast, finishing in 1.6 s instead of
1.5 as it would be were that section left running multithreaded.

I would like to have used the angle between cells to extract gradient
data, but I did not succeed in interpolating the data with enough
accuracy to determine the vertices. Instead, I've used the distance
between the centroid and the outline to indirectly gather this
information. This proves to be a limitation when detecting long, narrow
shapes and vertices that are at obtuse angles to the centroid.