我想实现图像的y导数。
以下是使用Sobel运算符的openCV函数:Sobel(gray_input_picture, y_derivative_picture, CV_32FC1 , 0, 1, 3, BORDER_DEFAULT);
有一个示例,其外观如下:
现在,我需要自己实现而不使用此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。这就是为什么它有点不同的原因。我不明白的是,我得到一张需要转换的图片(黑到白,白到黑)。
结果也有些不同。它包含蓝色区域:
有谁知道我可以如何更好地实现y派生(它看起来与Sobel函数相似)?
还是有人知道我的实现中的问题?
谢谢!
最佳答案
我认为您可能需要在这里查看Sobel运算符的功能:
http://en.wikipedia.org/wiki/Sobel_operator
关于c++ - 计算图像的y导数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27096085/