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

Smorodov

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

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

  • Посещение

  • Days Won

    346

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

  1. Программка калибрующая камеру

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

    Документ с русским описанием алгоритма: Детектирование_углов.pdf
  4. Большой разницы нет, OpenCV одинаково работает и на винде и на линуксах, просто примеры приведены для билдера, т.к. у меня сейчас билдер, а код то один и тот же что для линукса, что для винды. Может с выводом в форму поколдовать придется, но такой вывод далеко не всем нужен. Для линукса есть преимущество по моему IPP для него распространяются бесплатно. Да и на микроконтроллерах лучше линукс (хотя тоже не всегда). Так что можно основная часть кода легко портируема, нужно будет подправить каие-нибудь системозависимые детали. ЗЫ: cfr, насколько я знаю работает под линуксом, и очень доволен. Можете с ним связаться.
  5. Для OpenCV я сделал перевод их руководства, он лежит здесь: Обучение классификаторов Хаара Насчет рук и ног, в примере FaceDetect, в директории с классификаторами лежат каскады для нижней части тела haarcascade_lowerbody и для верхней части тела haarcascade_upperbody, а также для человека в полный рост haarcascade_fullbody.
  6. Описание работы алгоритма детектора прямых (на русском языке): Детектор_прямых.pdf
  7. Ссылка на апплет, можно прощупать что это такое. И здесь немного информации: Жадные змеи и активные контуры
  8. Русское описание змеиного алгоритма: GreedySnake.pdf
  9. Реализация змей на OpenCV Архив с проектом: snake.rar
  10. Улучшенная функция Ipl2Bmp

    Корректно выводит изображения ширины не кратной 8 и изображения с типом элемента не IPL_DEPTH_8U. Думаю что должен выводить любые изображения. #define WIDTHBYTES(bits) ((((bits) + 31) / 32) * 4) //--------------------------------------------------------------------------- // Создание API шного битмапа из интеловского RGB изображения //--------------------------------------------------------------------------- HBITMAP CreateRGBBitmap(IplImage* _Grab) { char *App; IplImage *_Grab3=0,*_Grabf=0; LPBITMAPINFO lpbi = new BITMAPINFO; lpbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); lpbi->bmiHeader.biWidth = _Grab->width; lpbi->bmiHeader.biHeight =_Grab->height; lpbi->bmiHeader.biPlanes = 1; lpbi->bmiHeader.biBitCount = 24; lpbi->bmiHeader.biCompression = BI_RGB; lpbi->bmiHeader.biSizeImage = WIDTHBYTES((DWORD)_Grab->width * 8) * _Grab->height; lpbi->bmiHeader.biXPelsPerMeter = 0; lpbi->bmiHeader.biYPelsPerMeter = 0; lpbi->bmiHeader.biClrUsed = 0; lpbi->bmiHeader.biClrImportant = 0; void* pBits; HBITMAP hBitmap = CreateDIBSection( NULL, lpbi, DIB_RGB_COLORS, (void **)&pBits, NULL, 0 ); delete lpbi; if ( hBitmap ) App=(char*)pBits; // Если глубина изображения не IPL_DEPTH_8U (однобайтовое целое), конвертируем if(_Grab->depth!=IPL_DEPTH_8U) { _Grabf=cvCloneImage(_Grab); if(_Grab) {cvReleaseImage( &_Grab);} _Grab = cvCreateImage( cvSize(_Grabf->width,_Grabf->height),IPL_DEPTH_8U,_Grabf->nChannels); cvConvert(_Grabf,_Grab); if(_Grabf) {cvReleaseImage( &_Grabf);} } // Если изображение содержит один канал, создаем трехканальное изображение // Серое или бинарное if(_Grab->nChannels==1) { _Grab3 = cvCreateImage( cvSize(_Grab->width,_Grab->height),IPL_DEPTH_8U,3); cvMerge(_Grab,_Grab,_Grab,NULL,_Grab3); } // Если входное изображение трехканальное, просто копируем указатель на него // Цветное if(_Grab->nChannels==3) { _Grab3=_Grab; } // Получаем указатель на данные unsigned char* data; cvGetRawData(_Grab3, (uchar**)&data); // Копируем данные if(_Grab3) { for (int i=0;i<_Grab->height;i++) { memcpy(App+_Grab3->widthStep*(_Grab3->height-i-1),data+_Grab3->widthStep*i,_Grab3->width*3); } } // Очищаем память если создавали изображение, а не копировали указатель if(_Grab->nChannels==1) {cvReleaseImage( &_Grab3);} return hBitmap; } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- // Функция вывода изображения на HANDLE оконного компонента //--------------------------------------------------------------------------- void APIDrawIpl(int x,int y,IplImage* _Grab,void *HANDLE) { HDC hMemDC,hDC; hDC=GetDC(HANDLE); hMemDC = CreateCompatibleDC(hDC); HBITMAP Bitmap=CreateRGBBitmap(_Grab); SelectObject(hMemDC,Bitmap); BitBlt(hDC,x,y,_Grab->width,_Grab->height,hMemDC,0,0,SRCCOPY); DeleteObject(Bitmap); DeleteDC(hMemDC); DeleteDC(hDC); } //--------------------------------------------------------------------------- //---------------------------------------------------------------------------[/code]
  11. Идея, положенная в основу проекта: Wiki Сама библиотека здесь: http://www.kavrakilab.org/OOPSMP/index.html
  12. Загружаемое из файла изображение 3х канальное I(x,y)blue ~ CV_IMAGE_ELEM( img, uchar, y, x*3); I(x,y)green ~ CV_IMAGE_ELEM( img, uchar, y, x*3+1); I(x,y)red ~ CV_IMAGE_ELEM( img, uchar, y, x*3+2); Если не заработает, то так: I(x,y)blue ~ ((uchar*)(img->imageData + img->widthStep*y))[x*3] I(x,y)green ~ ((uchar*)(img->imageData + img->widthStep*y))[x*3+1] I(x,y)red ~ ((uchar*)(img->imageData + img->widthStep*y))[x*3+2] или так: uchar *data; cvGetRawData(img, (uchar**)&data); I(x, y) = data[x*img->Width + y]
  13. Здесь пример на OpenCV (практически Ваша задача ): OpenCV OCR Документ с задачей аналогичной Вашей здесь (нейросети): Распознавание образов (букв) Посмотрите вот это еще: Метод распознавания лиц, думаю что для данной задачи его можно приспособить. Не знаю насколько он применяется для этого, но думаю что должен работать.
  14. Для начала гляньте топик "Картинка в картинке". И вопрос, а для чего попиксельный доступ? В другом топике есть такое (не проверял): "Удобно использовать макросы: CV_IMAGE_ELEM(img, uchar, i, j) " И пара моих заметок: Лучше координаты точек перед вычислением диагоналей присвоить переменным типа double, а не приводить типы, во всяком случае, не так как у Вас (может быть переполнение). Для определения диагонали sqrt можно не брать.
  15. Собственные вектора и значения

    Насколько я понимаю, не нужно ничего усекать. Эта матрица ковариации имеет те-же собственные векторы, что и правильная матрица ковариации (большая). Однако, у маленькой матрицы их N, а у большой N^2, но те N собственных векторов маленькой матрицы содержат все собственные векторы с максимальными собственными значениями из множества собственных векторов большой матрицы. Выбираем из этого количества K векторов, с самыми большими собственными значениями u1,u2,...uK. Нормируем их (приводим длины к единице). Дальше каждая фотка представляется как линейная комбинация этих самых K собственных векторов w1,w2,..wK. Fi: i-тое лицо (вектор (N^2)x1) (в pdf см. ниже это обозначено как Г ) mean: "среднее лицо" Найдем W =(w1,w2,...,wK), где wi=ui(это строка) * (Fi-mean)(это столбец) (Результат одно число для каждого wi) где u1,u2,...uK - это векторы базиса А i-тое лицо будет представлено вектором W=(w1,w2,w2,...wK) Получили векторы с которыми будем сравнивать поступающие на вход лица. Далее рассчитываем wi для поступившего лица. См выше. и сравниваем векторы (находим Евклидову дистанцию или можно (лучше) по Маханоблису). ЗЫ: Если где заглючился, прошу делать скидку на то что писал ночью Подробнее тут, см. стр.5. из http://www.cse.unr.edu/~bebis/MathMethods/..._study_pca1.pdf
  16. Собственные вектора и значения

    А откуда такая матрица? Там ведь при вычислении матрицы ковариации используется переставленное транспонирование, то есть размер матрицы не должен превышать количества фотографий, насколько я понял. Смотри опция OpenCV: CV_COVAR_SCRAMBLED - Fast PCA “scrambled” covariance.
  17. Собственные вектора и значения

    Там несколько проектов часть на с++, а часть на матлаб
  18. Собственные вектора и значения

    Вот китайцы понаписали, не сильно радуйтесь, но поковырять можно: Fisher.rar Самый толковый файл, по моему - FisherfaceCore.m из 5956440FLD-Face-Recognition.rar
  19. Собственные вектора и значения

    Ага, вот здесь: PCA Functions
  20. Собственные вектора и значения

    Как фотку разложить не знаю, а вот вектор по базису, например можно здесь посмотреть Разложение по базису Я думаю, что решение с фотками надо искать здесь (правда там надо вникать) http://www.cse.unr.edu/~bebis/MathMethods/..._study_pca1.pdf
  21. Тут материальчик от Intel: OpenCV Object Detection: Theory and Practice И это посмотрите: Виола-Джонс Faces Presentation
  22. Собственные вектора и значения

    Попалась на глаза книжечка, может чем нибудь поможет (там ограничение по количеству просмотренных страниц) Reliable face recognition methods Автор: Harry Wechsler А здесь все по шагам расписано и скачать можно EigenFaces Ну и еще статейки: Собственные лица Собственные лица 2 Faces Presentation Матлаб туториал по фейсам: Туториал Можете покопать код итальянца (C++Builder): 71477208Autofaro.zip
  23. Вот что пишет хостинг-провайдер: Некоторые Jabber клиенты требуют указать этот адрес в явном виде. Доступен Jabber сервер, принимающий соединения на любых TCP портах (например, даже стандартный порт 80 или 443). Его адрес содержит в себе имя allports . Попробуйте порт 443. Прямые адреса серверов: jabber-l4.1gb.ru jabber1-allports.1gb.ru Скорее всего, с них достучаться получится.
×