Пытаюсь рассчитать поле направлений отпечатка пальца по этой статье, часть 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
}