imfindcircles

Найдите круги с помощью кругового Преобразования Хафа

Синтаксис

centers = imfindcircles(A,radius)
[centers,radii] = imfindcircles(A,radiusRange)
[centers,radii,metric] = imfindcircles(A,radiusRange)
[___] = imfindcircles(___,Name,Value)

Описание

centers = imfindcircles(A,radius) находит круги в изображении A, радиусы которого приблизительно равны radius. Вывод, centers, является матрицей 2D столбца, содержащей координаты x,y центров кругов в изображении.

[centers,radii] = imfindcircles(A,radiusRange) находит круги с радиусами в области значений заданными radiusRange. Дополнительный выходной аргумент, radii, содержит предполагаемые радиусы, соответствующие каждому центру круга в centers.

пример

[centers,radii,metric] = imfindcircles(A,radiusRange) также возвращает вектор-столбец, metric, содержа значения peaks аккумулятора массивов для каждого круга (в порядке убывания). Строки centers и radii соответствуют строкам metric.

пример

[___] = imfindcircles(___,Name,Value) задает дополнительные опции с одним или несколькими аргументами пары Name,Value, с помощью любого из предыдущих синтаксисов.

Примеры

свернуть все

Этот пример показывает, как найти все круги в изображении, и как сохранить и отобразить самые сильные круги.

Считайте полутоновое изображение в рабочую область и отобразите ее.

A = imread('coins.png');
imshow(A)

Найдите все круги с радиусом пикселями r в области значений [15, 30].

[centers, radii, metric] = imfindcircles(A,[15 30]);

Сохраните пять самых сильных кругов согласно метрическим значениям.

centersStrong5 = centers(1:5,:); 
radiiStrong5 = radii(1:5);
metricStrong5 = metric(1:5);

Чертите пять самых сильных круговых периметров по оригинальному изображению.

viscircles(centersStrong5, radiiStrong5,'EdgeColor','b');

Считайте изображение в рабочую область и отобразите его.

A = imread('circlesBrightDark.png');
imshow(A)

Задайте область значений радиуса.

Rmin = 30;
Rmax = 65;

Найдите все яркие круги в изображении в области значений радиуса.

[centersBright, radiiBright] = imfindcircles(A,[Rmin Rmax],'ObjectPolarity','bright');

Найдите все темные круги в изображении в области значений радиуса.

[centersDark, radiiDark] = imfindcircles(A,[Rmin Rmax],'ObjectPolarity','dark');

Проведите синие линии вокруг ребер ярких кругов.

viscircles(centersBright, radiiBright,'Color','b');

Проведите красные пунктирные линии вокруг ребер темных кругов.

viscircles(centersDark, radiiDark,'LineStyle','--');

Входные параметры

свернуть все

Входное изображение является изображением, в котором можно обнаружить круговые объекты, заданные как шкала полутонов, истинный цвет или двухуровневое изображение.

Типы данных: single | double | int16 | uint8 | uint16 | logical

Круговой радиус является аппроксимированным радиусом круговых объектов, которые что вы хотите обнаружить, заданный как скаляр любого числового типа.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Область значений радиусов для проспекта возражает, что вы хотите обнаружить, заданный как вектор с 2 элементами целых чисел формы [rmin rmax].

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'ObjectPolarity','bright' задает яркие круговые объекты на темном фоне.

Объектная полярность указывает, являются ли круговые объекты более яркими или более темными, чем фон, заданный как пара, разделенная запятой, состоящая из 'ObjectPolarity' и любое из значений в следующей таблице.

'bright'Круговые объекты более ярки, чем фон.
'dark'Круговые объекты являются более темными, чем фон.

Метод вычисления является методом, используемым, чтобы вычислить массив аккумулятора, заданный как пара, разделенная запятой, состоящая из 'Method' и любое из значений в следующей таблице.

'PhaseCode'Атертон и Кербизон [1] метод кодирования фазы. Это значение по умолчанию.
'TwoStage'Метод используется в круговом Преобразовании Хафа 2D этапа [2], [3].

