Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Turbo Site Admin
Зарегистрирован: 19.02.2006 Сообщения: 248
|
Добавлено: Ср Апр 16, 2008 8:52 am Заголовок сообщения: Ваши решения для задачи "Глаз Робота" |
|
|
В этой теме можно обсудить ваш подход к решению этой задачи. |
|
Вернуться к началу |
|
|
zhengxi
Зарегистрирован: 25.03.2008 Сообщения: 19
|
Добавлено: Ср Апр 16, 2008 12:18 pm Заголовок сообщения: |
|
|
Уборка мусора: раскрашиваем группы смежных точек в разные цвета.
Если группа маленькая - она считается мусором и закрашивается в цвет фона, если большая - в color++; Это для того чтобы не не слиплось еще что-то при повороте обратно.
Поворот: проводим много (128 вроде) пар параллельных линий, одну касаясь верхов букв, вторую через геом.центр (из-за хвостиков Q). Выбираем пару с минимальным расстоянием между линиями. Не самый быстрый алгоритм, но переделывать было лень.
Афинное преобразование. Поворот и одновременно масштабирование так, чтобы то расстояние между параллельными линиями стало 16 (а высота букв 32).
Получается уже повёрнутая картинка из букв разных цветов.
Могут быть слипшиеся буквы, одного цвета - были слипшиеся изначально. И могут быть слипшиеся разного цвета - это уже я слепил нечаянно при повороте.
Проходим по всем цветам, находя границы картинок одного цвета (это отдельные буквы или группы слипшихся букв) уменьшая и делая их grayscale (массив double) из монохромных, маленькие серые буквы скармливаются нейронной сетке 36x20x26. Если она ничего не нашла - пытаемся разделить разными вариантами и скармливать ей части объекта. Тут обычно что-то находит, даже много ложных срабатываний. Устраиваем голосование результатов (двухбуквенных).
Это первый сабмит был, на ~1500
1600+ - это попытки разпознать три слипшиеся буквы. Четыре и больше не делал.
PS. у online-генератора нашёл недокументированный ключ text= - он сильно помог при обучении сетки. иначе бы пришлось распознавать буквы вручную или писать свой генератор. |
|
Вернуться к началу |
|
|
Werewolf
Зарегистрирован: 16.03.2007 Сообщения: 28
|
Добавлено: Ср Апр 16, 2008 6:23 pm Заголовок сообщения: |
|
|
Долго пытался придумать что-то умное )
Первый вариант был с инвариантными моментами.
Затем пробовал находить контуры объектов, выполнять над ними ДПФ, затем путем нормирования делал коэффициенты Фурье инвариантными к аффинным преобразованиям и скармливал их нейросетке. Этот вариант был еще более убогим, чем первый )
В итоге за полчаса сделал распознавалку "на коленке" путем сравнения образов с эталонами, и она показала довольно неплохие результаты )
Особенности: шум не убирал, буквы выделял волновым алгоритмом, ориентацию надписи определял через главные оси инерции.
Самое сложное в этом методе оказался поворот буквы, надо было делать алгоритмы пред и постобработки, чтобы убрать артефакты, появляющиеся при повороте.
Кстати метод сравнения с эталонами позволяет очень просто разлеплять буквы, так как он всегда будет определять первую букву надписи. После определения первой буквы, ее можно обрезать и сравнивать дальше. Жаль, что я это поздно понял ) _________________ Þá skelfur askr Yggdrasils, ok engi hlutr er þá óttalaus á himni eða jörðu. |
|
Вернуться к началу |
|
|
Michael
Зарегистрирован: 16.04.2008 Сообщения: 5
|
Добавлено: Ср Апр 16, 2008 8:48 pm Заголовок сообщения: |
|
|
Цитата: | очень просто разлеплять буквы, так как он всегда будет определять первую букву надписи. |
Хм... А как быть, например, с буквой I - она хорошо
коррелирует с любой вертикальной палкой. |
|
Вернуться к началу |
|
|
Werewolf
Зарегистрирован: 16.03.2007 Сообщения: 28
|
Добавлено: Ср Апр 16, 2008 9:33 pm Заголовок сообщения: |
|
|
Ну вот допустим возьмем букву K. Сначала вычтем из нее эталон I - останутся пиксели, соответствующие диагональным палкам. Затем вычтем эталон K - не останется ничего, значит рейтинг для эталона K будет выше, чем для I. Поэтому в итоге побеждает тот эталон, который уберет больше пикселей )
К тому же I коррелирует с палкой только в arial, а в нем обычно буквы не слепляются ) _________________ Þá skelfur askr Yggdrasils, ok engi hlutr er þá óttalaus á himni eða jörðu. |
|
Вернуться к началу |
|
|
petrovich
Зарегистрирован: 16.04.2008 Сообщения: 6 Откуда: Минск
|
Добавлено: Ср Апр 16, 2008 11:23 pm Заголовок сообщения: |
|
|
На буквы Q забил (только для arial проходило). Строку локализовывал по углам (находя крайние точки вдоль осей и диагоналей, всего 8 точек. Потом выбирал из них 2, которые, няходясь на стороне прямоугольника, включающего остальные точки, давали прямоугольник минимальной площади). Подход не проходил для строк без четких углов, например, с O по краям. Затем перебирал все комбинации букв для трех шрифтов и двух возможных ориентаций надписи, отбрасывая комбинацию при определенном уровне ошибки. Используемый порог определял качество распознавания и время работы программы, так что меня ограничило прежде всего время. |
|
Вернуться к началу |
|
|
zhengxi
Зарегистрирован: 25.03.2008 Сообщения: 19
|
Добавлено: Чт Апр 17, 2008 1:25 am Заголовок сообщения: |
|
|
Werewolf писал(а): |
Кстати метод сравнения с эталонами позволяет очень просто разлеплять буквы, так как он всегда будет определять первую букву надписи. После определения первой буквы, ее можно обрезать и сравнивать дальше. Жаль, что я это поздно понял ) |
А как сравнивать с эталонами ? По числу единичных бит после xor ?
Я пробовал так - с трудом различаются C,G,O,Q или R и B - отличий на толщине линий много, надо много образцов.
Инварианты, да, хорошо различают эти буквы, но путают другие пары (H и X).
Я с этим поигрался, еще когда прога на питон была, потом отбросил. Тот алгоритм, что описал, оказался сильно лучше.
Возможно, совмещением инвариантов и маски можно тоже хорошо сделать, а чем-то одним из них - сомневаюсь. |
|
Вернуться к началу |
|
|
Werewolf
Зарегистрирован: 16.03.2007 Сообщения: 28
|
Добавлено: Чт Апр 17, 2008 1:42 am Заголовок сообщения: |
|
|
zhengxi писал(а): | А как сравнивать с эталонами ? По числу единичных бит после xor ? |
Да, именно так.
Ошибки неизбежны, это да, но хоть что-то угадывает правильно ) _________________ Þá skelfur askr Yggdrasils, ok engi hlutr er þá óttalaus á himni eða jörðu. |
|
Вернуться к началу |
|
|
Turbo Site Admin
Зарегистрирован: 19.02.2006 Сообщения: 248
|
Добавлено: Чт Апр 17, 2008 11:14 am Заголовок сообщения: |
|
|
Вот небольшая стата по лучшим решениям:
Column 1 - total number of tests
Column 2 - number of tests with correctly found length
Column 3 - correctly solved tests
1) zhengxi - 1636 баллов
Length 3: 137 136 134
Length 4: 96 93 91
Length 5: 99 97 96
Length 6: 74 65 65
2) Levin Aleksey - 1424 балла
Length 3: 137 134 119
Length 4: 96 90 83
Length 5: 99 98 81
Length 6: 74 73 55
3) Andrei Galatyn - 1272 балла
Length 3: 137 126 112
Length 4: 96 88 72
Length 5: 99 89 72
Length 6: 74 59 48
4) petrovich - 1035 баллов
Length 3: 137 131 93
Length 4: 96 71 52
Length 5: 99 78 58
Length 6: 74 61 43
5) Werewolf - 836 баллов
Length 3: 137 108 82
Length 4: 96 55 49
Length 5: 99 68 50
Length 6: 74 35 24 |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
Powered by phpBB © 2001, 2005 phpBB Group
|