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

magrif

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

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

  • Посещение

Репутация

0 Новичек

О magrif

  • Звание
    Новичок
  • День рождения 06.04.1993

Profile Information

  • Пол
    Мужской
  • Расположение
    СПб
  1. Оставил просто fi = 0.5 * fastAtan2(Gsy, Gsx)*CV_PI/180; затем всё полученное поле ориентации нормировал, разделив на CV_PI, чтобы значения получились в диапазоне [0; 1], ибо иначе при меньших значениях нуля будет чёрный, при больших значениях единицы соответственно белый. В приложении то, что получилось. Всё равно не то, что на рисунке слева. Ещё вопрос возник: при обработке изображений получается, что многие значения выходят за диапазон [0;1] и поэтому некорректно отображаются. Например, при применении оператора Собеля к нормированному полю направлений (тому, что в приложении) на выходе получились значения в диапазоне [-3.93 ; 3.94]. Как в таких случаях поступать?
  2. Пытаюсь рассчитать поле направлений отпечатка пальца по этой статье, часть 2.2. Делаю для блока W=1x1, т.е. для каждого пикселя. По идее должно получиться что-то похожее на то, что изображено слева. Справа то, что выходит у меня. Где я что не учёл? Спасибо. void pix_orient(Mat &image) { int width = image.cols; int height = image.rows; float Gsy = 0.0, Gsx = 0.0; Mat grad_x, grad_y; Sobel(image, grad_x, CV_32F, 1, , 3, 1, , BORDER_DEFAULT); Sobel(image, grad_y, CV_32F, , 1, 3, 1, , BORDER_DEFAULT); for(int i = ; i < height; i++) { for(int j = ; j < width; j++) { Gsx = (grad_x.at<float>(i,j)*grad_x.at<float>(i,j)) - (grad_y.at<float>(i,j)*grad_y.at<float>(i,j)); Gsy = 2*grad_x.at<float>(i,j) * grad_y.at<float>(i,j); float fi = 0.0; fi = 0.5 * fastAtan2(Gsy, Gsx)*CV_PI/180; //[0;pi] //[-0.5*pi ; 0.5*pi] if(fi<=0) fi = fi + CV_PI/2; else fi = fi - CV_PI/2; image.at<float>(i,j) = fi; } }//for }
×