我试图计算图像的弯曲度。等式是:
Lx和Ly是图像的渐变(Lxx是Lx的x分量梯度,等等here是纸张的链接)。预期的输出应该如下所示:
但我所有的代码都是带有几个黑点的白色图像。这是代码:
Mat img, curvedness;
Mat LX, LY, LXX, LXY, LYX, LYY;
sobelFilter(img, LX, LY);
sobelFilter(LX, LXX, LXY);
sobelFilter(LY, LYX, LYY);
// calculate curvedness
multiply(LXX,LXX,LXX); // LXX^2
multiply(LXY,LXY,LXY); // LXY^2
multiply(2,LXY,LXY); // 2*LXY^2
multiply(LYY,LYY,LYY); // LYY^2
add(LXX,LXY,img);
add(LYY,img,img);
pow(img,0.5,curvedness);
imshow( window_name, curvedness);
sobelFilter()代码如下:
void sobelFilter(Mat img, Mat &grad_x, Mat &grad_y)
{
// Sobel parameters
int scale = 1;
int delta = 0;
int ddepth = CV_64F;
Mat abs_grad_x, abs_grad_y;
Sobel( img, grad_x, ddepth, 1, 0, 3, scale, delta, BORDER_DEFAULT );
convertScaleAbs( grad_x, abs_grad_x );
Sobel( img, grad_y, ddepth, 0, 1, 3, scale, delta, BORDER_DEFAULT );
convertScaleAbs( grad_y, abs_grad_y );
}
任何想法我做错了什么?
答案 0 :(得分:1)
确保输入图像的类型为float而不是int。请参阅此答案,了解如何将int Mat转换为浮点数。 Convert uchar Mat to float Mat in OpenCV?