RinOS
-
Количество публикаций
99 -
Зарегистрирован
-
Посещение
-
Days Won
8
Сообщения, опубликованные пользователем RinOS
-
-
Вызывал я функцию cvReprojectImageTo3D с разным Q, и пришел к выводу что она все-таки работает (карта высот довольно реалистичная в MatLab-e).
Функция cvReprojectImageTo3D, возвращает 3х канальное изображение 3 канал, глубина - расстояние до объекта.
Так я получаю расстояние
cvReprojectImageTo3D(imageDepth, 3dImage, Q); cvSetImageCOI(3dImage, 3); cvCopy(3dImage, Zimg, 0); dist = cvGetReal2D(Zimg, 160, 120);
Но вот в чем прикол... Если объект дальше то и значение dist должно быть больше, а происходит ровно наоборот...
Чем ближе объект, тем больше значение dist.
К примеру замерял расстояние от камеры до себя, вот что получил:
расстояние 60 см, dist равен 0,117
расстояние 70 см, dist равен 0,093
расстояние 80 см, dist равен 0,079
расстояние 90 см, dist равен 0,661
расстояние 100 см, dist равен 0,580
Где то не вяжется... Или я чего то не понимаю...
-
Рекомендую все-таки использовать cvStereoRectify() т.к. результат его работы более точен, а cvStereoRectifyUncalibrated() лучше использовать когда существуют значительные непараллельности в оптических осях камер, насколько я понимаю.Смотрел пример stereo_calib.cpp, там показаны оба метода cvStereoRectify и cvStereoRectifyUncalibrated, мне показалось что cvStereoRectifyUncalibrated, работает лучше... по крайней мере карта высот выглядит правдоподобнее.
Искомую матрицу репроекции Q вы можете заполнить вручную по формуле Q= стр 435 Learn OpenCV, используя ранее вычисленные матрицы: CameraMatrix и T, например.. но мне кажется это сложный путь, и ... некоторые величины (f, n) придется выдумывать.У меня есть модуль (см. вложение) который вроде как строит Q, по некоторым параметрам:
* \brief Constructor that takes camera parameters and parameterizes the object.
* The object is ready to be used after constructed by this constructor.
* @param Fx - focal length in x direction of the rectified image in pixels.
* @param Fy - focal length in y direction of the rectified image in pixels.
* @param Tx - Translation in x direction from the left camera to the right camera.
* @param Clx - x coordinate of the optical center of the left camera
* @param Crx - x coordinate of the optical center of the right camera
* @param Cy - y coordinate of the optical center of both left and right camera
* @param dispUnitScale - the unit of the value in a disparity map. e.g. 1/4 of a pixel.
*/
Правда не известно откуда брать точные значения этих параметров...
При подаче в функцию cvInitUndistortRectifyMap (вы же ректифицируете изображение?)Да, вы можете посмотреть исходник с которым я работаю, ссылка в первом посте.
Вот написал функцию, которая принимает матрицу 4 параметра cvInitUndistortRectifyMapЯ попробовал использовать ее вот что получилось:
Q возвращенное функцией cvStereoRectify:
[ 1., 0., 0., -179.1385765075683600, 0., 1., 0.,
-120.1025462150573700, 0., 0., 0., 350.7473711626223000, 0., 0.,
-24.8326591292256540, -538.7927019658170600 ]
Q полученное с помощью cvStereoRectifyUncalibrated и вашей функции:
[ 1., 0., 0., -150.7913341775544300, 0., 1., 0.,
-102.6185674775258400, 0., 0., 0., 352.8618670197555500, 0., 0.,
-25.9740261147689360, 0. ]
Пытался много раз калибровать, Q иногда больше похожи иногда меньше в среднем как-то так.
- 2
-
Здесь обсуждалось:
http://www.compvision.ru/forum/index.php?showtopic=194
еще что то было на форуме. если поискать можно найти...
-
Допустим как то я как то скалибровал и получил disparityImage, карта глубины конечно не ахти, впрочем сойдет...
Карта глубины как я понял это не реальные числа глубины, а разности между слоями... (так ли)?
И что бы получить расстояние до объекта, надо преобразовать координаты.
Если я правильно понял то для этого используется функция cvReprojectImageTo3D() (так ли)?
В которой:
первый параметр disparityImage который нам создал cvFindStereoCorrespondenceBM()
второй параметр IplImage (size, IPL_DEPTH_32F, 3)
третий параметр самый интересный... матрица СvMat(4,4, CV_64F), в доке написано что:
(You’re going to need the reprojection matrix (named Q) from the cvStereoRectify method.)
Дело в том что в этой программе, используется cvStereoRectifyUncalibrated, а там ни какого Q, нет...
откуда бы взять эту матрицу Q?
И вообще правильный ли ход мыслей, для получения реальных координат, из disparityImage?
-
Читая статьи на эту тему и форумы выяснил что
1. Оси камер должны быть параллельны
2. Расстояние между камерами 10-15 см.
3. Калибровка очень, и очень важна (правда ни чего не нашел о том как правильно калибровать...)
К примеру беру шахматную доску, пытаюсь калибровать... и каждый раз разный результат...
Кто знает как правильно калибровать)?
Доска для калибровки во вложении.
- 1
-
Всем привет! Решил заняться стерео зрением.
Нашел в сети такой проект на OpenCV: http://code.google.com/p/opencvstereovision/
даже удалось скомпилить его) exe во вложении.
Поигрался с программой пытался калибровать шахматной доской но результат мягко говоря неочень...
Раньше ни когда этим не занимался сразу возникло несколько вопросов.
Какое расстояние должно быть между камерами?
Как они должны быть направлены? (какой угол примерно)
(ехе требует библиотеки OpenCV 1.1 и библиотеки Qt если в сети не найдете выложу )
- 2
-
У меня у одного такая проблема, с 2.2?
Пытаюсь подключится к 2 вебкам:
captures[0] = cvCreateCameraCapture(0); captures[1] = cvCreateCameraCapture(1);
к первой подключается ко второй нет. Хотя компилировал под 1 версию все отлично работало...
-
#define _STLP_NO_CSTD_FUNCTION_IMPORTS#define _FM_NO_REMAP
Да на пустом проекте, все работает и компилируется, но если чуть больше кода то перестает, я думаю что что то не так в этой бибилиотеке http://code.google.com/p/cvblob/
-
-
На первый взгляд ошибка в следующем:Вынеси определение объекта IplImage *img; ДО цикла while.
В теле цикла просто:
img = cvQueryFrame(capture);
Не помогло. Я даже делал циклический буфер, то есть что бы делать cvReleaseImage не сразу, а по прошествии некоторого времени, все равно ошибка вылетает.
Unhandled exception at 0x6d7a15be in ffmpegtest.exe: 0xC0000005: Access violation writing location 0x01141000. -
О подключении версии 2.0 к билдеруЗаменяем в строках с ошибками "Mat_" на "Mat_<_Tp>".
Попробовал, проблемы с шаблонами это решает (остается много других ошибок, но они не сложно исправляются).
Перспектива есть.
Подскажи как исправил)?
к примеру у меня в cxcore в строке (2144) FileNode operator -> () const;
выдает : cxcore.hpp operator-> must return a pointer or a class
еще есть куча ошибок подобных [cxoperations.hpp(: E2316 '_fm_cos' is not a member of 'std'
-
1. Скачал ffmpeg.2. Поправил в ffopencv.cpp подключаемые либы на те, которые есть в скачанной ffmpeg.
...
Сделал все как по инструкции) Заработало!
Но обнаружился один МЕГА баг, в общем утечка памяти.
cvNamedWindow("1", 1); CvCapture *capture = cvCaptureFromFile_FFMPEG("http://192.168.1.2/axis-cgi/mjpg/video.cgi?resolution=320x240&.mjpg"); while (true) { if (cvWaitKey(10) == 27) break; IplImage *img = cvQueryFrame(capture); if (img == NULL) break; cvShowImage("1", img); // cvReleaseImage(&img); // если очищать то при следующем cvQueryFrame будет эксепшен, если не чищать то утечка будет расти(( }
Что делать, как исправлять?
-
Исследователи Кембриджского Университета разработали технологию, которая позволяет создавать 3D файл путем вращения объекта перед веб камерой Probabilistic Feature-based On-line Rapid Model Acquisition
Сам не пробовал, но может кому пригодится
-
Ничего не получается...
Кто тренировал и у кого получилось, покажи плиз какого вида картинки вы использовали в negative и positive
-
а вот негативных должно быть все равно много.В общем что бы не детектировал фон я решил по пробывать отсекать его (заливать белым) оставляя только объект. получается негативные мне почти совсем не нужны?
хм... что получится из этого позже отпишу.
-
Млин... опять не получилось... обводит кружочками фон(
Как же правильно делать
Какой фон предпочтительнее?
-
Например AXIS Camera Control SDK http://www.axis.com/techsup/software/acc/index.htmЧто собственно в 8 посте я и написал, только использовал не AXIS Camera Control SDK, а Axis Video Capture Driver.
-
А имеет значение размер изображения?
К примеру если я обучаю каскад на картинках 320x240, а использовать буду на 160х120.
И имеет ли значение поворот объекта?
К примеру я обучу распознавать профиль человека который смотрит налево, будет ли он так же хорошо работать с профилем повернутым направо?
-
Должно быть 7000 объектовмля это полный ппц... даже если 2 сек на 1 картинку.. то 7000 объектов это 4 часа....
-
Это означает, что на изображении 0018.bmp присутствует 1 искомый объектЭто я понял, я в смысле, должно быть 7000 картинок с описаниями (0018.bmp 1 90 22 55 68) объектов?
-
Всем привет! Пытался обучать классификатор Хаара, использовал haarkit.
Но вышло как то не очень... Почему то детектируется фон, Куча разноцветных кружочков)
- npos <number_of_positive_samples>,- nneg <number_of_negative_samples>
количество положителных/отрицательных образцов используемых при обучении каждого уровня классификатора. Разумные значения: npos = 7000 и nneg = 3000.
Это значит что должно быть столько картинок (7000, 3000)? и причем у положительных должны быть выделены объекты типа:
rawdata/0018.bmp 1 90 22 55 68rawdata/0019.bmp 1 81 19 59 76
rawdata/0020.bmp 1 83 19 53 73
?
-
Да и в самом opencv есть blob_tracking_modules, вроде неплохо работаетВ самом деле так считате? Хм... как по мне так это один большой тормоз, кадры по секунде обрабатывает.
-
Нашел отличную реализацию, трекинга объектов спешу с вами поделиться. Смотрите вложение.
Есть основные 4 функции cvLabel, cvFilterByArea, cvUpdateTracks, cvRenderTracks;
В cvLabel передается сегментированное изображение, функция назначает белым пятнам(blob), каждому свой номер. (как сегментировать решаем сами, в примере осуществляется поиск красного квадрата)
cvFilterByArea удаляет blob-ы которые не подходят по площади.
cvUpdateTracks собственно сам трекинг.
cvRenderTracks отображение blob-ов.
Проект расположен тут: http://code.google.com/p/cvblob/
-
Все таки можно отключать), без перекомпиляции cvSetErrMode(CV_ErrModeSilent);
Нашел ответ в другом топике)
Конкурс от Яндекса
в Обсуждение общих вопросов
Опубликовано · Report reply
Спасибо за интересную новость) Можно попробовать))