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

Smorodov

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

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

  • Посещение

  • Days Won

    346

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

  1. Посмотрите еще этот документ: http://www.compvision.ru/forum/index.php?a...=post&id=95 Не самый простой способ, но его часто используют при OCR.
  2. Как прикрутить OpenCV к билдеру?

    Приводить понадобилось, чтобы получть float, а CvPoint определена так: typedef struct CvPoint { int x; int y; } CvPoint;[/code] То есть там 8 байт (два int-а по 4 байта), на два float-а не тянет (отсюда ошибка). Скорее всего это Integer по дельфофски (два четырехбайтовых числа). ЗЫ: С делфофскими форматами данных знаком поверхностно, могу ошибаться.
  3. Есть Fann Tool (утилитка с графическим интерфейсом) можете попробовать, преобразуем изображение в файл входов-выходов (формат простой, описан в документации) и погонять с разными настройками. ЗЫ: Нейросеть тренировать долго, считает она на порядки быстрее чем тренируется.
  4. cvMatchTemplate

    Написал програмку, позволяющую поэкспериментировать с cvMatchTemplate. Программа строит зависимости максимального и минимального отклика от угла поворота шаблона. Если открывать изображения больше чем 100х100 график строится корректно, но само изображение не помещается на панельки, масштабирование не делал умышленно, если кому нужно что то переделать, исходники в архиве. Слева отображается само изображение, справа отклик, графики нормированы, для того чтобы посмотреть значения нужно навести мышь на график. MatchTemplTool.rar ЗЫ: С большими изображениями работает медленно (в процессе поворота ни на что не отвечает), так что лучше работать с маленькими (до 100 на 100) изображениями.
  5. Работа с контурами

    Если вычислить моменты можно найти главные оси , зная главные оси находим наклон (если требуемая ось повернута и (или смещена), измеряем смещение (линейное или угловое) и корректируем). Вот кусок кода: double M00=moments.m00; double M20=moments.m20; double M02=moments.m02; double M11=moments.m11; double A=(M20/M00)-xc*xc; double B=2*((M11/M00)-xc*yc); double C=(M02/M00)-yc*yc; double LL=sqrt( ( (A+C)+sqrt(B*B+(A-C)*(A-C)) )/2)*2; double LW=sqrt( ( (A+C)-sqrt(B*B+(A-C)*(A-C)) )/2)*2; // Для вычисления угла нужны центральные моменты инерции M20=moments.mu20; M02=moments.mu02; M11=moments.mu11; double theta=(atan2(2*M11,(M02-M20))/2)*(180/M_PI);[/code] где xc и yc ищется так: [code]float xc=(moments.m10/moments.m00); float yc=(moments.m01/moments.m00); PS: квадрант может скакать.
  6. cvMatchTemplate

    Можно сделать шаблон, включающий не весь искомый объект, а какую-нибудь его характерную часть.
  7. cvMatchTemplate

    В документации написано вот что: After the function finishes the comparison, the best matches can be found as global minimums (CV_TM_SQDIFF) or maximums (CV_TM_CCORR and CV_TM_CCOEFF) using the MinMaxLoc function. что буквально значит: После того, как функция завершит сравнение, наилучшие совпадения могут быть найдены как глобальные минимумы (метод поиска CV_TM_SQDIFF) или максимумы (методы поиска CV_TM_CCORR и CV_TM_CCOEFF) при помощи функции MinMaxLoc. Скорее всего Вы используете метод CV_TM_SQDIFF. подробнее здесь: http://opencv.willowgarage.com/documentati...cvMatchTemplate
  8. cvMatchTemplate

    Вот здесь есть код: http://dasl.mem.drexel.edu/~noahKuntz/openCVTut6.html
  9. Выравнивание данных

    По поводу выравнивания, там где это нужно знать (например IplImage) есть параметр widthStep, определяющий сколько байт выделено на строку (что может не совпадать с размером фактических данных), есть параметр отвечающий за выравнивание данных изображения, но он не используется, видимо этим заведует интелловская библиотека Ipl. ЗЫ: У меня изображение выравнивалось по 8 байтам, но это вполне может зависеть от машины и операционки.
  10. Если Вы про AAM-Library то библиотека использует двухмерные модели (контур + текстура). Я немного переделал (несколько строчек), и у меня работает при частоте кадров от нескольких кадров в сек. до кадров 10-15 в сек, в зависимости от количества итераций приближения. Я думаю что возможно ускорить еще больше, если: 1) Брать приближение из предыдущего кадра (20-30 итераций делать только на первом кадре), тогда на каждый кадр 1-2 итерация, это должно работать достаточно быстро и точно. 2) Как вариант, можно использовать для действий с текстурой OpenGL или DirectX. Если про FRAV, то я дал ссылку как на базу моделей,ведь из трехмерных получить двумерные несложно. Я предполагал, что эта база будет полезна при использовании AAM-library, так как содержит аннотированные изображения (изображения с отмеченными характерными точками лица).
  11. База трехмерных моделей лица VRML с текстурой. http://www.frav.es/research/facerecognition/FRAV3D/
  12. Работа с контурами

    Насколько я знаю, cvMatchTemplate сохраняет работоспособность при углах поворота плюс-минус 15 градусов, можно делать несколько прогонов. Можно, для сокращения области поиска использовать ROI вычисленную по бинаризованному изображению, которое у Вас уже имеется. Можно попробовать (к бинарному изображению) применить функцию cvDistTransform. Тем самым получите центры объектов. А после этого, по максимальному отклику cvMatchTemplate найти и поворот.
  13. Работа с контурами

    Может лучше сегментировать изображение (при помощи cvFloodfill, например получить маски для каждого цветового пятна) а потом определять контуры? Контуры можно конечно распутать, если они обладают свойством гладкости и не имеют разрывов в производных, но это сложный путь, лучше поработать с изображением до выделения контуров.
  14. Работа с контурами

    Сохранение контура: CvFileStorage* fs = cvOpenFileStorage( "example.yml", 0, CV_STORAGE_WRITE ); cvWrite( fs, "result", result, cvAttrList(0,0) ); cvReleaseFileStorage( &fs ); Считывание контура: CvFileStorage* fs = cvOpenFileStorage( "example.yml", 0, CV_STORAGE_READ ); CvFileNode* fn= cvGetFileNodeByName( fs, cvGetRootFileNode(fs), "result" ); result=(CvSeq*)cvRead( fs, fn ); //----------------------- // работа с контуром // - - - - - - - - - - - - // - - - - - - - - -- - - - //----------------------- // освобождение хранилища cvReleaseFileStorage( &fs ); Что Вы имеете ввиду под сегментацией контура? Разбить на отрезки (точки), или что то другое ?
  15. Как прикрутить OpenCV к билдеру?

    Это приведение не к типу float а к указателю на данные типа float. PChar это указатель на данные типа char или BYTE .
  16. Как прикрутить OpenCV к билдеру?

    cvCircle ничего не считает, эта команда рисует окружности, это всего лишь вывод результата. Координаты кругов: x=p[0] ; y=p[1] ; радиус = p[2].
  17. Посмотрите OpenTL (надстройка над OpenCV). Там есть инструменты для трекинга. Судя по постановке задачи нужен какой-то фильтр, Particles (Condensation) или фильтр Кальмана. Если не лень поковыряйте этот проект.
  18. Трекинг объектов.

    На сайте NVidia есть ссылка на пример реализации SURF на CUDA + OpenCV 2.0, можно его покопать еще для общего развития : http://www.mis.tu-darmstadt.de/surf И еще, в SVN версии OpenCV появились намеки на то, что в следующей версии появится поддержка GPU (CUDA). См. директорию opencv/modules/gpu/. Полезно будет посмотреть библиотеку для трекинга OpenTL (судя по всему, на базе OpenCV) : http://www.opentl.org/index.html
  19. Я бы попробовал собрать классификатор из слабых признаков, например: параметры контура (площадь, отношение длины к ширине, построить гистограмму контура cvCalcPGH(const CvSeq* contour, CvHistogram* hist) т.д. ), параметры цвета (если есть), вероятные места появления объекта, параметры симметрии. Как вариант, можно попробовать натренировать каскады Хаара. Можете еще посмотреть здесь: http://code.google.com/p/aam-library/ ориентировано на лица, но можно переделать под любые объекты.
  20. В Squares, можно предварительно отсеивать контуры по площади, и убрать клоны (близкие по форме и положению), применить cvPyrDown - тогда будет быстрее. Есть еще пара советов: 1) На форуме был пример нахождения угловых точек, может его приспособить? 2) Использовать поиск на основе преобразования Хафа http://www.inf.ufrgs.br/~crjung/research_a.../paper_1125.pdf Как работает читать здесь: http://www.massey.ac.nz/~mjjohnso/notes/59318/l11.html ЗЫ: Не факт что преобразование Хафа будет работать быстрее.
  21. Работа с камерами

    OpenCv- шные примеры тоже выводят черный экран?
  22. Хотя-бы какую то обработку данных сделать нужно, чтобы уменьшить нагрузку на ресурсоемкие методы обработки думаю что стохастические фильтры здесь подходят.
  23. Работа с камерами

    У меня, например, параметры камеры устанавливаются Logitech-овской прогой в трее, через OpenCv не пробовал, и думаю что не получится , я постоянно использую максимальное разрешение, потом масштабирую (уменьшаю в основном): cvResize(frame, frame_resized, CV_INTER_LINEAR); где: frame - кадр с камеры, frame_resized - изображение нужного размера. ЗЫ: мне кажется, что камера у Вас не поддерживает запрашиваемое разрешение (см. документацию).
  24. Фильтрация изображений.

    Есть ссылка на фильтр "FFT3DFilter - частотный 3D фильтр для сильного понижения шума и умеренного повышения резкости."
  25. На вскидку видится вот что: 1) нейросеть, или другой классификатор, все равно нужно обучить, для этого все равно придется включать узлы по отдельности, либо менять режимы работы узлов (тоже по отдельности). 2) не обязательно использовать нейросеть, мне кажется что тут даже лучше пойдет какой нибудь статистический метод, например particle filter. Ведь можно использовать методику, аналогичную той, что используется для отделения фона. (можно почитать тут, например: http://www.cgm.computergraphics.ru/content/view/67 ) Собираем статистику спектра нормально работающей машины, затем смотрим, изменения, и потом можно применить классификатор (четкий, или нечеткий).
×