roboforum.ru

Технический форум по робототехнике.
Текущее время: 27 ноя 2024, 13:53

Часовой пояс: UTC + 4 часа


Правила форума


В этом форуме новые темы не создаются, однако обсуждение допустимо.



Начать новую тему Ответить на тему  [ Сообщений: 496 ]  На страницу Пред.  1 ... 19, 20, 21, 22, 23, 24, 25 ... 34  След.
Автор Сообщение
 Заголовок сообщения: Re: Автономная навигация робота
СообщениеДобавлено: 06 янв 2010, 02:33 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июн 2007, 15:19
Сообщения: 1016
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев
=DeaD= писал(а):
А насколько тяжело будет для памяти хранить еще и исходные изображения?


Сейчас реализация алгоритма AVM v0.5 (библиотеки rcg.lib, rcg_vc9.lib) поддерживает три вида данных
(под данными имеется виду пара [образ]->[ассоциированные данные]):

- 32 битовое знаковое целое [long] (.\include\AssociativeMemory32s.h);
- 160 битный массив [CvType160U] (.\include\AssociativeMemory160u.h);
- 192 битный массив [CvType192U] (.\include\AssociativeMemory192u.h).

Так что можно взять, к примеру, тип CvType160U и использовать 16 бит из 160 (тип short) для индекса в массиве указателей на исходные изображения (остальные биты использовать для других нужд).

К примеру, вот так:

Код:
#include "AssociativeMemory160u.h"

#define cAreaImgTotal 1000
IplImage* iAreaImg[cAreaImgTotal]; // Массив указателей на исходное изображение области интереса

IplImage* InputImg; // Входное изображение

CvAssociativeMemory160U* am; // Указатель на ассоциативную память

int iAreaImgIdx = 0; // Текущий индекс изображения
CvRect InterestArea; // Область интереса

// ...
// Загружаем входное изображение в InputImg и устанавливаем координаты области интереса InterestArea

iAreaImg[iAreaImgIdx] = cvCreateImage(cvSize(InterestArea.width,
                                       InterestArea.height), IPL_DEPTH_8U, 1);
// Копируем изображение из области интереса
cvSetImageROI(InputImg, InterestArea);
cvCopy(InputImg, iAreaImg[iAreaImgIdx]);
cvResetImageROI(InputImg);

// Подготавливаем данные
CvType160U Data;
Data.s[0] = iAreaImgIdx;
//...

// Записываем данные в ассоциативную память
am->Write(InterestArea, &Data);

if(iAreaImgIdx < cAreaImgTotal) { iAreaImgIdx++; }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная навигация робота
СообщениеДобавлено: 06 янв 2010, 11:44 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Это понятно, вопрос то был - сколько сейчас пакетов урезанных данных хранится на 1 образ? Если к каждому пакету подцепить картинку - сколько памяти займёт?

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная навигация робота
СообщениеДобавлено: 06 янв 2010, 13:03 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июн 2007, 15:19
Сообщения: 1016
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев
Насчёт «пакетов данных» не понял. В поисковом дереве AVM хранятся матрицы распознавания. Для ключа 80x80 используется три уровня декомпозиции (см. FAQ), на верхних уровнях матрицы c меньшей размерностью на нижних уровнях более детальные. Выше я предложил не изображение в дерево запихивать, а только указатели на исходное изображение. Там же (в FAQ) приведена упрощенная процедура поиска объекта с помощью метода Read:

Код:
void SimplyRecognition(CvAssociativeMemory32S* pAM, CvSize aInputImgSize, CvRcgAMFunc32S RcgAMFunc) {

   if(pAM && RcgAMFunc) {
      CvRect sRect;int i;
      printf("<***> Simply recognition -> begin\n");
      for(i=0;;i++) { // Цикл поиск, начинаем от 75% от размера ключа и пока не станет больше чем входное изображение
         float Rate = 0.75f + 0.25f*float(i);
         int SearchStep = int(15.0f*Rate);
         CvSize KeyImgSize = pAM->GetKeyImageSize();
         sRect.width = int(KeyImgSize.width*Rate);// Устанавливаем новый размер окна поиска
         sRect.height = int(KeyImgSize.height*Rate);
         // Окно больше входного изображение? (если да, то конец поиска)
         if((aInputImgSize.width < sRect.width) || (aInputImgSize.height < sRect.height)) break;
         int eX = aInputImgSize.width - sRect.width;
         int eY = aInputImgSize.height - sRect.height;
         for(int y=0; y < eY; y += SearchStep) {// Сканируем всё входное изображение выбранным окном
            for(int x=0; x < eX; x += SearchStep) {
               sRect.x = x;
               sRect.y = y;
               long* pData;
               CvAM_Parameters Param;
               Param.ppUserTrackingInfo = NULL;
               Param.TotalABases = pAM->GetTotalABases();
               if(pAM->Read(sRect, &Param.ObjRect, &pData, NULL, NULL, &Param.Similarity)) {
                  RcgAMFunc(cRecognizedObject, pData, &Param, NULL); // Объект найден
               }
            }
         }
      }
      printf("<***> Simply recognition -> finish\n\n");
   }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная навигация робота
СообщениеДобавлено: 06 янв 2010, 13:15 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Сколько изображений будет храниться в среднем на 1 запомненный образ? AVM же запоминает не 1 изображение или его признаки, а целую пачку вроде?

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная навигация робота
СообщениеДобавлено: 06 янв 2010, 13:35 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июн 2007, 15:19
Сообщения: 1016
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев
Сколько конкретно матриц будут соответствовать конкретному образу, сложно ответить, всё зависит насколько хорошо этот образ поддаётся декомпозиции, насколько он контрастный, какова частота его текстуры, какие образы были записаны в дерево ранее. В принципе это всё можно увидеть в виде диаграммы, если в приложении Recognition.exe вызвать из главного меню: Распознавание/Показать ассоциативное дерево.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная навигация робота
СообщениеДобавлено: 06 янв 2010, 13:43 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Ну примерно то можно сказать? Чтобы оценить порядок чисел :)

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная навигация робота
СообщениеДобавлено: 06 янв 2010, 14:01 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июн 2007, 15:19
Сообщения: 1016
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев
Ну вот, я сейчас взял, очистил дерево поиска AVM, и обучил его на объект «Лицо» и вот что получилось:


