roboforum.ru

Технический форум по робототехнике.


Алгоритм распознающий препятствия

Алгоритм распознающий препятствия

Сообщение Николай_Алексеевич » 04 дек 2007, 16:25

Хочется написать алгоритм для платформы оборудованной камерой и моторчиками который позволит етой платформе ездить не врезаясь. Т.е. замена всяких датчиков камерой. Время появилось и я коечто накидал.

Код: Выделить всёРазвернуть
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <time.h>

#pragma comment(lib,"highgui.lib" )
#pragma comment(lib,"cv.lib" )
#pragma comment(lib,"cxcore.lib" )

void main (void)
{
   IplImage *src, *tmp;
   CvSeq* contour = 0;

   cvNamedWindow( "test",1 );
   cvNamedWindow( "test1",1 );
   cvNamedWindow( "test2",1 );

   CvCapture *cap = cvCaptureFromCAM(0);
   for(;;){
      tmp = cvQueryFrame(cap);
      cvShowImage( "test1",tmp );

                        // у меня 640х480 если у вас меньше то следующий 6 строк заремарьте и все будет работать идеально. Сдесь я делаю сглаживание
                        // потому что мая камера очень далека от идеала и шумы не позволяют чтото видеть
      IplImage *pyr = cvCreateImage( cvSize(320,240),8,3 );
      cvPyrDown( tmp, pyr, 7 );
      cvPyrUp( pyr, tmp, 7 );
      cvReleaseImage( &pyr );
      cvShowImage( "test2",tmp );

      src = cvCreateImage( cvGetSize(tmp),tmp->depth,1 );
      int COI = cvGetImageCOI( tmp );
      cvSetImageCOI( tmp,2 );
      cvCopy( tmp,src,0 );
      cvSetImageCOI( tmp,COI );

      cvCanny( src,src,30,70,3 );
      cvDilate( src,src,0,1 );
      cvErode( src,src,0,1 );
      
      cvZero( tmp );
      CvMemStorage* contour_storage = cvCreateMemStorage(0);

      CvContourScanner blobs = cvStartFindContours( src, contour_storage, sizeof(CvContour), CV_RETR_CCOMP,CV_CHAIN_APPROX_NONE );
      while( (contour=cvFindNextContour(blobs)) != NULL ){
         CvScalar outer = CV_RGB( 0, 255, 255 );
         CvScalar inner = CV_RGB( 255, 255, 255 );
         cvDrawContours( tmp, contour, outer, inner, 0, 0 );
      }
      contour = cvEndFindContours( &blobs );
   
      cvReleaseMemStorage( &contour_storage );

      cvShowImage( "test",tmp );
      cvWaitKey(1);

      cvReleaseImage( &src );
   }

   /* Releases contour scanner and returns pointer to the first outer
   contour */
   cvReleaseCapture( &cap );

   return;
}


Выяснилось что на вебкамерах лучше чем на тв-тюнерах. Нет интерлейсинга. Всеже при быстром движении получается лажа. Сейчас бьюсь над проблемой осознания обьекта. Следующий этап замер расстояния до него по предыдущим кадрам.
Николай_Алексеевич
 
Сообщения: 44
Зарегистрирован: 11 дек 2006, 17:18
Откуда: Тольятти

Re: Алгоритм распознающий препятствия

Сообщение =DeaD= » 04 дек 2007, 16:33

Николай_Алексеевич писал(а):Хочется написать алгоритм для платформы оборудованной камерой и моторчиками который позволит етой платформе ездить не врезаясь. Т.е. замена всяких датчиков камерой. Время появилось и я коечто накидал.

Выяснилось что на вебкамерах лучше чем на тв-тюнерах. Нет интерлейсинга. Всеже при быстром движении получается лажа. Сейчас бьюсь над проблемой осознания обьекта. Следующий этап замер расстояния до него по предыдущим кадрам.

