我收到此错误
达到500的最大递归限制
当我尝试执行函数edge(img,'canny')
时
有趣的是,该函数是在脚本中调用的,现在直到(现在它没有)。
我尝试增加最大迭代次数(set(0,'RecursionLimit,value)
)但是如果我尝试的值太低则会出现相同的错误,如果我尝试的值太高,系统崩溃。
我该怎么办?
- 更新 -
我尝试执行edge()函数而不指定'canny'......这种方式有效,但我绝对需要canny edge方法!!
- 更新 -
它也适用于'sobel'方法。问题可能在'canny'吗?
- 更新 -
解决!这个问题是我今天早上创建的一个名为“gradient”的函数,它覆盖了Canny Edge检测器方法调用的函数“gradient”
答案 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.
的更多信息 祝你好运!生成的图像: