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

d1g1t

Пользователи
  • Количество публикаций

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

  • Посещение

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

  1. Распознавание глаза

    Всем привет. Задача на проверку подлинности. - Создать biometric model глаза (левого, правого). - Сделать iris detection - Проверить на валидность с образцом. (Iris Recognition) Подскажите пожалуйста как ето сделать. Какие финкции использовать, и т.д. Спасибо.
  2. cvLoadImage возращает NULL

    Привет. Попробуйте проверить существование файла (exists) за вказанным Вами путём.
  3. Привет. Какой быстрый способ создать среднее изображение на основе обучающей выборки. Например из 25 изобрежений. Сейчас делаю так: // Avarage Image IplImage* averageImage = cvCreateImage(cvGetSize(faceSet->faceImages[i].faces[0]), IPL_DEPTH_64F, 1); cvZero(averageImage); for(int index = 0; index < faceCount; index++) { IplImage* face = faceSet->faceImages[i].faces[index]; IplImage* averageImageFace = cvCreateImage(cvGetSize(face), 8, 1); IplImage* averageImageFace64 = cvCreateImage(cvGetSize(face), IPL_DEPTH_64F, 1); cvCvtColor(face, averageImageFace, CV_BGR2GRAY); cvScale(averageImageFace, averageImageFace64, 1.0, 0.0); cvAdd(averageImage, averageImageFace64, averageImage); cvReleaseImage(&averageImageFace); cvReleaseImage(&averageImageFace64); } Спасибо
  4. Привет Нужно проверить принадлежат ли значения шума, размытости, контраста к допустимым. Как лучше это сделать? Спасибо.
  5. Распознавание лиц

    Спасибо за идею! Покопаюсь...
  6. Распознавание лиц

    Производительность взросла раза в 2а. Время 0.17 - 0.2с. Спасибо.
  7. Распознавание лиц

    Платформа мобильная - каждая секунда дорога. Время исполнения cvHaarDetectObjects приблизительно : 0.3 - 0.4с. CvSeq* faces = cvHaarDetectObjects(small_img, cascade_, storage_, 1.6, 2, CV_HAAR_DO_CANNY_PRUNING, cvSize( small_img->width/4, small_img->height/4 )); Рассматриваю любые варианты для повышения производительности.
  8. Распознавание лиц

    Есть ли способ распознать лицо (recognition) не используя каскады? Если да, быстрее ли он. Спасибо
  9. cvThreshold и img->imageData

    Всем привет После применения cvThreshold и очистки, вот такой результат (сохранил в формате bmp): cvThreshold(limbusImg, threshold_image, 130, 200, CV_THRESH_BINARY); Проблема состоит в том, что в img->imageData есть данные которые не соответствуют данным на рисунке. for(int j=0; j<height; j++) { for(int i=0; i<width; i++) { int pixel_value = image[(int)(j)*width+(int)(i)]; log("pixel(%d,%d):%d", i, j, pixel_value); } // Белые писксели pixel(114,62):200 pixel(115,62):200 pixel(116,62):200 pixel(117,62):200 pixel(118,62):200 pixel(119,62):200 pixel(120,62):200 pixel(121,62):200 pixel(122,62):255 pixel(123,62):255 pixel(124,62):200 На рисунке (красний маркер) таких пикселей нету. Подскажите где собака зарыта. Спасибо.
  10. cvThreshold и img->imageData

    Переделал: pixel_value1 = ((uchar*)(image->imageData + image->widthStep*y))[x]; Теперь все отлично работает. Огромное спасибо. Странно конечно. Изображение 8-битное. 1 пиксель - 1 байт. В 2й раз учту етот фактор...
  11. cvThreshold и img->imageData

    threshold_image.bmp
  12. Распознавание глаза

    Всем привет. Подскажите лучший способ по удалению (интерполяция или заполнения области в черный цвет) роговичного блика. Спасибо.
  13. Распознавание глаза

    Спасибо.
  14. Распознавание глаза

    можете предоставить каскад для 1го глаза размером ~150x150
  15. Не правильно выразился. После поворота, картинка должна занимать весь размер с позиции (0,0). Но почему-то она смещена вправо и вверх (Output изображение ) Целевое изображение - я пытаюсь достичь.
  16. Всем привет. Пытаюсь повернуть изображение на -90. Но в результате картинку обрезает. Подскажите где косяк. Спасибо. IplImage* dstImg = cvCreateImage( cvSize(m_sourceImage->height, m_sourceImage->width), IPL_DEPTH_8U, 3); float centreX = m_sourceImage->width/2; float centreY = m_sourceImage->height/2; rotate(angle, centreX, centreY, m_sourceImage, dstImg ); cvReleaseImage(&m_sourceImage); m_sourceImage = dstImg; Функия rotate: void rotate(double angle, float centreX, float centreY, IplImage* src, IplImage* dst) { CvPoint2D32f centre; centre.x = centreX; centre.y = centreY; CvMat* translate = cvCreateMat(2, 3, CV_32FC1); cv2DRotationMatrix(centre, angle, 1.0, translate); cvWarpAffine(src, dst, translate, CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS, cvScalarAll(0)); cvReleaseMat(&translate); } Input изображение: Output изображение: Целевое изображение:
  17. Всем привет. Часто замечал вот такой код: IplImage* img = cvCreateImage(cvSize(WIDTH_PREF, HEIGHT_PREF), 8, 3); cvZero(img); Использование cvZero в даном случае излишество, не так ли?
  18. Всем привет. Как с помощью OpenCV изуродовать изображения лица, что б получился смешной результат ))) Буду благодарен за либой пример.
  19. Всем привет. Потестил вариант с PCA PCA Sample int trainer::findNearestNeighbor(float * projectedTestFace) { double leastDistSq = DBL_MAX; int i, iTrain, iNearest = -1; for(iTrain=0; iTrain<trainFaces_; iTrain++) { double distSq=0; for(i=0; i<eigens_; i++) { float d_i = projectedTestFace - projectedTrainFaceMat_->data.fl[iTrain*eigens_ + i]; distSq += d_i*d_i; } if(distSq < leastDistSq) { leastDistSq = distSq; iNearest = iTrain; } } return iNearest; } Для лица, которое есть в базе leastDistSq составляет < 7 000 000 Для лица, которого нет в базе leastDistSq составляет > 60 000 000. Разница очевидна. Но какой взять именно минимальный критерий O? Спасибо.
  20. Спасибо за ответ. Скажите еще пожалуйста, создание модели и распознавание лиц используя Local binary patterns эффективнее за PCA?
  21. Распознавание глаза

    Мне по gray тоже больше подходит. Еще вопросик: high порог для cvCanny - ето внешний порог для контура. Тоесть, для примера, если у нас монета на белом фоне, то high порог будет разница пикселей для белого тла и значения пикселей на грани монеты? Правильно ли я понял. А вот low порог - ето где?
  22. Распознавание глаза

    Подскажыте что делаю нетак... Вот такой результат: Код: IplImage* in = cvLoadImage(fileName, 1); IplImage* r = cvCreateImage(cvGetSize(in), in->depth, 1); // R channel IplImage* g = cvCreateImage(cvGetSize(in), in->depth, 1); // G channel IplImage* b = cvCreateImage(cvGetSize(in), in->depth, 1); // B channel // reset cvZero(r); cvZero(g); cvZero(; cvSplit(in, r, g, b, NULL); double m, M; int W = in->width; int H = in->height; ellipse_image_=cvCreateImageHeader(cvSize(FRAMEW,FRAMEH), 8, 3 ); ellipse_image_->imageData=(char *)malloc(FRAMEW*FRAMEH*3); IplImage* dst; IplImage* sum_r = cvCreateImage(cvSize(W, H), 8, 1); IplImage* sum_g = cvCreateImage(cvSize(W, H), 8, 1); IplImage* sum_b = cvCreateImage(cvSize(W, H), 8, 1); IplImage* f_image_dx; IplImage* f_image_dy; f_image_dx = cvCreateImage(cvSize(W, H), 8, 1); // Sobel X of f_image_dx f_image_dy = cvCreateImage(cvSize(W, H), 8, 1); // Sobel Y of f_image_dy dst = cvCreateImage(cvSize(W, H), 8, 1); // R channel cvZero(f_image_dx); cvZero(f_image_dy); cvSobel(r, f_image_dx, 0, 1, 7); cvSobel(r, f_image_dy, 1, 0, 7); cvAbsDiffS(f_image_dx, f_image_dx, cvScalar(0, 0, 0, 0)); cvAbsDiffS(f_image_dy, f_image_dy, cvScalar(0, 0, 0, 0)); cvAdd(f_image_dx, f_image_dy, sum_r); // G channel cvZero(f_image_dx); cvZero(f_image_dy); cvSobel(g, f_image_dx, 0, 1, 7); cvSobel(g, f_image_dy, 1, 0, 7); cvAbsDiffS(f_image_dx, f_image_dx, cvScalar(0, 0, 0, 0)); cvAbsDiffS(f_image_dy, f_image_dy, cvScalar(0, 0, 0, 0)); cvAdd(f_image_dx, f_image_dy, sum_g); // B channel cvZero(f_image_dx); cvZero(f_image_dy); cvSobel(b, f_image_dx, 0, 1, 7); cvSobel(b, f_image_dy, 1, 0, 7); cvAbsDiffS(f_image_dx, f_image_dx, cvScalar(0, 0, 0, 0)); cvAbsDiffS(f_image_dy, f_image_dy, cvScalar(0, 0, 0, 0)); cvAdd(f_image_dx, f_image_dy, sum_; cvAdd(sum_r, sum_g, sum_r); cvAdd(sum_r, sum_b, sum_r); cvMinMaxLoc(sum_r, &m, &M, NULL, NULL); if((M - m) > 0) { cvScale(sum_r, dst, 255 / (M - m), -m * (255 / (M - m))); } cvReleaseImage(&f_image_dx); cvReleaseImage(&f_image_dy); cvReleaseImage(&r); cvReleaseImage(&g); cvReleaseImage(&; cvReleaseImage(&sum_r); cvReleaseImage(&sum_g); cvReleaseImage(&sum_; CvMemStorage* storage = cvCreateMemStorage(0); CvSeq* circles = cvHoughCircles( dst, storage, CV_HOUGH_GRADIENT, 1, dst->height, 50, 1, 10, 150 ); for( int i = 0; i < circles->total; i++ ) { float* p = (float*)cvGetSeqElem( circles, i); LOGI("cx:%f", p[0]); cvCircle( ellipse_image_, cvPoint(cvRound(p[0]),cvRound(p[1])), 2, CV_RGB(0,255,0), -1, 2, 0 ); cvCircle( ellipse_image_, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(255,0,0), 1, 2, 0 ); }[/code] Скажите на что accumulator threshold влияет в функции cvHoughCircles ?
  23. Распознавание глаза

    Я немного не понял, что именно лутше для глаза не делать?
  24. Распознавание глаза

    Поскажите почему на cvErode падает если изображение 32-битное ? IplImage* in = cvLoadImage(fileName, 1); IplImage* gray = cvCreateImage(cvSize(in->width, in->height), IPL_DEPTH_32F, 1); cvCvtColor(in, gray, CV_BGR2GRAY); double m, M; /* Место для значений максимума и минимума*/ IplImage *f_image_dx; /* производная по X */ IplImage *f_image_dy; /* производная по Y */ int W = in->width; /* Ширина входного изображения */ int H = in->height; /* Высота входного изображения */ f_image_dx = cvCreateImage(cvSize(W, H), IPL_DEPTH_32F, 1); /* Собель по X f_image_dx [ */ f_image_dy = cvCreateImage(cvSize(W, H), IPL_DEPTH_32F, 1); /* Собель по Y f_image_dy [ */ IplImage* dst = cvCreateImage(cvSize(W, H), IPL_DEPTH_32F, 1); /* Убираем часть помех */ LOGI_TRA("trying to erode"); cvErode(gray, dst, 0, 3); Результат Собеля для gray:
  25. Распознавание глаза

    Огромное спасибо. Подскажите еще как с scr взять каждый канал.
×