Аааа.... вот вы куда... спешу обрадовать - замер расстояния по предыдущим кадрам - вещь крайне неприятная, в том смысле, что чтобы видеть - нужно ехать, при этом достаточно точно, а только затормозил - ослеп. А камеры в движении, особенно веб мажут так, что проще удавиться. Я уже не говорю о том, что на каждой пуговице малый робот будет подпрыгивать просто ужастно и все изображение от этого будет прыгать во все стороны.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Алгоритм распознающий препятствия

Сообщение Николай_Алексеевич » 04 дек 2007, 17:15

Мой робот ростом под полтора метра и весит как два машинный акумулятора... думаю прыгать он не будет точно :)
Николай_Алексеевич
 
Сообщения: 44
Зарегистрирован: 11 дек 2006, 17:18
Откуда: Тольятти

Re: Алгоритм распознающий препятствия

Сообщение =DeaD= » 04 дек 2007, 17:38

Николай_Алексеевич писал(а):Мой робот ростом под полтора метра и весит как два машинный акумулятора... думаю прыгать он не будет точно :)

Это вам сильно повезло тогда, хотя не факт что от вибраций уже самих камер на роботе это вас убережет :)

Пробовали на ходу снять видеоролик с камеры?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Алгоритм распознающий препятствия

Сообщение Виталий » 04 дек 2007, 20:34

Я принимал участие в разработке робота весом 30кг. Камера всеравно дрожит, но можно скомпенсировать попробовать.
Все новости о моих проектах http://savethebest.ru
Аватара пользователя
Виталий
 
Сообщения: 2114
Зарегистрирован: 08 окт 2004, 16:43
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий

Re: Алгоритм распознающий препятствия

Сообщение =DeaD= » 04 дек 2007, 21:35

Виталий писал(а):Я принимал участие в разработке робота весом 30кг. Камера всеравно дрожит, но можно скомпенсировать попробовать.

Вот-вот, у меня тоже робот под 10-15кг весил в "максимальной комплектации" и высотой в полметра - еще как прыгал.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Алгоритм распознающий препятствия

Сообщение Николай_Алексеевич » 05 дек 2007, 10:42

Давайте не про робота, а про алгоритм. Хочется иметь подобный алгоритм, а проблему с дрожанием я какнибудь решу.

Есть какиенибудь идеи?
Николай_Алексеевич
 
Сообщения: 44
Зарегистрирован: 11 дек 2006, 17:18
Откуда: Тольятти

Re: Алгоритм распознающий препятствия

Сообщение =DeaD= » 05 дек 2007, 11:12

Николай_Алексеевич писал(а):Давайте не про робота, а про алгоритм. Хочется иметь подобный алгоритм, а проблему с дрожанием я какнибудь решу.

Есть какиенибудь идеи?

Ключевые слова - Optical-flow
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Алгоритм распознающий препятствия

Сообщение Николай_Алексеевич » 05 дек 2007, 16:13

По поводу камеры - посмотрите интернет, давно придуманно как ето избежать
По поводу optical flow - спасибо, помогло сильно :)
Николай_Алексеевич
 
Сообщения: 44
Зарегистрирован: 11 дек 2006, 17:18
Откуда: Тольятти

Re: Алгоритм распознающий препятствия

Сообщение =DeaD= » 05 дек 2007, 16:30

Николай_Алексеевич писал(а):По поводу камеры - посмотрите интернет, давно придуманно как ето избежать

Будьте гуманней - дайте ссылку или ключевые слова? :)

Николай_Алексеевич писал(а):По поводу optical flow - спасибо, помогло сильно :)

Кстати, в OpenCV по моему 3-4 метода реализовано частично из семейства optical-flow, правда вроде без калибровки.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Алгоритм распознающий препятствия

Сообщение EDV » 05 дек 2007, 18:09

Кстати, в OpenCV по моему 3-4 метода реализовано частично из семейства optical-flow, правда вроде без калибровки.


Ага, вот только работают они не лучшим образом, можете сами убедиться:
http://edv-detail.narod.ru/OpticalFlowEDV.html

