Jump to content
Compvision.ru

Smorodov

Главные администраторы
  • Content count

    3,833
  • Joined

  • Last visited

  • Days Won

    343

Everything posted by Smorodov

  1. Тренировка каскадов Хаара

    С опцией CV_HAAR_FIND_BIGGEST_OBJECT, команда cvHaarDetectObjects находит наибольший по размеру объект проходящий по классификаторам. Если хотите избавиться от помех камеры, можно попробовать накапливать кадры, используя видеоаккумулятор, например, так (это фрагмент): // Grab - изображение, поступивше с камеры if(!gray) {gray = cvCreateImage(cvSize(Grab->width,Grab->height), IPL_DEPTH_8U, 1);} if(!gray_f){gray_f = cvCreateImage(cvSize(Grab->width,Grab->height), IPL_DEPTH_32F, 1);} if(!accum_f){accum_f = cvCreateImage(cvSize(Grab->width,Grab->height), IPL_DEPTH_32F, 1);} cvCvtColor(Grab, gray, CV_BGR2GRAY); // Получаем серый цвет cvConvertScale( gray, gray_f); // Это усреднитель 0.3 - коэффициент вклада каждого кадра cvRunningAvg( gray_f,accum_f,0.3); cvConvertScale( accum_f, gray);[/code] Что касается распознавания, то используется один кадр (алгоритм Виолы-Джонса (он-же каскады Хаара, правда не совсем)). И еще, точность алгоритма, составляет порядка 80-95% так что ложные срабатывания (в небольшом количестве) допустимы. Для улучшения качества распознавания можно также применять пирамиду cvPyrDown (кажется), хотя я пробовал, эффект не очень заметный. Можно использовать результаты распознавания Хааром, как промежуточный результат для другого метода, например PCA (метод главных компонент (собственные лица) (на форуме есть), нужно правда его тогда подправить), или другим.
  2. Алгоритм Вороного

    Видимо имелось ввиду что то типа этого: Crust and anticrust И еще, можете посмотреть по Вороному сайтик интересный: Вороной, то что выше оттуда.
  3. распознавание движушегося фона

    Векторы, в разных участках изображения будут направлены в разные стороны, с учетом перспективы. Я бы вычислил оптический поток (только нужен плотный, возможно реализация на CUDA как здесь: ), затем нашел бы производные от него (см. алгоритмы выделения границ изображения). Объекты скорость которых резко отличается от скорости окружающего фона (скорость соседних точек которого отличается слабо), будут выделены. Библиотеку для этого можно скачать здесь: LKCuda Здесь тоже что то на эту тему: CUDA + OpenCV
  4. Я не знаю как он рассчитывает во втором ролике, но подозреваю что там ищется несколько конечных точек (голова и ладони), и вместе с расчетом обратной кинематики (на которую наложены ограничения по подвижности суставов), получается довольно точно. Насчет управления компом при помощи жестов, мне кажется это удобно лишь в небольшом количестве специальных случаев. То же что и с сенсорными кнопками, не очень удобно (без тактильной обратной связи), но в ряде случаев без них не обойдешься.
  5. В OpenCV пока не пробовал такое делать, хотя подозреваю что все инструменты для этого там есть. Не знаю поможет ли, но вот материальчик по распознаванию человека по подписи: SignRecognition_engl_.pdf Еще статейка (распознавание рукописных формул): http://stephane.lavirotte.com/research/bib...ll-etal1999.pdf Генетический алгоритм распознавания рукописных чисел: http://www.ppgia.pucpr.br/~soares/download/sibgrapi01-ga.pdf Еще пара подходов: http://w3.gel.ulaval.ca/~mbusque/reports/artmap_digit.pdf
  6. Результат моих экспериментов по определению координат глаз (эксперименты продолжаются) Архив с проектом: FaceDetect2.rar
  7. Белый бордюр не знаю зачем, это у Интел надо спрашивать, долго мучился с этим, не мог понять, почему моменты неправильно ищет. Контуры в OpenCV задаются цепями Фримана (это последовательность команд такая вверх, вверх-влево, влево,... и т.д.), работать с этим не удобно. Аппроксимация нужна чтобы получить координаты границы контура в виде последовательности точек p(x,y), которые можно потом линией соединить, и получится граница контура (полигон). параметры функции аппроксиматора задают с какой погрешностью допустимо это сделать. CvSeq - аналог класса Vector в c++ CvSeqReader - это что то похожее на итераторы класса Vector в c++ Офиц. руководство
  8. И еще ролик, там как раз с контурами работают А здесь тоже круто
  9. Ну тогда PCA, или HMM, стороны ладони различить трудно будет в любом случае, мы же не знаем, какая рука показывается.
  10. А не влияет масштаб Поправил картинку выше.
  11. Пришлось напрячь художественные способности и повторить шедевр
  12. Картинка с другого моего сайта (старого) (думаю с цифрами получится) Повороты не имеют значения. Правда и 6 от 9 тоже не отличить Цифры означают степень различия, насколько я помню. Красятся в красный или зеленый по порогу (у красного человечика пропорции другие, а зеленые - клоны повернутые).
  13. Ну, если руки не выворачивать, то я думаю и без разворота можно обойтись А если выворачивать, то вписывать в эллипс и разворачивать ориентируясь на большую ось (на самом деле на ось инерции фигуры). Или использовать момент товарища Ху ему без разницы угол и масштаб, ему форма важна.
  14. Есть некоторая информация здесь: http://www.zone1.de/PocketPC/OpenCV.html там писание сборки для eMbedded Visual C++ 4.0 и пример приложения. У меня пока руки не дошли. Если кто пробовал, отпишитесь пожалуйста.
  15. Хочу предупредить, что методы PCA и HMM чувствительны к повороту и к тому же выловленную картинку придется масштабировать в некий стандартный размер. Я еще про моменты Ху ( Hu moments ) забыл, они не имеют зависимости от масштаба и поворота, а характеризуют именно форму контура. В офиц. руководстве (от Интел) это есть. Для таких вещей как анализ контура во втором случае идеально подходит. На форуме еще примеры по контурам были. (Определение похожести контуров). Камеры высокого разрешения, конечно хорошо, но не нужно забывать и о потоке обрабатываемой информации. Чем больше разрешение - тем больше задержки по времени, и от этого меньше точность алгоритмов завязанных на скорость поступления видеоданных, например "шаблоны движения" или "оптический поток". В тех роликах, я думаю, применяется разрешение 640х480, таких камер уже достаточно много. И скорость работы приемлемая. У меня такая на Asus EEE установлена, OpenCv притормаживает, но в целом сносно работает. ЗЫ: Там (в ролике) фон динамический, есть разница
  16. Что то это очень очень напоминает метод главных компонент или, в простонародье, principal component analysis (PCA) Пример здесь Хотя скрытые марковские модели (по английски HMM (для google)) наверное надежнее будут. Пример здесь Мне еще вот это нравится: а это уже деформируемые модели, родственные жадным змеям, но только сложнее малость.
  17. Поиск точки от лазерной указки

    В этом случае все предельно просто, после бинаризации остается лишь пятно от указки, оно ярче всего остального. А дальше алгоритм который вписывает набор точек в эллипс, эта часть есть в переведенной части руководства (нахождение осей и их наклон). Наклон тут не нужен, а центр можно найти через расчет моментов инерции этого пятна. См. начиная со стр.12 этого документа: CV_Руководство.pdf
  18. Программка калибрующая камеру

    Калибровка нужна, в основном, если необходимо что нибудь мерить, также однозначно она требуется в стерео зрении, т.к. там очень важно получить точные, согласованные координаты объектов (с обеих камер), для вычисления их пространственных координат. Если глянете на формулы, используемые в стерео-зрении то сразу заметите, насколько результат зависит от точности исходных данных. Калибровка исправляет сложные искажения, которые определяются неидеальностью формы линзы, ошибками её механической фиксации, ошибки изготовления сенсора. Когда все это складывается получается достаточно сложная форма искажений, как в кривом зеркале, которую зная лишь 4 точки исправить не удастся. Т.к. одна кривизна посередине, а по краям уже совсем другая. Вот тут пояснения (лекции МГУ): Модель и калибровка камеры
  19. Описание алгоритма группировки отрезков, найденных алгоритмом поиска прямых. При его помощи можно попытаться собрать контур из полученных отрезков. Задача_группировки_отрезков.pdf
  20. Детектор углов

    Документ с русским описанием алгоритма: Детектирование_углов.pdf
  21. Большой разницы нет, OpenCV одинаково работает и на винде и на линуксах, просто примеры приведены для билдера, т.к. у меня сейчас билдер, а код то один и тот же что для линукса, что для винды. Может с выводом в форму поколдовать придется, но такой вывод далеко не всем нужен. Для линукса есть преимущество по моему IPP для него распространяются бесплатно. Да и на микроконтроллерах лучше линукс (хотя тоже не всегда). Так что можно основная часть кода легко портируема, нужно будет подправить каие-нибудь системозависимые детали. ЗЫ: cfr, насколько я знаю работает под линуксом, и очень доволен. Можете с ним связаться.
  22. Для OpenCV я сделал перевод их руководства, он лежит здесь: Обучение классификаторов Хаара Насчет рук и ног, в примере FaceDetect, в директории с классификаторами лежат каскады для нижней части тела haarcascade_lowerbody и для верхней части тела haarcascade_upperbody, а также для человека в полный рост haarcascade_fullbody.
  23. Описание работы алгоритма детектора прямых (на русском языке): Детектор_прямых.pdf
  24. Ссылка на апплет, можно прощупать что это такое. И здесь немного информации: Жадные змеи и активные контуры
  25. Русское описание змеиного алгоритма: GreedySnake.pdf
×