Пример: 'Method','PhaseCode' задает Атертон и метод кодирования фазы Кербизона.

Фактором чувствительности является чувствительность для кругового массива аккумулятора Преобразования Хафа, заданного как пара, разделенная запятой, состоящая из 'Sensitivity' и номера в области значений [0,1]. Когда вы увеличиваете фактор чувствительности, imfindcircles обнаруживает больше круговых объектов, включая слабые и частично затененные круги. Более высокие значения чувствительности также увеличивают риск ложного обнаружения.

Порог градиента ребра устанавливает порог градиента для определения краевых пикселей в изображении, заданном как пара, разделенная запятой, состоящая из 'EdgeThreshold' и номера в области значений [0,1]. Задайте 0, чтобы установить порог к нулевой величине градиента. Задайте 1, чтобы установить порог к максимальной величине градиента. imfindcircles обнаруживает больше круговых объектов (и со слабыми и с сильными ребрами), когда вы устанавливаете порог к нижнему значению. Это обнаруживает меньше кругов со слабыми ребрами, когда вы увеличиваете значение порога. По умолчанию imfindcircles выбирает порог градиента ребра автоматически с помощью функционального graythresh.

Пример: 'EdgeThreshold',0.5 устанавливает порог градиента ребра к 0.5.

Выходные аргументы

свернуть все

Координаты центров круга, возвращенных как P-by-2 матрица, содержащая x - координат центров круга в первом столбце и y - координируют во втором столбце. Количество строк, P, является количеством обнаруженных кругов. centers сортируется на основе силы кругов.

Предполагаемые радиусы для центров круга, возвращенных как вектор-столбец. Значение радиуса в radii(j) соответствует кругу, сосредоточенному в centers(j,:).

Круговые сильные места являются относительными сильными местами для центров круга, возвращенных как вектор. Значение в metric(j) соответствует кругу с радиусом radii(j), сосредоточенный в centers(j,:).

Советы

  • Задайте относительно маленький radiusRange для лучшей точности. Хорошее эмпирическое правило должно выбрать radiusRange, таким образом что rmax < 3*rmin и (rmax-rmin) < 100.

  • Точность imfindcircles ограничивается, когда значение radius (или rmin) меньше чем или равно 5.

  • Шаг оценки радиуса обычно быстрее, если вы используете метод 'PhaseCode' (по умолчанию) вместо 'TwoStage'.

  • И методы вычисления, 'PhaseCode' и 'TwoStage' ограничиваются в их способности обнаружить концентрические круги. Результаты для концентрических кругов могут отличаться в зависимости от входного изображения.

  • imfindcircles не находит круги с центрами вне области изображения.

  • imfindcircles предварительно обрабатывает бинарные (логические) изображения, чтобы улучшить точность результата. Это преобразовывает изображения истинного цвета в шкалу полутонов с помощью функционального rgb2gray прежде, чем обработать их.

Алгоритмы

imfindcircles использует основанный на Круговом преобразовании Хафа (CHT) алгоритм для нахождения кругов в изображениях. Этот подход используется из-за его робастности в присутствии шума, поглощения газов и переменного освещения.

CHT не является строго заданным алгоритмом, скорее существует много разных подходов, которые могут быть проявлены в его реализации. Однако в общем и целом существует три существенных шага, которые характерны для всех.

  1. Вычисление аккумулятора массивов

    Приоритетные пиксели высокого градиента определяются как являющийся пикселями кандидата и позволены отдать 'голоса' в массиве аккумулятора. В классической реализации CHT пиксели кандидата голосуют в шаблоне вокруг них, который формирует полный круг фиксированного радиуса. Рисунок 1a показывает пример пикселя кандидата, лежащего на фактическом круге (твердый круг) и классический избирательный шаблон CHT (подчеркнутые штриховой линией круги) для пикселя кандидата.

    Классический избирательный шаблон CHT

  2. Центральная оценка

    Голоса пикселей кандидата, принадлежащих кругу изображений, имеют тенденцию накапливаться в интервале аккумулятора массивов, соответствующем центру круга. Поэтому центры круга оцениваются путем обнаружения peaks в массиве аккумулятора. Рисунок 1b показывает пример пикселей кандидата (твердые точки) лежащий на фактическом круге (твердый круг), и их избирательные шаблоны (подчеркнутые штриховой линией круги), которые совпадают в центре фактического круга.

  3. Оценка радиуса

    Если тот же массив аккумулятора используется больше чем для одного значения радиуса, как обычно делается в алгоритмах CHT, радиусы обнаруженных кругов должны быть оценены как отдельный шаг.