Вложения:
face_tree.png
face_tree.png [ 19.46 КиБ | Просмотров: 2210 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная навигация робота
СообщениеДобавлено: 06 янв 2010, 14:09 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Итого оно запомнило 177 снимков размером 80х80 пикселей под 1 образ, так?

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная навигация робота
СообщениеДобавлено: 06 янв 2010, 14:39 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июн 2007, 15:19
Сообщения: 1016
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев
Нет, не так, запомнило 144 матрицы в дереве поиска.

Total bases/clusters: bases – ассоциативные ядра, clusters – дополнительные «кластерные» матрицы, нужны для большего «ветвления» дерева поиска.

Общее количество (и кластерных и матриц ассоциативных ядер) 177.


Последний раз редактировалось EDV 06 янв 2010, 14:44, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная навигация робота
СообщениеДобавлено: 06 янв 2010, 14:42 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Если картинки мы бы еще запоминали - запомнили бы под 1 наш образ 144 картинки?
Кстати, а алгоритм выдаст номер картинки ведь, которую потом искать?

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная навигация робота
СообщениеДобавлено: 06 янв 2010, 14:56 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июн 2007, 15:19
Сообщения: 1016
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев
Метод Write может не только создавать новые матрицы в дереве поиска, но и использовать уже существующие. Так что пред записью лучше попробовать посмотреть с помощью метода Read, возможно нашей «области интереса» уже соответствует какое то ассоциативное ядро, и тогда или ничего не делаем или корректируем его содержимое.

>> Если картинки мы бы еще запоминали - запомнили бы под 1 наш образ 144 картинки?
Ну, это если каждому ассоциативному ядру ставить в соответствие уникальную картинку области интереса (а если картинки очень похожие?).

>> Кстати, а алгоритм выдаст номер картинки ведь, которую потом искать?
В том варианте, что я выше рассматривал, именно так, должен выдать индекс картинки в массиве указателей.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная навигация робота
СообщениеДобавлено: 06 янв 2010, 14:59 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Хм, ну при малых количествах картинок нормально должно быть (144 картинки по 80х80 пикселей, 24 бита цветов - это чуть меньше 3Мб на образ).

Кстати, алгоритм AVM работает в ч/б или в цвете?

И еще - а получается все 144 картинки если их тупо запоминать могут оказаться со смещениями? Или если их нормально запоминали - они будут 1 в 1 только с разными видео-помехами?

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная навигация робота
СообщениеДобавлено: 06 янв 2010, 15:07 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июн 2007, 15:19
Сообщения: 1016
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев
>> Кстати, алгоритм AVM работает в ч/б или в цвете?
Алгоритма AVM работает с черно-белыми изображениями (цвета не видит).

Что бы в приложении Recognition.exe посмотреть исходное изображение для алгоритма AVM, нужно из главного меню выбрать: Распознавание/Показать входное изображение.

>> И еще - а получается все 144 картинки если их тупо запоминать могут оказаться со смещениями?
Ну, думаю, если объект в кадре дергали туда-сюда, и поворачивали под разными углами, то мы именно это на картинках и увидим (смещение в кадре/поворот изображения).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная навигация робота
СообщениеДобавлено: 06 янв 2010, 15:13 
Не в сети
Аватара пользователя

Зарегистрирован: 08 окт 2004, 16:43
Сообщения: 2114
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий
Считаю целесообразно использовать AVM не в качестве распознавателя, а в качестве фильтра. Т.е. быстро и неточно находить образы, а потом хоть корреляцией уточнять позицию "маяка".

_________________
Все новости о моих проектах http://savethebest.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная навигация робота
СообщениеДобавлено: 06 янв 2010, 15:29 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Так я это и предлагаю, просто выясняю сейчас, как оно работает, в какое место лучше подцепиться :)

Добавлено спустя 2 минуты 41 секунду:
EDV писал(а):
>> И еще - а получается все 144 картинки если их тупо запоминать могут оказаться со смещениями?
Ну, думаю, если объект в кадре дергали туда-сюда, и поворачивали под разными углами, то мы именно это на картинках и увидим (смещение в кадре/поворот изображения).

А вот это хуже :) в этом случае не ясно, что считать правильными координатами образа, особенно если его поворачивали... Надо подумать. А если не крутить и не трясти - оно нормально распознаётся? То есть можно ли для начала считать, что образ во время обучения неподвижен? Не сильно хуже результаты будут?

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 496 ]  На страницу Пред.  1 ... 19, 20, 21, 22, 23, 24, 25 ... 34  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO