MATLAB Canny边缘检测:达到最大递归限制500

时间:2014-07-29 10:45:22

标签: matlab recursion numbers

我收到此错误

  

达到500的最大递归限制

当我尝试执行函数edge(img,'canny')时 有趣的是,该函数是在脚本中调用的,现在直到(现在它没有)。

我尝试增加最大迭代次数(set(0,'RecursionLimit,value))但是如果我尝试的值太低则会出现相同的错误,如果我尝试的值太高,系统崩溃。

我该怎么办?

- 更新 -

我尝试执行edge()函数而不指定'canny'......这种方式有效,但我绝对需要canny edge方法!!

- 更新 -

它也适用于'sobel'方法。问题可能在'canny'吗?

- 更新 -

解决!这个问题是我今天早上创建的一个名为“gradient”的函数,它覆盖了Canny Edge检测器方法调用的函数“gradient”

1 个答案:

答案 0 :(得分:1)

您没有正确地将图像转换为黑白图像。存储在512 x 512矩阵中的值的范围为0到255.要将其缩小为edge()函数使用的黑白刻度,只需除以255。

% Load data file
load('lenna512.mat')

% Scale to proper intensity range for the type double (0 to 1)
lenna512_bw = lenna512/255;

% Preview figure if it went alright
figure(1)
imshow(lenna512_bw);

% Detect the edges
edges_result = edge(lenna512_bw,'canny');

% Show result
figure(2)
imshow(result)

注意 double类型的强度图像的范围为0到1,而类型为uint8或uint16的强度图像的范围为0到255.所以不使用:

lenna512_bw = lenna512/255;

你也可以使用:

lenna512_bw = uint8(lenna512);

lenna512_bw = uint16(lenna512);

将矩阵转换为uint8或uint16类型,同时将这些类型的适当范围设置为矩阵中已有的0到255.

有关imagetypes here和数字类型here

的更多信息 祝你好运!

生成的图像:

Lenna 1 Lenna 2