2

平方 BW (uint8)

我尝试将以下代码应用于图像八度:

sq = imread("Square BW.jpg"); 
figure(1), imshow(Square);

cont1 = edge(sq,"Sobel");
figure(2), imshow(cont1);

我得到的图像是:

边(逻辑)

如果我使用 Prewitt 函数,就会出现类似的图像。谁能向我解释发生了什么?问题是我无法仅将结果可视化过程,因此我无法理解为什么代码不起作用。

4

2 回答 2

2

问题似乎是如何在 Octave 中计算阈值。type edge您可以通过在 Octave 提示符下输入或在线查看其源代码来查看 Octave 是如何做到的(我没有复制确切的代码,因为代码是 GPL ——虽然很简单)

要获得边界,您需要自己设置阈值(希望在 Octave 图像包的未来版本中,这将得到修复,但目前它与 Matlab 不兼容,因为 Matlab 的默认文档尚不清楚)。

于 2015-03-24T22:10:37.937 回答
1

阈值的计算方式肯定存在问题,但是我无法找到要在这张图片中使用的正确值。经过多次尝试,我发现这段代码似乎可以完美运行:

sq = imread("Square BW.jpg"); 
maskSobel = fspecial("sobel");
mSobel = uint8(zeros(size(BW)));
for i = 0:3
  mSobel += imfilter(sq, rot90(maskSobel, i));
end
figure(1), imshow(mSobel);

首先,我们创建与图像 Square BW 大小相同的 Sobel 矩阵/运算符和零矩阵。然后我们将 Sobel 矩阵旋转四次(旋转 90 度),以便在所有方向(左右、上下、左右和上下)上过滤图像,总是将结果添加到 mSobel 矩阵中,即创建的。这是最终结果:

结果

于 2015-04-15T01:05:24.617 回答