imfindcircles предоставляет два алгоритма для нахождения кругов в изображениях: кодирование фазы (значение по умолчанию) и 2D Этап. Обе доли некоторые общие вычислительные шаги, но у каждого есть ее собственные специфические аспекты также.

Общие вычислительные функции, совместно использованные обоими алгоритмами, следующие:

  • Использование 2D массива аккумулятора

    Классическое Преобразование Хафа требует трехмерного массива для хранения голосов за несколько радиусов, который приводит к большим требованиям устройства хранения данных и долгие времена вычислений. Оба методы Кодирования Фазы и 2D Этапа решают эту проблему при помощи одного 2D массива аккумулятора для всех радиусов. Несмотря на то, что этот подход требует дополнительного шага оценки радиуса, полная вычислительная загрузка обычно ниже, особенно при переработке большой области значений радиуса. Это - широко принятая практика в современных реализациях CHT.

  • Использование краевых пикселей

    Полными требованиями к памяти и скоростью строго управляет количество пикселей кандидата. Чтобы ограничить их номер, величина градиента входного изображения является порогом так, чтобы только пиксели высокого градиента были включены в соответствие голосам.

  • Использование информации об ориентации ребра

    Другой способ оптимизировать производительность состоит в том, чтобы ограничить количество интервалов, доступных пикселям кандидата. Это выполняется путем использования локально доступной информации о ребре, чтобы только разрешить голосовать в ограниченном интервале вдоль направления градиента (рисунок 2).

    Режим голосования: несколько радиусов, вдоль направления градиента

rminМинимальный поисковый радиус
rmaxМаксимальный поисковый радиус
ractualРадиус круга, которому принадлежит пиксель кандидата
cminЦентр круга радиуса rmin
cmaxЦентр круга радиуса rmax
cactualЦентр круга радиуса ractual

Два метода CHT, используемые функциональным imfindcircles существенно, отличаются таким образом, которым вычисляются круговые радиусы.

  • 2D этап

    Радиусы явным образом оцениваются, используя предполагаемые центры круга наряду с данными изображения. Метод основан на вычислительном радиальном [2] [3] гистограмм.

  • Кодирование фазы

    Ключевая идея в Фазе, Кодирующей [1], является использованием комплексных чисел в массиве аккумулятора с информацией о радиусе, закодированной в фазе записей массива. Голоса краевыми пикселями содержат информацию не только о возможных центральных местоположениях, но также и о радиусе круга, сопоставленного с центральным местоположением. В отличие от метода 2D Этапа, где радиус должен быть оценен явным образом с помощью радиальных гистограмм в Фазе, Кодирующей радиус, может быть оценен путем простого декодирования информации о фазе от предполагаемого центрального местоположения в массиве аккумулятора.

Вопросы совместимости

развернуть все

Поведение изменяется в R2019a

Ссылки

[1] T.J Атертон, Д.Дж. Кербизон. "Инвариант размера круговое обнаружение". Изображение и Вычисление Видения. Объем 17, Номер 11, 1999, стр 795-803.

[2] Х.К Юэн.J. Princen, Дж. Иллингуорт и Дж. Киттлер. "Сравнительное исследование методов Преобразования Хафа для открытия круга". Изображение и Вычисление Видения. Объем 8, Номер 1, 1990, стр 71–77.

[3] Э.Р. Дэвис, машинное зрение: теория, алгоритмы, практичность. Глава 10. 3-й выпуск. Издатели Моргана Кауфмана, 2005,

Расширенные возможности

Смотрите также

| | |

Представленный в R2012a