Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Последовательный обход замкнутого контура 
:(
    Опции темы
DemonVex
Дата 30.5.2009, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 11.6.2005

Репутация: нет
Всего: нет



Имеется контур фигуры человека (рисунок в аттаче).
Требуется последовательно обойти контур начиная с точки на голове и заканчивая там же.

Это сообщение отредактировал(а) DemonVex - 30.5.2009, 15:46

Присоединённый файл ( Кол-во скачиваний: 30 )
Присоединённый файл  2009_05_30_153126_cr.png 3,00 Kb
PM MAIL   Вверх
maxim1000
Дата 30.5.2009, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



есть такая процедура - скелетизация (skeletonization)
в результате для замкнутого контура получится последовательность точек, каждая из которых имеет по два соседа, так что пройтись будет довольно-таки просто: запоминаем, откуда пришли, и туда не идём, тогда остаётся ровно один сосед, куда и нужно идти


--------------------
qqq
PM WWW   Вверх
cardinal
Дата 30.5.2009, 22:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



Немного другой метод знаю. Суть там в поворотах налево или направо. Начинаем в точке контура. Если черная, то поворачиваем влево, если белая, то вправо. Таким образом змейкой обходим контур.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
DemonVex
Дата 31.5.2009, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 11.6.2005

Репутация: нет
Всего: нет



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

Это сообщение отредактировал(а) DemonVex - 31.5.2009, 08:31
PM MAIL   Вверх
maxim1000
Дата 31.5.2009, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



а мне, кстати, метод, описанный cardinal больше нравится smile
скелетизация требует прохода по всему изображению несколько раз, оптимизировать, конечно, можно, но так или иначе будет выполняться значительно больше работы

во втором методе будет обработано ровно столько точек, сколько нужно, не нужно будет дополнительной памяти (для скелетизации без неё у меня обойтись не получалось)

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


--------------------
qqq
PM WWW   Вверх
DemonVex
Дата 31.5.2009, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 11.6.2005

Репутация: нет
Всего: нет



Попробую реализовать второй алгоритм. Посмотрю на устойчивость в этой задаче.

Это сообщение отредактировал(а) DemonVex - 31.5.2009, 13:43
PM MAIL   Вверх
Pavia
Дата 1.6.2009, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



maxim1000
Для скелетизации не нужно проходить все изоброжение много раз. Есть волновой алгоритм скелетизации.
http://ocrai.narod.ru/vectory.html

Причем позовершению работы будем иметь не только скелет, но и обойденный контур.
PM MAIL   Вверх
LOD77
Дата 1.6.2009, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 2.5.2009

Репутация: 1
Всего: 1



Рекомендую правосторонний (левосторонний) обход. Принцип элементарный. Сканируем матрицу пикселов пока не встречаем черный (но сами остаемся на белом). Дальше начинаем обход
1. Запоминаем свои координаты.
2. Если можно двигаться в текущем направлении, то перемещаемся на один пиксель (двигаемся только по белым точкам) и поворачиваемся (на месте, просто изменяем направление) по часовой стрелке на 90 градусов. А в противном случае (если двигаться не можем) то поворачиваемся на 90 градусов против часовой стрелки.
3. После каждого перемещения, проверяем не вернулись ли мы в исходную точку. Если нет, то переходим к пункту 2, иначе конец.
Все.
Реализуется в 5 строчек.
PM MAIL   Вверх
cardinal
Дата 1.6.2009, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



LOD77 расписал по пунктам то, что я предложил пару постов выше... smile 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0780 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.