Поиск кругов с помощью кругового преобразования Хафа
[ находит окружности с радиусами в диапазоне, указанном centers,radii] = imfindcircles(A,radiusRange)radiusRange. Дополнительный выходной аргумент, radii, содержит оценочные радиусы, соответствующие каждому центру окружности в centers.
[ также возвращает вектор столбца, centers,radii,metric] = imfindcircles(A,radiusRange)metric, содержащий величины пиков массива аккумуляторов для каждой окружности (в порядке убывания). Строки centers и radii соответствуют строкам metric.
[___] = imfindcircles(___, указывает дополнительные параметры с одним или несколькими Name,Value)Name,Value парные аргументы, использующие любой из предыдущих синтаксисов.
Точность imfindcircles ограничено, когда значение radius (или rmin) меньше или равно 5.
Шаг оценки радиуса обычно быстрее, если используется (по умолчанию) 'PhaseCode' метод вместо 'TwoStage'.
Оба метода вычисления, 'PhaseCode' и 'TwoStage' ограничены по своей способности обнаруживать концентрические окружности. Результаты для концентрических окружностей могут изменяться в зависимости от входного изображения.
imfindcircles не находит кругов с центрами вне области изображения.
imfindcircles предварительно обрабатывает двоичные (логические) изображения для повышения точности результата. Он преобразует цветные изображения в градации серого с помощью функции rgb2gray перед их обработкой.
imfindcircles использует алгоритм Circular Hough Transform (CHT) для поиска кругов в изображениях. Этот подход используется из-за его надежности при наличии шума, окклюзии и различной освещенности.
CHT не является строго определенным алгоритмом, скорее существует ряд различных подходов, которые могут быть приняты при его реализации. Однако в целом существует три важных шага, которые являются общими для всех.
Вычисление массива аккумуляторов
Передние пиксели высокого градиента обозначаются как предполагаемые пиксели и разрешаются отдавать «голоса» в накопительной матрице. В классической реализации CHT пиксели-кандидаты голосуют по шаблону вокруг них, который образует полный круг фиксированного радиуса. На фиг.1а показан пример пикселя-кандидата, лежащего на реальном круге (сплошном круге), и классический шаблон голосования CHT (пунктирные круги) для пикселя-кандидата.
Классическая схема голосования CHT

Оценка центра
Голоса пикселей-кандидатов, принадлежащих кругу изображения, имеют тенденцию накапливаться в ячейке массива накопителей, соответствующей центру круга. Следовательно, центры окружности оцениваются путем обнаружения пиков в накопительной матрице. На фиг.1b показан пример пикселей-кандидатов (сплошных точек), лежащих на реальном круге (сплошном круге), и их рисунков голосования (пунктирных кругов), которые совпадают в центре фактического круга.
Оценка радиуса
Если одна и та же накопительная матрица используется для более чем одного значения радиуса, как это обычно делается в алгоритмах CHT, радиусы обнаруженных окружностей должны оцениваться как отдельный шаг.
imfindcircles предоставляет два алгоритма поиска кругов на изображениях: фазовое кодирование (по умолчанию) и двухступенчатое. У обоих есть общие вычислительные шаги, но у каждого из них есть свои уникальные аспекты.
Общими вычислительными функциями, совместно используемыми обоими алгоритмами, являются:
Использование массива аккумуляторов 2-D
Классическое преобразование Хафа требует 3-D массива для хранения голосов для нескольких радиусов, что приводит к большим требованиям к хранению и длительному времени обработки. И фазовое кодирование, и двухступенчатый методы решают эту проблему, используя одну 2-D накопительную матрицу для всех радиусов. Хотя этот подход требует дополнительного этапа оценки радиуса, общая вычислительная нагрузка обычно ниже, особенно при работе в большом радиальном диапазоне. Это широко распространенная практика в современных реализациях CHT.
Использование краевых пикселов
Общие требования к памяти и скорость сильно зависят от количества возможных пикселей. Чтобы ограничить их количество, величина градиента входного изображения является пороговой, так что в подсчет голосов включаются только пиксели высокого градиента.
Использование информации об ориентации кромок
Другим способом оптимизации производительности является ограничение количества ячеек, доступных для возможных пикселей. Это достигается путем использования локально доступной краевой информации, позволяющей голосовать только в ограниченном интервале вдоль направления градиента (фиг.2).
Режим голосования: несколько радиусов, вдоль направления градиента

| rmin | Минимальный радиус поиска |
| rmax | Максимальный радиус поиска |
| ractual | Радиус круга, к которому принадлежит пиксель-кандидат |
| cmin | Центр окружности радиуса rmin |
| cmax | Центр окружности радиуса rmax |
| cactual | Центр окружности радиуса ractual |
Два метода CHT, используемые функцией imfindcircles принципиально отличаются по способу вычисления радиусов окружности.
Двухступенчатый
Радиусы явно оцениваются с использованием расчетных центров окружности вместе с информацией об изображении. Методика основана на вычислении радиальных гистограмм [2] .[3]
Фазовое кодирование
Ключевой идеей в фазовом кодировании [1] является использование комплексных значений в накопительном массиве с радиусной информацией, закодированной в фазе элементов массива. Голоса, поданные краевыми пикселями, содержат информацию не только о возможных местоположениях центра, но и о радиусе окружности, связанной с расположением центра. В отличие от двухступенчатого метода, в котором радиус должен быть оценен явным образом с использованием радиальных гистограмм, в фазовом кодировании радиус может быть оценен простым декодированием информации о фазе из оцененного местоположения центра в матрице накопителей.
[1] Ти Джей Атертон, Ди Джей Кербайсон. «Определение инвариантного круга размера». Вычисления изображения и зрения. Том 17, номер 11, 1999, стр. 795-803.
[2] Х.К. Юен, Дж. Принсен, Дж. Иллингворт и Дж. Киттлер. «Сравнительное исследование методов преобразования Хафа для поиска круга». Вычисления изображения и зрения. Том 8, номер 1, 1990, стр. 71-77.
[3] E.R. Davies, Machine Vision: теория, алгоритмы, практичности. Глава 10. 3-е издание. Morgan Kauffman Publishers, 2005.
hough | houghlines | houghpeaks | viscircles