弯曲度输出

时间:2014-04-30 06:38:29

标签: opencv computer-vision

我试图计算图像的弯曲度。等式是:

enter image description here

Lx和Ly是图像的渐变(Lxx是Lx的x分量梯度,等等here是纸张的链接)。预期的输出应该如下所示:

enter image description 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 );
}

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:1)

确保输入图像的类型为float而不是int。请参阅此答案,了解如何将int Mat转换为浮点数。 Convert uchar Mat to float Mat in OpenCV?