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

MATLAB Canny边缘检测:达到最大递归限制500,matlab,recursion,numbers,Matlab,Recursion,Numbers,我犯了这个错误 已达到最大递归限制500 当我尝试执行函数edge(img,'canny') 有趣的是,这个函数是在一个脚本中调用的,这个脚本一直工作到现在(现在没有) 我试图增加最大迭代次数(set(0,'RecursionLimit,value)),但如果我尝试的值太低,则会出现相同的错误,如果尝试的值太高,则系统会崩溃 我能做什么 --更新-- 我试图在没有指定“canny”的情况下执行edge()函数。。。这样做是可行的,但我绝对需要精明的边缘方法 --更新-- 它也适用于“sobel”

我犯了这个错误

已达到最大递归限制500

当我尝试执行函数
edge(img,'canny')

有趣的是,这个函数是在一个脚本中调用的,这个脚本一直工作到现在(现在没有)

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

我能做什么

--更新--

我试图在没有指定“canny”的情况下执行edge()函数。。。这样做是可行的,但我绝对需要精明的边缘方法

--更新--

它也适用于“sobel”方法。问题可能出在“精明”上吗

--更新--


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

您没有正确地将图像转换为黑白。存储在512 x 512矩阵中的值的比例为0到255。要将其缩小到函数使用的黑白比例,只需除以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);

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

更多关于图像类型和数字类型的信息

祝你好运

生成的图像:


您使用什么图像?这听起来像是算法没有收敛,即达到其最大迭代次数。这可能意味着你的形象不合适。请附上您的图像。我正在使用此功能,但我已经在同一图像的脚本中多次使用此功能。。直到今天早上我才发现这个错误,我不知道为什么:在另一台电脑上它能工作!这是一个
n00b
问题,但是您是否尝试重新启动MATLAB?对不起,我尝试了,但是没有成功,并且出现了相同的错误!问题不在图像或其格式中(正如我之前所说,它一直工作到今天早上,现在不工作,令人费解)。问题可能在代码的其余部分。MatLab的递归限制可能不是每个函数定义的,而是在全局级别上定义的。您可以尝试将包含edge()函数的代码部分放在另一个文件中。然而,如果没有看到你的代码的其余部分,我无法判断。
lenna512_bw = uint16(lenna512);