I am trying to semi-circles and full circles in an image.

This is the process I'm following :
Process image (including Canny edge detection)
Find contours and draw them on an empty image, so that I can eliminate unwanted components. (The processed image is exactly what I want.)
Detect circles using HoughCircles. And this is what I get.

I accept or reject a circle based on it's size. So the result is not acceptable. Also I have a long list of "acceptable" circles so I need some allowance in the HoughCircle params. As for the full circles, it's easy - I can simply find the "roundness" of the contour. The problem is semi-circles!

Are you struggling to come up with the algorithm to identify a semi-circle, given a set of contours, or do you have your algorithm and you're struggling to code it?