LINUX.ORG.RU

Распознавание окружностей на изображении


0

1

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

Другой вариант - поочередно для каждого R строить один «срез» преобразования, искать максимумы, превосходящие некоторый предел (как его определять?) и сохранять координаты (x,y,R) вместе с полученным весом в определенный массив, затем уже сортировать это все по весам и определять окружности. Много памяти здесь не потребуется, но, кажется мне, алгоритм такой не лишен некоторой неопределенности и возможных потерь.

Подскажите, кто занимался подобной задачей: как вы определяете окружности на изображении?

☆☆☆☆☆

Ответ на: комментарий от Yareg

Забыл добавить: окружности могут быть просто набором пятен, а не замкнутыми кривыми.

Eddy_Em ☆☆☆☆☆
() автор топика

> Скажем, если взять малюсенькое изображение 1кХ1к и попытаться найти окружности и дуги окружностей с радиусами до 1к, с шагом в 1 пиксель по x,y и R

А если при поиске больших окружностей сжать (уменьшить) изображение в несколько раз? Окружность ведь останется окружностью и на маленькой картинке

amomymous ★★★
()
Ответ на: комментарий от amomymous

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

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от PolarFox

В принципе, это идея. Стоит попробовать. Если изображение по обоим измерениям в 10 раз сжать, для картинки 3кХ3к понадобится 200 с небольшим мегабайт.

Eddy_Em ☆☆☆☆☆
() автор топика

> как вы определяете окружности на изображении?

Пока - никак. Думаю над этой проблемой.
Кстати, она очень актуальна в обработке космических скнимков (поиск месторождений нефти и т.п.)

pacify ★★★★★
()

> Скажем, если взять малюсенькое изображение 1кХ1к и попытаться найти

окружности и дуги окружностей


Можно сделать вот что над миниатюрой изображения: 100x100 - 300x300 точек.
Брать каждую пару точек, и сравнивать средний цвет в их окрестностях.
Если «цвета» точек одинаковые (близкие) - проводить диаметр,
а середину диаметра с его длиной как-то запоминать.
Потом весь этот массив из <= 300^4 пар обработать, и найти
«точки сгущения» гипотетических центров диаметров с равными радиусами.

Как насчет такого алгоритма?

pacify ★★★★★
()
Ответ на: комментарий от pacify

Это будет очень медленно: во-первых, придется сначала дифференциальным фильтром получить две компоненты градиента (x и y); затем для каждой точки найти нормаль; где находится «центр» этой нормали можно определить, лишь нанеся все эти нормали на общее изображение и проанализировав максимумы. Определить радиус можно будет лишь восстановив все нормали для данной точки.

В общем, алгоритм рабочий, но крайне медленный получится.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Tark

Это совершенно «не в ту степь». По ссылке - самый обычный алгоритм отождествления объекта по маске при помощи вейвлет-образов.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

> придется сначала дифференциальным фильтром получить две компоненты градиента (x и y);

Я тебе предлагаю без градиентов - только на основе информации о цвете
двух окрестностей делать вывод, что, возможно, где-то посередине - центр.
Для 300x300 число пар 8.1 млрд (то есть - десяток гигабайт для белого квадратика 300x300).
По времени - не очень затратно. Зато потом - можно уточнять результат другими методами.

Может какие-то модификации его (этого метода) сделать?

pacify ★★★★★
()
Ответ на: комментарий от pacify

Это еще дольше будет: для каждой точки нужно будет определить подходящую пару... Преобразование Хафа намного быстрее.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

Преобразование Хафа намного быстрее.


Википедия:

Преобразование Хафа, в том виде, котором оно используется теперь, было изобретено в 1972. Изобретённый алгоритм назвали «обобщённым преобразованием Хафа» (патент 1962 г. Поля Хафа).

Хочешь патентованные американские методики использовать?

pacify ★★★★★
()
Ответ на: комментарий от Eddy_Em

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

Tark ★★
()
Ответ на: комментарий от Eddy_Em

Каждые три точки задают окружность. Попробуй фильтры для повышения
контрастности => отсечение по интенсивности => комбинаторные алгоритмы
(выбор C(n,k=3,4,5)).

pacify ★★★★★
()
Ответ на: комментарий от pacify

Спасибо, многое из этого я уже читал, посмотрю, что еще есть новенького...

Преобразование Хафа для отождествления прямых я уже реализовал (хочу, правда, немного расширить алгоритм для уточнения параметров прямых).

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от pacify

Да я-то с этими пятнами разобрался (алгоритм поиска 8-связанных областей находит мне эти пятна, затем я грубо определяю координаты центра, перевожу координаты в полярные относительно грубого центра, сортирую по R и phi, ищу маркеры и нумерую пятна), просто хочется более общий алгоритм получить - и для других типов изображения (например, калибровочные изображения, получающиеся при вращении всей этой картинки с открытой диафрагмой - выходят концентрические окружности).

Поначалу я хотел определять параметры окружностей при помощи метода наименьших квадратов, но что-то задачка вышла некорректная (из-за того, что на краях окружности производная стремится к бесконечности). Ну и этот метод не позволит определить параметры для дуг и других, более общих, случаев.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Obey-Kun

> Патент давно не действителен.

Обрадовали. Спасибо. :)
Значит, можно использовать у себя.

pacify ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.