Я какое-то время назад переписывался с Вадимом Писаревским (один из разработчиков OpenCV), так он заявил, что эти методы вообще уберут в следующей версии:
Actually, for one of our current projects we are now studying many
different optical flow algorithms, such as ones by Bruhn & Weickert
(http://www.mia.uni-saarland.de/Publications/bruhn-iccv05.pdf), or
Gunnar Farneback (http://www.isy.liu.se/~gf/). In particular, in this
paper by G. Farneback
http://www.cvl.isy.liu.se/ScOut/Publications/Papers/iccv01_gf.pdf
he also uses segmentation, but this is not color segmentation, this is
motion segmentation, it is built simultaneously with motion estimation,
that is, the final regions correspond to the regions that move as a whole.

We plan to include some of these implementations into the library pretty
soon, old algorithms (HS, LK, BM) will be thrown away. And to make sure
that we put the best algorithms, we plan to do some extensive
comparison/benchmarking.
Аватара пользователя
EDV
 
Сообщения: 1016
Зарегистрирован: 06 июн 2007, 15:19
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев

Re: Алгоритм распознающий препятствия

Сообщение =DeaD= » 05 дек 2007, 21:21

EDV писал(а):
Кстати, в OpenCV по моему 3-4 метода реализовано частично из семейства optical-flow, правда вроде без калибровки.

Ага, вот только работают они не лучшим образом, можете сами убедиться:
http://edv-detail.narod.ru/OpticalFlowEDV.html

Интересная инфа, а что за Proposed Method? Личная разработка, я так понимаю? :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Алгоритм распознающий препятствия

Сообщение EDV » 06 дек 2007, 09:59

Интересная инфа, а что за Proposed Method? Личная разработка, я так понимаю?

Да, это мой метод «Optical flow” алгоритма. Я уже на эту тему писал, подробности можно посмотреть здесь: Сегментация движений (Motion segmentation)

Вот только разработчиков OpenCV это не заинтересовало:

Anyway, it is very nice to see some alternative approaches.
The problem with segmentation-based algorithms is that they are not
quite robust to some noise or lighting changes - once you draw a
boundary between components, you threw away some information that may be
valuable. Also, there are some kinds of videos where segmentation does
hardly make sense, e.g. medical images, or videos from satellites.

On the other hand, there are some algorithms that try to do segmentation
and optical flow estimation simultaneously, that is, they segment image
into the regions using the motion consistency, rather than color, or
brightness, or texture or whatever.
And once you have such segmentation, you may compute the motion in each
region very accurately using least squares or some robust estimator.

Another possible direction of research is to take a look at 3d
algorithms, i.e. algorithms that consider not only 2 frames, the
previous and the next, but a few frames before and after the current
frame.


В общем, вежливо отклонили моё предложение, так что в новой версии OpenCV этого алгоритма не будет.
Аватара пользователя
EDV
 
Сообщения: 1016
Зарегистрирован: 06 июн 2007, 15:19
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев

Re: Алгоритм распознающий препятствия

Сообщение =DeaD= » 06 дек 2007, 10:48

EDV писал(а):
Интересная инфа, а что за Proposed Method? Личная разработка, я так понимаю?

Да, это мой метод «Optical flow” алгоритма. Вот только разработчиков OpenCV это не заинтересовало ...skipped...
В общем, вежливо отклонили моё предложение, так что в новой версии OpenCV этого алгоритма не будет.

Может у них уже лучше есть и они его уже включают в OpenCV? Всё-таки люди тоже вроде не профаны... :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Алгоритм распознающий препятствия

Сообщение EDV » 06 дек 2007, 11:19

=DeaD= писал(а):
EDV писал(а):Может у них уже лучше есть и они его уже включают в OpenCV? Всё-таки люди тоже вроде не профаны... :)


Да, конечно есть, шведский алгоритмGunnar Farneback. Правда он у них сейчас работает не достаточно быстро, но я полагаю они с этим справятся.
Аватара пользователя
EDV
 
Сообщения: 1016
Зарегистрирован: 06 июн 2007, 15:19
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев

След.

Вернуться в Алгоритмы

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2