我正在使用Sobel运算符通过EmguCV 3.0(用于OpenCV的.NET包装器)检测灰度图像中的边缘。

我正在使用的代码是

Image<Gray, byte> gray = new Image<Gray, byte>(@"C:\gray.bmp");
Image<Gray, float> sobel = gray.Sobel(0, 1, 3).Add(gray.Sobel(1, 0, 3)).AbsDiff(new Gray(0.0));

这是经过预处理的图像(灰色)

这就是我出去的(苏贝尔)

如您所见,右上角和左下角的边缘非常弱。我首先想到的是,它可能与原始图像有关,所以我将其旋转了180度,然后再次运行了sobel滤镜。结果在右上角和左下角仍然具有非常弱的边缘(遗憾的是,我在这里不能发布两个以上的链接,因此无法向您显示)。

所以我的问题是:这是一个错误,还是我使用sobel筛选器错误?二维运行时,它不应该是旋转不变的吗?以及如何解决这两个边缘与其他边缘一样强的问题?

最佳答案

抱歉,我已经找到了解决方法:
我现在使用的代码是:

Image<Gray, float> sobel =
    gray.Sobel(1, 0, 3).AbsDiff(new Gray(0.0))
        .Add(gray.Sobel(0, 1, 3).AbsDiff(new Gray(0.0)));

| Gxy |近似于范数= | Gx | + | Gy |,结果是一个具有良好干净边缘的良好图像:http://i.stack.imgur.com/COJSG.png

关于c# - OpenCV:Sobel滤波器不旋转不变,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32008894/

10-11 01:28