![]() |
|
![]() ![]() ![]() |
|
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Всем привет,
Есть такая задача, пусть есть 10 идентичных фигур, в простейшем случае квадратов или кругов, разного размера. Эти фигуры нарисованы вместе с другими фигурами. Задается, например, круг. Решением будет, является все десять найденных кругов на рисунке. В данном случае все пропорции идеальны (предполагается, что человек ничего не рисует от руки) Какие есть алгоритмы для этой задачи? -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: 1 Всего: 7 |
Я бы занялся вычислением и сравнением функции аппроксимации. А потом в качестве критерия для сравнения брал бы полученные функции с отброшенными коэффициентами.
-------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Очень простые. Находятся все точки, принадлежащие одной отдельно взятой фигуре, затем проверяется, соотвествует ли расположение точек геометрическому условию. Т.е., если ищешь круг, то лежат л все эти точки совместно на кривой, удовлетворяющей уравнению x^2+y^2=R^2. В первом приближении все просто пока не начнешь реализовывать ![]() |
|||
|
||||
maxim1000 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
а они могут пересекаться? а то ведь
может вызвать трудности... -------------------- qqq |
||||
|
|||||
Alex101 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 1 Всего: 10 |
Тут главный вопрос - что является исходными данными.
Когда ответ будет, тогда будет ясно как решать. -------------------- С уважением, А. Фролов. |
|||
|
||||
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
К сожалению этот подход не универсален, а если это восьмиугольник или еще что? Вот пример http://polfin.narod.ru/pict/pic1.PNG Это сообщение отредактировал(а) Royan - 21.7.2005, 17:52 -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
Alex101 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 1 Всего: 10 |
Royan,
как данные заданы? Эту задачу можно и аналитически решать и численно. -------------------- С уважением, А. Фролов. |
|||
|
||||
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
В моем случае это практическая задача. Можно считать, что есть битмап и на нем разные фигурки. Соответственно все точки (пикселы) без проблем можно отличить друг от друга при этом пока условия достаточно просты - все фигуры исключительно черного цвета, а весь фон белый.
Добавлено @ 13:41 Аналитечески или численно мне бы хоть идею подобрать... -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
А если подумать? ![]() Отдельно ищешь круги, отдельно квадраты, отдельно треугольники. Можешь сперва начать просто с поиска отдельных прямых отрезков. |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 7 Всего: 183 |
Сначала ищешь просто замкнутые цепочки точек. Потом "примеряешь" к ним фигуры из списка (окружность, квадрат, и т.д.) и смотришь, на что больше похоже.
"Больше похоже" - это какой-нибудь статистический критерий, например среднеквадратическая ошибка. Конечно, нужно нормировать на размер фигуры. С окружностью все просто (да и с любой полиномиальной кривой) - строешь ее МНК по всем точкам и смотришь ошибку. С квадратами и треугольниками похуже, поскольку сначала нужно выделить углы. При идеальных линиях это несложно - например, полигональная аппроксимация. По разбиению строишь отрезки, и т.д. Если все фигуры правильные, можно, как предложил DENNN, сделать предположение о положении углов, и написать уравнения МНК для каждой фигуры, но мне кажется, что проще разбить на отрезки. Да и универсальней это. Когда шум достаточно велик, или фигуры пересекаются - уже сложнее. Но в любом случае, начинать нужно с поиска простых цепочек. -------------------- ... |
|||
|
||||
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Не знаю знаком ли кто из вас с термином "Hough transform" так или иначе вот ссылка на ресурс http://rkb.home.cern.ch/rkb/AN16pp/node122.html, где об этом кое что говорится. Быть может, кто может высказать авторитетную мысль потому сможет ли это пригодится в моем случае или нет?
На самом деле идея у меня была использовать какую-то технологию для обучения нейронной сетки, но похоже такая методика сложна из-за разных размеров фигур. Можно конечно попробовать сети типа SOM (Self organizing map) и таким образом попытаться выделить общие признаки. -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Трансформация Хоуга - знаком. Первый патент датирован аж 1968 годом.
![]() Нейронная сетка могла бы помочь, если у тебя просто есть изображение с одной фигурой. Иначе слишком это сложная задача - не ясно сколько слоев необходимо, как обучать и пр.. Очень интересные результаты дают методы, в которых фигуры и эталоны координируются не декартовыми координатами, а полярными. Но мой тебе совет: займись сначала задачей просто выделения контура, а уже после интерпертацией групп пикселей. |
|||
|
||||
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Нет, идея не в лоб учить сетку. В такой задаче надо последовательно использовать несколько сеток, одна выделяет регионы, где находятся фигуры другая, например, выполняет классификацию каких одних фигур, далее третья уже распознает настоящие фигуры. -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 7 Всего: 183 |
Согласна с DENNN и насчет сетки, и насчет Hough transform. Только по-моему, по русски - это преобразование Хафа, а не Хоуга. Короче, выглядит элегантно и вроде подкупает простотой - на первый взгляд. Но при попытке реализовать быстро выясняется, что идентифицировать факт, что прямая с такими-то параметрами есть, достаточно легко (с учетом шума и т.д.) Но вот какие именно точки составляют прямую, начало-конец отрезка - как только пытаешься все это учесть-запомнить, такой геморрой наступает, что все изящество преобразования как-то теряется. Причем для обнаружения окружностей нужно другое преобразование, уже посложнее.
Поиграться в Хафа можно, даже интересно, с познавательной точки зрения, но с практической, ИМХО, нужно сначала выделить контура, а потом попытаться классифицировать. -------------------- ... |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Да. Только в литературе обычно употребляется "преобразование Хоуг" (например К.Фу, Н.Гонсалес, К.Ли "Робототехника"), а в интернете более жаргонное "преобразование Хафа". ИМХО, первое более верно, т.к. более схоже с ангийским звучанием. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |