-
Количество публикаций
3 873 -
Зарегистрирован
-
Посещение
-
Days Won
346
Все публикации пользователя Smorodov
-
Калибровка нужна, в основном, если необходимо что нибудь мерить, также однозначно она требуется в стерео зрении, т.к. там очень важно получить точные, согласованные координаты объектов (с обеих камер), для вычисления их пространственных координат. Если глянете на формулы, используемые в стерео-зрении то сразу заметите, насколько результат зависит от точности исходных данных. Калибровка исправляет сложные искажения, которые определяются неидеальностью формы линзы, ошибками её механической фиксации, ошибки изготовления сенсора. Когда все это складывается получается достаточно сложная форма искажений, как в кривом зеркале, которую зная лишь 4 точки исправить не удастся. Т.к. одна кривизна посередине, а по краям уже совсем другая. Вот тут пояснения (лекции МГУ): Модель и калибровка камеры
-
Описание алгоритма группировки отрезков, найденных алгоритмом поиска прямых. При его помощи можно попытаться собрать контур из полученных отрезков. Задача_группировки_отрезков.pdf
-
Документ с русским описанием алгоритма: Детектирование_углов.pdf
-
Кроссплатформенное программирование с OpenCV...
Smorodov replied to ProgerX's topic in Обсуждение общих вопросов
Большой разницы нет, OpenCV одинаково работает и на винде и на линуксах, просто примеры приведены для билдера, т.к. у меня сейчас билдер, а код то один и тот же что для линукса, что для винды. Может с выводом в форму поколдовать придется, но такой вывод далеко не всем нужен. Для линукса есть преимущество по моему IPP для него распространяются бесплатно. Да и на микроконтроллерах лучше линукс (хотя тоже не всегда). Так что можно основная часть кода легко портируема, нужно будет подправить каие-нибудь системозависимые детали. ЗЫ: cfr, насколько я знаю работает под линуксом, и очень доволен. Можете с ним связаться. -
Находим в кадре лица, человеческие фигуры, и т.д. и т.п
Smorodov replied to Smorodov's topic in Обсуждение общих вопросов
Для OpenCV я сделал перевод их руководства, он лежит здесь: Обучение классификаторов Хаара Насчет рук и ног, в примере FaceDetect, в директории с классификаторами лежат каскады для нижней части тела haarcascade_lowerbody и для верхней части тела haarcascade_upperbody, а также для человека в полный рост haarcascade_fullbody. -
Описание работы алгоритма детектора прямых (на русском языке): Детектор_прямых.pdf
-
Ссылка на апплет, можно прощупать что это такое. И здесь немного информации: Жадные змеи и активные контуры
-
Русское описание змеиного алгоритма: GreedySnake.pdf
-
Реализация змей на OpenCV Архив с проектом: snake.rar
-
Корректно выводит изображения ширины не кратной 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]
-
Объектно-ориентированная система планирования перемещений.
Smorodov добавил тему в Вопросы по нейросетям и ИИ
Идея, положенная в основу проекта: Wiki Сама библиотека здесь: http://www.kavrakilab.org/OOPSMP/index.html -
Загружаемое из файла изображение 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]
-
Удачи
-
Здесь пример на OpenCV (практически Ваша задача ): OpenCV OCR Документ с задачей аналогичной Вашей здесь (нейросети): Распознавание образов (букв) Посмотрите вот это еще: Метод распознавания лиц, думаю что для данной задачи его можно приспособить. Не знаю насколько он применяется для этого, но думаю что должен работать.
-
Для начала гляньте топик "Картинка в картинке". И вопрос, а для чего попиксельный доступ? В другом топике есть такое (не проверял): "Удобно использовать макросы: CV_IMAGE_ELEM(img, uchar, i, j) " И пара моих заметок: Лучше координаты точек перед вычислением диагоналей присвоить переменным типа double, а не приводить типы, во всяком случае, не так как у Вас (может быть переполнение). Для определения диагонали sqrt можно не брать.
-
Насколько я понимаю, не нужно ничего усекать. Эта матрица ковариации имеет те-же собственные векторы, что и правильная матрица ковариации (большая). Однако, у маленькой матрицы их 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
-
А откуда такая матрица? Там ведь при вычислении матрицы ковариации используется переставленное транспонирование, то есть размер матрицы не должен превышать количества фотографий, насколько я понял. Смотри опция OpenCV: CV_COVAR_SCRAMBLED - Fast PCA “scrambled” covariance.
-
Там несколько проектов часть на с++, а часть на матлаб
-
Вот китайцы понаписали, не сильно радуйтесь, но поковырять можно: Fisher.rar Самый толковый файл, по моему - FisherfaceCore.m из 5956440FLD-Face-Recognition.rar
-
Ага, вот здесь: PCA Functions
-
Как фотку разложить не знаю, а вот вектор по базису, например можно здесь посмотреть Разложение по базису Я думаю, что решение с фотками надо искать здесь (правда там надо вникать) http://www.cse.unr.edu/~bebis/MathMethods/..._study_pca1.pdf
-
Находим в кадре лица, человеческие фигуры, и т.д. и т.п
Smorodov replied to Smorodov's topic in Обсуждение общих вопросов
Тут материальчик от Intel: OpenCV Object Detection: Theory and Practice И это посмотрите: Виола-Джонс Faces Presentation -
Попалась на глаза книжечка, может чем нибудь поможет (там ограничение по количеству просмотренных страниц) Reliable face recognition methods Автор: Harry Wechsler А здесь все по шагам расписано и скачать можно EigenFaces Ну и еще статейки: Собственные лица Собственные лица 2 Faces Presentation Матлаб туториал по фейсам: Туториал Можете покопать код итальянца (C++Builder): 71477208Autofaro.zip
-
Вот что пишет хостинг-провайдер: Некоторые Jabber клиенты требуют указать этот адрес в явном виде. Доступен Jabber сервер, принимающий соединения на любых TCP портах (например, даже стандартный порт 80 или 443). Его адрес содержит в себе имя allports . Попробуйте порт 443. Прямые адреса серверов: jabber-l4.1gb.ru jabber1-allports.1gb.ru Скорее всего, с них достучаться получится.