连接组件在MATLAB中的递归函数

时间:2016-11-09 16:30:53

标签: matlab image-processing recursion

我是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

这可以工作几个小时,没有任何反应。我无法修复递归部分!这可能是因为我的编程水平很差。一点帮助就会很棒!

谢谢

1 个答案:

答案 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