|
Модераторы: Rickert |
|
Гость_mln |
|
|||
Unregistered |
Всем привет.
Задание это по предмету Системы искусственного интеллекта. Задача такая: необходимо реализовать распознавание геометрических фигур на плоскости. Есть bmp картинка треугольника, квадрата, круга или ромба, например. Пусть уже имеется матрица цветов этой картинки, т.е. каждому пикселю bits[i] соответствует его цвет. Как можно реализовать распознование и по какому алгоритму? Посоветуйте пожалуйста. |
|||
|
||||
DragonFire |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: 5 Всего: 9 |
Ну можно попробовать использовать нейронные сети... Научить нейрон отличать квадрат, от ромба и трейгольник, от круга... Сам я работал только с текстом, но я думаю, тут такая же фишка прокатит...
Вот по этой ссылочке я описывал распознование текста, может поможет: http://forum.vingrad.ru/index.php?showtopic=68416 И еще, размеры картинок должны быть одинаковые... Вот единственный недостаток... |
|||
|
||||
DENNN |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 3 Всего: 43 |
Ищите геометрические примитивы - линии и точки. Потом уже анализ изображения на уровне геометрии, а не растра
|
|||
|
||||
Guest |
|
|||
Unregistered |
вот как нейрон обучать хотелось поподробнее понять. а тот пост я уже читала, думаю здесь иначе придется делать, не через векторы.. |
|||
|
||||
Гость_mln |
|
|||
Unregistered |
вряд ли, ведь картинка как раз и задана как растр, матрицей пикселей.. |
|||
|
||||
DragonFire |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: 5 Всего: 9 |
А в том то и дело, что не вектора. Именно простенькая нейронная сетка.
Есть у тебя нейрон. Ты подаешь ему на вход сигналы. Допустим у нас картинка 5х5, поэтому сигналов 25: сигнал "1" - если черная клетка, "0" - если белая. Нейрон твой жует твои сигналы и выдает ответ "Треугольник" это или нет, рассчитывая это по формуле: <РЕЗУЛЬТАТ>=<сигнал1>*<Вес1>+<сигнал2>*<Вес2>+...+<сигнал25>*<Вес25>; If <РЕЗУЛЬТАТ> > <Порог> then Буква - А, если нет, то не А. Все здесь сводится к тому, чтобы рассчитать эти <Вес> так, чтобы когда у нас поступали сигналы c треугольника, то выражение <Результат> было больше порога, обычно он берется 1.5 или 0.5. Такой процесс называется обучением нейрона. Вот и вся задача. Обучаешь 4 нейрона - каждый на распознования своей определенной геометрической фигуры... Теперь об обучении. Для начала создай текстовый файл, в котором будут хранится веса синапсов(изначально поставь им значения по 0.1 и поставь порог в программе 1.5). Далее, в своей программе загрузи этот файл и загрузи рисунки твоих фигур. Для начала попробуй создать нейрон, распознающий треугольник твоя фигура - или нет. Для этого считывай с картинки сигналы каждого пикселя и рассчитывай результат по вышеприведенной формуле. Если он не тот, какой нужен (например ты даешь ему круг, а он пишет, что треугольник), то изменяй вес каждого синапса "ЧЕРНОЙ" клетки на 0.01. И пересчитывай по-новой. Если он стал отвечать правильно, то переходи к следующей картинке и работай с ней. Когда дойдешь до последней картинки, переходи на первую. Кстати, забыл сказать (но я думаю ты и сам догадался) если ты загружаешь след. картинку и результат сразу правильный - сразу переходи с следующей. И если все картинки правильно распознаются, то сохраняй значения в файл и радуйся... Единственное что - нужно прогнать программу раз 100, чтобы нейрон обучился, поэтому можешь придумать какой-нибудь автоматический цикл. И если хочешь, скажи мне свое мыло, я тебе пришлю пример программы, тока для букв. А может (если будет время) и напишу именно прогу для геом. фигур. Если что не понятно объяснил - спрашивай. Я не учитель... Прошу модератора разрешить прикрепить рисунок к этому сообщению, а то то что я написал не очень понятно... Плиз... DENNN рисунки помещать хочу! |
|||
|
||||
DENNN |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 3 Всего: 43 |
Я, собственно, и предлагаю искать из по растру. К примеру, уже давно для различного подвида задач используются алгоритмы определения координат точки (или площадного объекта) по изображению с подпиксельной точностью. |
|||
|
||||
Тима |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 15.3.2006 Репутация: нет Всего: нет |
Привет.
Мне надо собрать различные алгоритмы распознавания геометрических фигур(чисто теорию, не реализовывая). Можешь чем-нибудь почомь? |
|||
|
||||
DragonFire |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: 5 Всего: 9 |
Вот - с помощью сеток нейронных...
|
|||
|
||||
mr.DUDA |
|
|||
3D-маньяк Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
DragonFire, нажми "предварительный просмотр", там снизу кнопка "Обзор" для прикрепления файлов...
-------------------- |
|||
|
||||
DragonFire |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: 5 Всего: 9 |
Класс, тока криво как то... на главную нельзя вынести было, чтобы нубы как я не парились ?
|
|||
|
||||
Мурлыкатам_ |
|
|||
Опытный Профиль Группа: Участник Сообщений: 265 Регистрация: 5.2.2007 Где: город-герой Минск Репутация: нет Всего: 2 |
А может поможете найти алгоритм для определения количества углов в фигуре, во время обхода границы фигуры методом Жука?
|
|||
|
||||
Мурлыкатам_ |
|
|||
Опытный Профиль Группа: Участник Сообщений: 265 Регистрация: 5.2.2007 Где: город-герой Минск Репутация: нет Всего: 2 |
DENNN,
А можно с этого места поконкретней? Мне оч нуно посчитать углы в фигурах, все фигуры - черные, фон - белый. Обхожу пока по клику мышью границу методом жука, тот метод которым я пользуюсь считает чего-то у треугольника и прямоугольника одинаково кол-во углов :(( Мот подскажите хотя бы название какого-нить алгоритма поиска углов в фигуре? |
|||
|
||||
DragonFire |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: 5 Всего: 9 |
м.б. самому попробовать придумать? Задачка же вроде скорее геометрическая чем на н.с... Сам угол можно найти скажем так: берем 2 соседние точки пишем уравнение прямой и проходим по всем точкам в линии, как тока какая то точно не принадлежит прямой значит это угол, и мы стоим новую прямую и идем дальше...
Ну это навскидку, я люблю просто велосипеды((( |
|||
|
||||
Мурлыкатам_ |
|
|||
Опытный Профиль Группа: Участник Сообщений: 265 Регистрация: 5.2.2007 Где: город-герой Минск Репутация: нет Всего: 2 |
DragonFire, приколист )) велосипеды ))
Я уже придумал Даже работает. Если кому интерестно или нужно, могу поделиться идеей. |
|||
|
||||
DragonFire |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: 5 Всего: 9 |
Ну поделись)) в 2х словах)) вдруг кому-то понадобиться))
|
|||
|
||||
SHShadow |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 25.11.2004 Репутация: нет Всего: нет |
Обещал же поделиться, а сам молчит. Ну же.
|
|||
|
||||
SHShadow |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 25.11.2004 Репутация: нет Всего: нет |
Есть у меня один алгорим по определению объектов методом жука. Выкладываю на обозрение. Правда на оптимальность не претендую:
pDoc->m_imgMain это CImage объект Left, Rigth, Top, Bottom - координаты определенного объекта (описывающего квадрата) количество углов будет равно числу проходов цикла + 1. |
|||
|
||||
Paguo86PK |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 8.4.2010 Где: Tashkent Репутация: нет Всего: нет |
Поиски в гугле про оконтуровании объектов изображения чаще приводят к фильтрам с матрицами 3x3 на каждый пиксел. Что совсем не подходит из-за сильного снижения скорости. Тем более весь этот массив координат пограничных пикселей потом очень трудоёмко отсортировать в многоугольник с линейным расположением координат, чтобы Polygon выглядил действительно как контур, а не паутина.
Достаточно долго и упорно я работал над собственным алгоритмом, основой которого стал "бот" бегущий вдоль границы и тянущий за собой стройный ряд координат. Основой поведения "бота" стала таблица постулатов. Однако, я столкнулся с огромными проблемами в сложных объектах, где происходили сбои. Логика "жука"(бота) моего алгоритма строится так: A) Жук может ползти в одном из восьми направлений, кратному 45°; B) Жук имеет пять сенсоров(усиков) для получения сведений об окружающем пространстве. Все они собирают информацию о пяти соседних клетах по направлениям W,NW,N,NE,E (З,СЗ,С,СВ,В) относительно направления движения; C) Имеется таблица, где перечисляются все возможные постулаты, в соответствии состояний пяти усиков жука в каком направлении он должен развернуться. Алгоритм очень прост, однако таблицу я составлял довольно долго. Тем более, что бывают исключительные ситуации, где помочь может только память о предыдущей ситуации. Но, как оказалось, описание и исключительных ситуаций не гарантирует успеха. Ниже привожу этот алгоритм. Может кого-то он заинтересует, кому-то будет полезен. Ну а кто-нибудь поможет доработать. Работает так: Вначале строится фигура (параметры можно менять в теле алгоритма в секции WM_CREATE) в Bitmap 640x480 32bpp и выводится на экран. Далее, клавиша ПРОБЕЛ делает один шаг "жука". Причём справа-вверху отображается Zoom региона с жуком, а справа-внизу выводятся пять Check-Box'ов - "усиков" жука. Галочкой помечается текущая обстановка, а серостью - предыдущее. В центре - Hex-код предыдущей и текущей ситуации. Всё это нужно для отладки и построения кодов таблицы постулатов. Клавиша ENTER делает серию шагов, а ESC бежит до тех пор, пока контур не замкнётся. Ну, в самом начале можете смело нажать на ESC и получить контур, так-как всё исправно сработает. Однако, если геометрию фигуры изменить, придётся "отлаживать" от проскоков и зацикливания. Присоединённый файл ( Кол-во скачиваний: 45 ) SideBar.zip 20,24 Kb |
|||
|
||||
Snakedon |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 26.5.2016 Репутация: нет Всего: нет |
У меня диплом на похожую тему) )и чесно говоря не оч понимаю как реализовать разпознавание просто фигур нейронной сетью)
|
|||
|
||||
Bitter |
|
|||
Опытный лентяй Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 5 Всего: 27 |
Snakedon, так же как и распознавание рукописных букв, примеров которых полно
|
|||
|
||||
Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |