Перейти к содержимому
Compvision.ru

Smorodov

Главные администраторы
  • Количество публикаций

    3 873
  • Зарегистрирован

  • Посещение

  • Days Won

    346

Все публикации пользователя Smorodov

  1. Вот есть ссылочка OpenCV OCR а тут посерьезнее материальчик: OCR_Systems.pdf
  2. Стандартных нет. В инете под заголовком handTracking нашел классификатор: handtracking.rar но пока не проверял (не знаю, что он ищет ).
  3. Нелинейные уравнения обычно сначала линеаризуют, синус малого аргумента (приращения), в таком случае, принимается равным своему аргументу, выраженному в радианах, а косинус равным 1. Процесс решения, в таком случае, итерационный. 1. берем начальные приближения, где решения известны (обычно это что-то тривиальное) 2. даем малые приращения 3. решаем линейную систему относительно неизвестных приращений 4. повторяем с шага 2 пока не придем в нужную точку посмотреть можно здесь http://tvority.ru/blog/2008-10-17-17 или по google поискать, что нибудь по посоду линеаризации нелинейных уравнений.
  4. Как прикрутить OpenCV к билдеру?

    Если Виста то надо ставить спец заплатку для совместимости со старым форматом хелпа. Если XP, то обычно проблем не наблюдается. Можно попробовать вызвать через меню. Может просто функциональные клавиши не работают (кривой драйвер клавы), такое тоже бывает.
  5. В pdf передумал, и так вроде неплохо. Немного поправил. PS: Для выделения объектов по цвету обычно работают в HSV пространстве, а не RGB, просто это легче. Ссылка с картинками по HSV.
  6. Мне нравится, но если можно подправлю, чуток (по стилю) с Вашего согласия и в pdf запишу. С сохранением авторства, разумеется. Спасибо за отличный материал.
  7. Входные данные для OpenCV

    Так и надо понимать я просто опечатался. Да и это несложно проверить, заполнив в массиве каждый третий байт 0xFF-ом. И еще ширина изображения в байтах равна img->widthStep, а не img->width*3, это так, для инфы. Просто сам накалывался. Когда ширина изображения кратна 8 то img->widthStep=img->width*3, а если нет тогда не равно.
  8. Тренировка каскадов Хаара

    Излюбленный пример при демонстрациях машинного зрения и обработки изображений C:\Program Files\OpenCV\samples\c\lena.jpg Что касается разрешения, то HaarClassfiers не особо к нему чувствительны, насколько я понял, они все равно уменьшают окно сканирования до 24х24 см. здесь http://www.cs.utexas.edu/~grauman/courses/...la_cvpr2001.pdf
  9. У меня и с 1.1pre1 работает во всяком случае в билдере Хотя баги в 1.1 есть , но ждем 2.0 (21 сентября) с новыми багами и ++ поддержкой.
  10. Шаблоны движения (motion templates)

    Неправильно думаете есть даже пример правда там для кругового движения (одномерный случай), у Вас будет двумерный C:\Program Files\OpenCV\samples\c\kalman.c Вот лучшие материалы которые у меня есть по этой теме: SIGGRAPH2001_CoursePack_08.pdf и SIGGRAPH2001_Slides_08.pdf.
  11. Шаблоны движения (motion templates)

    Конечно, если нам надо отслеживать несколько объектов, то можно запоминать где какие объекты в последний раз были и их скорости, если мы знаем скорости, то мы примерно можем прикинуть, где ожидать появления этого объекта на следующем кадре. Даже если траектории пересекаются, учитывая инерционность движения, можно достаточно устойчиво трекать каждый из объектов. Естественно нужен фильтр, т.к. может быть много помех. Фильтровать можно по положению и скорости (тоже меняется не мгновенно), если знать направление и величину скорости, то если объект отклонился больше чем на значение заданного порогового значения, его не учитывать (или считать новым объектом). Неплохо работает в таких случаях фильтр Калмана.
  12. Шаблоны движения (motion templates)

    // при первом проходе присвоить X и Y равными x и y а дальше по циклу. // Центр прямоугольника x = comp_rect.x + comp_rect.width/2; y= comp_rect.y + comp_rect.height/2; // Вектор скорости vx = cvRound( magnitude*cos(angle*CV_PI/180)); vy = cvRound( magnitude*sin(angle*CV_PI/180)); X+=vx; // Ось перевернута Y-=vy; Можно просто x и y записывать (правда может не очень точно получится), зато ошибка копиться не будет.
  13. У меня вот так tmplEhmm: и obsInfoVec[ j ] Может архив проекта выложите, я Vs2008 поставил, посмотрю поближе.
  14. Странно вот что: totalPeople 0 int totalFaces 0 int _A_SUBDIR error: identifier '_A_SUBDIR' out of scope Это не может означать что просто фотки не загружены? Можно проверить значения элементов массива IplImage **images в функции Train на значение отличное от NULL.
  15. Можно попробовать заменить этот цикл for( j = 0; j < numImages; j++ ) { ////////////////////////////////////////////////////////////////////////////////// // вылетает во время выполнения следующей строки cvEstimateObsProb( obsInfoVec[ j ], tmplEhmm ); ////////////////////////////////////////////////////////////////////////////////// likelihood += cvEViterbi( obsInfoVec[ j ], tmplEhmm ); }[/code] на [code]////////////////////////////////////////////////////////////////////////////////// // вылетает во время выполнения следующей строки cvEstimateObsProb( obsInfoVec[ 0 ], tmplEhmm ); ////////////////////////////////////////////////////////////////////////////////// likelihood += cvEViterbi( obsInfoVec[ 0 ], tmplEhmm ); и посмотреть будет-ли вылетать, если не будет, значит проблема с количеством элементов массива obsInfoVec, если будет, значит проблема с созданием элементов массива obsInfoVec. tmplEhmm - используется и ранее по программе, и проблем вроде не вызывает. И неплохо бы брейкпоинт поставить на эту строчку и посмотреть чему переменные равны. Или printf-ом их в консоль вывести попытаться. ЗЫ: Ответы умозрительные, VS сейчас не установлен, проверить не могу.
  16. По одной строчке ничего сказать нельзя, посмотрите в дебаггере чему равны значения аргументов перед вызовом функции, и опишите ошибку, которую вызывает эта строка. Что должны представлять собой аргуенты можно посмотреть здесь: Eigen Objects (PCA) Functions Настройки VS2008 можно посмотреть здесь (то что касается Opencv): http://www.compvision.ru/forum/index.php?showtopic=95
  17. Как нарисовать CvBox2D

    Спасибо, эту весьма удобную ф-цию сразу не заметил. cvBoxPoints определена так: void cvBoxPoints( CvBox2D box, CvPoint2D32f pt[4] ) { float a = (float)cos(box.angle)*0.5f; float b = (float)sin(box.angle)*0.5f; pt[0].x = box.center.x - a*box.size.height - b*box.size.width; pt[0].y = box.center.y + b*box.size.height - a*box.size.width; pt[1].x = box.center.x + a*box.size.height - b*box.size.width; pt[1].y = box.center.y - b*box.size.height - a*box.size.width; pt[2].x = 2*box.center.x - pt[0].x; pt[2].y = 2*box.center.y - pt[0].y; pt[3].x = 2*box.center.x - pt[1].x; pt[3].y = 2*box.center.y - pt[1].y; }
  18. Как нарисовать CvBox2D

    Берем координаты углов относительно центра прямоугольника в неповернутом, несмещенном состоянии. Поворачиваем относительно центра, и затем смещаем. for (int i=0;i<4;i++) { x1=x0*cos(phi)+y0*sin(phi)+dx; y1=-x0*sin(phi)+y0*cos(phi)+dx; } // sin и cos можно (лучше) посчитать заранее // phi - угол поворота (радианы), dx, dy - смещение // x0,y0 - координаты углов относительно центра прямоугольника // x0,y0 - координаты повернутой и смещенной угловой точки // дальше рисуем линиями
  19. Входные данные для OpenCV

    IplImage *_Grab3=0; // Указатель на структуру // Выделяем память кол-во слоев 3 (RGB), байты так и идут RGB (или GBR не помню). // Если надо однослойное (серое), то последний аргумент 1 // Усли надо с плавающей точкой, то предпоследний аргумент CV_32FC1 и т.д. _Grab3 = cvCreateImage( cvSize(_Grab->width,_Grab->height),IPL_DEPTH_8U,3); // Получаем указатель на данные unsigned char* data; cvGetRawData(_Grab3, (uchar**)&data); // Копируем данные при помощи memcpy, например // Выводим картинку
  20. OpenCV+Audio

    Прикрутил аудиозахват. Архив с проектом: simpleAudio.rar
  21. OpenCV+Audio

    Здесь куча литературы по распознаванию речи: http://gladkos.livejournal.com/970.html
  22. Можно так: // Выделяем память под копию кадра if( !frame_copy ) { frame_copy = cvCreateImage( cvSize(352,288),IPL_DEPTH_8U, frame->nChannels );} // Масштабируем под заданный размер cvResize( frame, frame_copy, CV_INTER_LINEAR );[/code]
  23. Распознавание лиц

    DBL_MAX - максимально возможное число типа double, по моему стандартная. А функция вычисляет минимальную дистанцию между векторами (помнится по Махаланобису (Mahalanobis distance), т.к. делим на собств. число.). Я думаю, что единственный путь, определить что фото нет в базе, это контролировать расстояние между существующими в базе векторами и поступившим на вход. Если расстояние превышает определенный порог, считать что её нет в базе. Существуют методы, на основе собственных лиц, работающие на бесконечном множестве фотографий, я их подробно не смотрел, но возможно они вам подойдут больше.
  24. Интересная функция cvRemap

    Спасибо за примерчик Функция и правда может быть довольно полезной, при создании интересных видеоэффектов. Посмотрел доки, попробую рассказать что понял. Назначение функции: Каждому пикселю исходной картинки с координатами (x,y), ставится в соответствие пиксель результирующего изображения с координатами (mapx(x,y),mapy(x,y)). В результате получаем искривленное произвольным образом изображение или перемешанный набор пикселей. Так как тип элемента (mapx(x,y),mapy(x,y)) - 32fC1, то для получения значения результирующего пикселя используется интерполяция (у Вас она линейная). Последний аргумент функции - цвет заполнения областей, которые, в результате выполненного преобразования остались незатронутыми.
  25. Распознавание лиц

    Сравнению лица с набором фоторграфий (поиску по фото) посвящены как раз 2 и третья ссылки из моего предыдущего поста. А именно: метод главных компонент. Более простой и потому распространен больше, однако достаточно чувствителен к геометрическим искажениям изображения. Теория обсуждалась здесь: http://www.compvision.ru/forum/index.php?showtopic=71 метод скрытых марковских моделей (с моей точки зрения, более точный и надежный). Сделан на основе примера, ответы на некоторые вопросы для меня еще не очевидны (например, выбор начений некоторых параметров), что понял - откомментировал. Это, как я понял (прогуглив тему), два из наиболее распространенных методов, применяемых при сравнении изображений, вернее вычислении степени похожести, выраженной числом. Однако не стоит считать, что если Вы считаете одну пару изображений более похожей между собой, что машинный метод сравнения будет полностью с Вами согласен, так как человек и машина используют различные наборы признаков.
×