Oh boy!
De facon general, c'est un probleme complique. Les techniques de bases sont proches de ce que tu raconte, tu as un ensemble de forme que tu veux reconnaitre. Ces formes sont "modelise" par un ensemble de parametre. centre, rayon pour un cercle, un point et une distance pour un carre...
Ensuite, tu cherche a trouve le meilleur cercle qui correspond a ta forme. Mais aussi le meilleur carre... Pour cela il te faut une genre de fonction d'erreur qui qualifie si la forme ressemble bien a ce carre ou a ce cercle ou pas. Et ensuite tu decide si c'est plus proche d'un cercle, ou d'un carre ou d'un je-sais-pas-quoi.
Quand on veut reconnaitre des formes complique, c'est a la mode d'utiliser un outil appelle "morphologie mathematique"