我是MATLAB的新手,我正在尝试实现连接组件算法。这是代码:
% Binary image (BI)
% Labelled image (LI)
LI = zeros(r,c);
n = 1;
for i = 2:r-1
for j = 2:c-1
if BI(i,j) && LI(i,j) == 0
label(i, j, n, BI, LI)
n = n + 1;
end
end
end
和我的标签功能:
function label(x, y, n, BI, LI)
LI(x,y) = n;
for i = x-1:x+1
for j = y-1:y+1
try
if BI(i,j) && LI(i,j) == 0
label(i, j, n, BI, LI)
end
catch
continue
end
end
end
end
这可以工作几个小时,没有任何反应。我无法修复递归部分!这可能是因为我的编程水平很差。一点帮助就会很棒!
谢谢
答案 0 :(得分:3)
你的问题是MATLAB没有通过引用传递函数参数。在LI
函数中修改label
时,它不会更改您创建的全局LI
作为标签图片。
要更新标签图片,您必须从函数中获取返回值:
function LI = label(x, y, n, BI, LI)
LI(x,y) = n;
for i = x-1:x+1
for j = y-1:y+1
try
if BI(i,j) && (LI(i,j) == 0)
LI = label(i, j, n, BI, LI); % update LI
end
catch
continue
end
end
end
end
现在label
返回更新的标签图片,每次调用LI
时都需要设置label
,如上面的注释行和调用脚本中所示:
% Binary image (BI)
% Labelled image (LI)
LI = zeros(r,c);
n = 1;
for i = 2:r-1
for j = 2:c-1
if BI(i,j) && (LI(i,j) == 0)
LI = label(i, j, n, BI, LI); % update LI
n = n + 1;
end
end
end