Наиболее удобным в этом случае является преобразование Хафа для окружностей. Но, увы, на выходе оно дает огромное количество данных. Скажем, если взять малюсенькое изображение 1кХ1к и попытаться найти окружности и дуги окружностей с радиусами до 1к, с шагом в 1 пиксель по x,y и R, получим порядка 8Гб данных. Что для «обычных» компьютеров совершенно неприемлемо (сохранять на диск не имеет смысла - скорость вычисления в этом случае будет вообще «поражающей воображение»).
Другой вариант - поочередно для каждого R строить один «срез» преобразования, искать максимумы, превосходящие некоторый предел (как его определять?) и сохранять координаты (x,y,R) вместе с полученным весом в определенный массив, затем уже сортировать это все по весам и определять окружности. Много памяти здесь не потребуется, но, кажется мне, алгоритм такой не лишен некоторой неопределенности и возможных потерь.
Подскажите, кто занимался подобной задачей: как вы определяете окружности на изображении?