Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Алгоритм поиска окружности на изображении  (Прочитано 24524 раз)
0 Пользователей и 1 Гость смотрят эту тему.
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« : 27-09-2006 04:13 » 

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

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
Alf
Гость
« Ответ #1 : 27-09-2006 06:36 » 

На фотографии может быть что угодно, или есть ограничения?

Окружность видна полностью? Или может быть частично  перекрыта предметами на переднем плане?
Записан
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #2 : 27-09-2006 08:26 » 

На фотографии может быть что угодно, или есть ограничения?

Окружность видна полностью? Или может быть частично  перекрыта предметами на переднем плане?
Окружность видна полностью, но она может быть немного не ровной типа эллипса
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #3 : 27-09-2006 08:30 » 

На фотографии всякая ерунда и несколько окружностей которые надо найти
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #4 : 27-09-2006 08:33 » 

Задача минимум определить наличие/отсутствие черного закрашеного круга примерно в середине картинки +- несколько сантиметров и обозначить его центр.
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
Alf
Гость
« Ответ #5 : 27-09-2006 10:16 » 

А с другими черными пятнами круг может перекрываться?
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 27-09-2006 10:42 » 

Может нейросеть обучить?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sands
Помогающий

ua
Offline Offline

« Ответ #7 : 27-09-2006 12:20 » 

А может использовать свойства преобразования Фурье?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 27-09-2006 16:43 » 

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

Sands
Помогающий

ua
Offline Offline

« Ответ #9 : 27-09-2006 17:48 » 

Как по мне, так анализ залитых участков на "похожесть" секторам круга особо ничем не отличается от поиска самого круга (с точки зрения программирования для автоматизации) а если ручками(ну в смысле глазами) так любой может с легкостью найти на фото круг, при условии его нормальной выделяемости на общем фоне вообще.
Записан
Alf
Гость
« Ответ #10 : 27-09-2006 20:20 » 

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

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

Ну а дальше остается:
- проверить оставшиеся контуры, годятся ли они на роль кандидатов в эллипсы; (1)
- построить прямоугольник, описанный около контура (его центр - это предполагаемый центр эллипса); (2)
- найти прямые, соответствующие осям эллипса; (3)
- если они не параллельны координатным осям, выполнить поворот; (4)
- заново описать прямоугольник около преобразованного контура; (5)
- преобразовать координаты таким образом, чтобы прямоугольник превратился в квадрат, при этом если наш контур был эллипсом, он должен превратиться в окружность; (6)
- оценить отклонение нашей фигуры от окружности (например, подсчитать среднее расстояние от точек контура до центра и, взяв его в качестве радиуса, рассчитать среднеквадратическое отклонение расстояния каждой точки контура до центра от радиуса).



Вроде бы все, должно сработать.

* Circle.gif (9.54 Кб - загружено 5873 раз.)
Записан
Alf
Гость
« Ответ #11 : 27-09-2006 20:25 » 

P.S.
Можно для пущей гладкости сначала по контурам сплайнами пройтись, думаю, это позволит лучше справиться  с мелкими дефектами изображения.

P.P.S.
А может использовать свойства преобразования Фурье?

О каких именно свойствах преобразования Фурье идет речь?
Записан
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #12 : 28-09-2006 05:28 » 

Alf,
Есть какие нибудь методы преобразования растра в векторные линии? Насколько я понимаю у меня будет куча точек которые нужно привести к линии или окружности. Нетривиальная задача по моему
dimka,
Нейросети бы не хотелось пока трогать
Sands,
Ага, что за свойства?
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
Alf
Гость
« Ответ #13 : 28-09-2006 07:14 » 

Alf,
Есть какие нибудь методы преобразования растра в векторные линии? Насколько я понимаю у меня будет куча точек которые нужно привести к линии или окружности. Нетривиальная задача по моему

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

Первое, что приходит в голову, - попытаться искать границу областей разного цвета. Для этого сначала найти хотя бы одну граничную точку. В качестве критерия принадлежности точки границе предлагаю такой:
- сама точка должна быть цвета области;
- хотя бы одна соседняя точка должна быть цвета области (избавляемся от однопиксельных "контуров");
- хотя бы одна соседняя точка должна быть цвета фона.

Полагаю, что достаточно будет рассматривать четыре соседние точки (см. рисунок).



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

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

* Circle2.gif (4.15 Кб - загружено 4399 раз.)
Записан
Sands
Помогающий

ua
Offline Offline

« Ответ #14 : 28-09-2006 08:42 » 

Нащет свойств преобразования Фурье - так ето то, что для пропорциональных функций результат преобразования будет тоже пропорциональным, таким образом находим контур и заделываем  внем преобразование Фурье, ну и сравниваем его с еталоном, который можно построить самому имея в наличии какой-то другой круг.
А вообще относительно поиска, рискну предложить идею перейти в полярные координаты, тогда круг по идее должен превратится в квадрат, а елипс в прямоугольник, ну а их по идее найти проще.
Записан
Sands
Помогающий

ua
Offline Offline

« Ответ #15 : 28-09-2006 08:48 » 

А нащет преобразования точек в регулярные структуры - так ето вообще нетривиальная задача. У нас в универе над ней уже несколько лет бьются результаты некоторые есть, но так чтоб навскидку и не приведу.
Записан
Alf
Гость
« Ответ #16 : 28-09-2006 08:55 » 

А можно это дело проиллюстрировать? Не получается наглядно представить эллипс, который в полярных координатах превратится в прямоугольник.

Да и насчет Фурье хотелось бы посмотреть, как это будет выглядеть.
Записан
Sands
Помогающий

ua
Offline Offline

« Ответ #17 : 28-09-2006 09:40 » 

сорри, с утреца туплю, с елипсом немного загнул, с кем не бывает Улыбаюсь, а относительно преобразования Фурье, у меня дома где-то вроде были формулки, если я их правильно понял. Постараюсь найти.
Записан
Etien
Интересующийся

ru
Offline Offline
Пол: Мужской

« Ответ #18 : 24-01-2010 00:44 » 

  Если у Вас окружность чем-то выделена, скажем амплитудой яркости или цветом, то можно попробовать случайно выбрасывать три точки из всего изображения, такие что по этому критерию могут принадлежать окружности. По этим точкам строите окружность, получаете X, Y координаты и R. Заносите на гистограммы координат и радиуса соответственно +1. Так делаете до тех пор, пока на этих гистограммах не прорежутся пики. Это первичная пристрелка, дальше можете проверять действительно ли это окружность любыми удобными методами. Шумовая подложка в гистограммах конечно-же будет, но с ростом числа проверок соотношение сигнал\шум будет расти. Для нескольких окружностей должно быть несколько пиков. Кому какой принадлежит проверяете комбинируя между собой.
  Теорию метода не помню, но нечто подобное и давно делали. Работало.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines