Бинаризация рукописного лабиринта
Вложений: 1
Имеется алгоритм декодирования маршрута проезда специфического лабиринта в набор токенов.
Правила обхода пути очень просты:
Вопрос: Какие фильтры следует применять, если лабиринт нарисован от руки маркером или мелом на доске под любым углом?:write: Уточнения: В самом начале виден корявый лабиринт, нарисованый от руки в Paint. Потом он оквадрачивается в матрицу (всё прорисовал вручную, каждый кадр).:-? Варианты: Пробовал классический FloodFill с составлением массива координат линий заливки - слишком много данных и не знаю, как систематизировать. Хотел применять алгоритм чтения QR-кода, но мне не нужны три ключевых квадрата на углах.:agree: Так же пытался пустить жука с "радаром", который двигается в направлении дальнего горизонта и составляет список поворотов, но не смог сформулировать в скрипте (js+canvas). А выгугленный алгоритм использует уже бинаризованый лабиринт с шагом в 1 пиксел. Спасибо! |
Цитата:
Что касается обхода лабиринта - отдельная тема. Я бегло посмотрел статью. На первый взгляд ни о чем :) См. в сторону 1. Неинформированные методы поиска (в пространстве состояний) 2. Информированные методы поиска (в пространстве состояний) 3. Визуализация работы информированных методов поиска --- Если интересно, почти все неинформированные методы я реализовал в рамках своего проекта https://github.com/nervgh/recursive-iterator http://javascript.ru/forum/project/5...-iterator.html Информированные(й) в рамках форка (на скорую руку) http://javascript.ru/forum/project/1...tml#post377012 |
Вложений: 1
Цитата:
Нужно кривой лабиринт, нарисованый на бумаге и захваченый WebCamer'ой в режиме реального времени обойти. Мой "жук" его обходит только в случае, когда путь имеет ширину в 1 пиксел. Тем самым, мне нужен фильтр, который не просто векторизирует растровую размазню 1:1, а просто составляет список координат горизонтальных и вертикальных коридоров. Вот как на анимашке ниже: Сначала - два варианта одного лабиринта от руки (кривой и ещё кривее), а потом ровные фиолетовые линии. В конце - многократный зум микроскопического лабиринта 14x10 пикселей.:dance: Т.е. мне надо изображение 128x110 аккуратно уменьшить до 14x10, сохранив структуру маршрута для жука. (построчная заливка и прочие методы не дают нужного результата) Спасибо!:thanks: |
Цитата:
|
Вложений: 1
Цитата:
Я привык работать с растровыми изображениями (типа используя mmx/sse на ассемблере фильтровать кадры), а вот векторные алгоритмы - тёмное дело. Вот что выдаёт мой скрипт в окне FireFox. Некоторые линии прорисовываются дважды. Алгоритм: Нахожу первую чёрную точку.
Жёлтые и красные - соответственно вертикальные (север/юг) и горизонтальные (запад/восток) направляющие. (есть, правда, идея учитывать ширину линии, чтобы ошибочно не проходить сквозь перекрёстки. но это пока довольно сложно мне) В идеале (в бинарном массиве) формируется таблица декодирования (в матрице жук её формирует):
|
Paguo-86PK, ok, я тебя понял. Моя ссылка
Цитата:
Не знаю зачем тебе это надо, но задача любопытная :) Немного позднее попытаюсь порассуждать на этот счет в картинках в том числе. |
Вложений: 1
Описываю ниже свое понимание
Цитата:
Упрощенный вариант 1. определить размер кисти 2. выпрямить линии 3. сжать до "однопиксельных" размеров Попытаюсь описать как Цитата:
- имеем точки, описывающие линию (A - начало, B - конец) - строим вектор AB по этим точкам (выделено зеленым) - помещаем его в двумерную координатную плоскость (x-y) так, как показано на рисунке - т.о. теперь имеем три вектора OX, OY, AB - ищем угол между векторами OX & AB - ищем угол между векторами OY & AB - сравниваем углы, какой меньше, в ту сторону и выпрямляем - выпрямление происходит на длину вектора согласно шагу кисти https://yadi.sk/d/K63ZmF-1iR4up |
Вложений: 2
Ну, что, товарищи, кто
1. расставит на этом (original) безобразии опорные точки (pivot_points) 2. и представит его в виде векторов (линий) ? :) |
Мне лениво, как то пытался решить задачу векторизации пути проложенного карандашом по клеточной бумаге(Хотел заскриптить студенческую игрушку векторных гонок(на проложенном карандашом маршруте) на уч. парах) - не добил...
Кстать привязка к координатной сетке и расчет минимально-необходимого вектора(в пикселах) упрощают задачу Ксать лабиринт тож лучше перепарсивать с привязкой к сетке, ибо криворукий - несимпатичен По идее там либо вертикальные линии, либо горизонтальные - иных нет(в отличие от маршрута векторных гонок) |
Алгоритм - бета-вариант
Вложений: 1
Цитата:
Чтобы не быть голословным, в архиве - мой сырейщий алгоритм (работает лишь в Opera 12 и FireFox почему-то:blink: А chrome только с --disable-web-security) и gif-лабиринт, который выдаёт пачку дублирующих линий. Нужно, как в п.1, определить размер кисти и учитывать его. (в gif'ке первый кадр я подправил так, чтобы чтение начиналось с нужной позиции: В идеале, чтение начинается с кольца (восток+юг+запад+север) и если в кадре лабиринт перевёрнут, алгоритм должен это учитывать. Но до этого пока очень далеко) |
Часовой пояс GMT +3, время: 01:25. |