1

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

我正在使用的代码是

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-filter。结果在右上角和左下角的边缘仍然很弱(不幸的是,我不允许在这里发布两个以上的链接,所以我不能给你看)。

所以我的问题是:这是一个错误,还是我使用 sobel 过滤器错误?当在二维中运行时,它不应该是旋转不变的吗?我该如何解决它,才能看到这两个边缘与其他边缘一样坚固?

4

1 回答 1

1

对不起,我已经找到了解决办法:我现在使用的代码是:

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

于 2015-08-14T12:02:30.500 回答