I am trying to find a way to identify the target of archery and all its rings in a photograph that can be taken from different angles:

My goal is to determine the goal, and then also, when the arrows hit the target, to automatically calculate their score. Assumptions are as follows:
- The camera position is not fixed and may change
- The archery target can also move or rotate slightly
- The target can be of different sizes and have a different number of circles.
- There may be many holes in the object (sometimes large scratches).
I already tried OpenCV to search for contours, but even with preprocessing (grayscale β blur (-> threshold) β edge detection) I still find some closed contours that are all distracted by arrows or other obstacles (holes) on the target, so it's impossible find a good circular line. Using Hough to find circles doesn't work, as it will give me results when Hough finds only perfect circles, not ellipses.
With image preprocessing, this is my best result:

I thought about the ellipse and the circle fit, but since I donβt know the radius, position and position of the target, this can be a very difficult task. Another thought was to use pattern recognition, but the position and rotation of the target often change.
Now I have an idea to follow each line in the image to check if it is a curve, and then guess which curves belong together to form a circle / ellipse (ellipse due to perspective). The problem is that the lines can be crossed by arrows or holes at a short distance so that the line is too short to check if it is a curve. With smaller circles on the target, the chance is high that it is not recognized at all. In addition, as you can see, circles 8, 7 and 6 do not have a clear line on the left side.
I think that in order to achieve this, it is not necessary to carry out a perspective correction if I can clearly identify all the rings in the goal.
I searched Google for a long time and found a thesis that is not completely focused on this particular task, and is also too mathematical to understand.
Is it possible to achieve this goal? Could you share with me an idea how to solve this problem? Everything is much appreciated.
I do this in Java, but the programming language is secondary. Please let me know if you need more information.