计算图像的y导数

时间:2014-11-24 00:15:23

标签: c++ opencv derivative

我想实现图像的y导数。 鉴于以下openCV函数,谁使用Sobel运算符:

Sobel(gray_input_picture, y_derivative_picture, CV_32FC1 , 0, 1, 3, BORDER_DEFAULT);

有一个例子:

result_i_want

现在我需要自己实现它而不使用这个sobel函数。

我在这里找到了一些帮助:Gradient direction computation

我现在实施的是:

for(int x=0; x<gray_input_picture.rows; x++)
{
    for(int y=0; y<gray_input_picture.cols; y++)
    {
       if(x == gray_input_picture.rows-1 || x == 0)
       {
           y_derivative.at<Vec3b>(x,y) = gray_input_picture.at<Vec3b>(x,y);
       }
       else
       {
           Vec3b color;
           color[0] = gray_input_picture.at<Vec3b>(x+1,y)[0] - gray_input_picture.at<Vec3b>(x-1,y)[0];
           color[1] = gray_input_picture.at<Vec3b>(x+1,y)[1] - gray_input_picture.at<Vec3b>(x-1,y)[1];
           color[2] = gray_input_picture.at<Vec3b>(x+1,y)[2] - gray_input_picture.at<Vec3b>(x-1,y)[2];
           y_derivative_picture.at<Vec3b>(x,y) = color;
       }
    }
}

bitwise_not ( y_derivative_picture, y_derivative_picture2 );

x和y开关来自openCV。这就是为什么它有点不同。我不明白的是,我得到了一张我需要转换的图片(黑色到白色,白色到黑色)。

结果也有点不同。它包含蓝色区域:

enter image description here

任何人都知道如何更好地实现y导数(它看起来类似于Sobel函数)? 或者有人知道我的实施中的问题吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我想您可能需要查看Sobel运营商在这里做了什么:

http://en.wikipedia.org/wiki/Sobel_operator