使用matlab进行洪水填充

Mua*_*ani 4 matlab flood-fill

我是MATLAB的新手,我试图在matlab中使用这个算法实现洪水填充,我不知道我做错了可能是我没有使用递归函数,但我仍然没有出错,这段代码让我的matlab关闭我我正在使用以下代码,我试图从早上开始调试,但未能找到问题

function [ colored_Image ] = floodFill( image, target_Loc_x, target_Loc_y, targetColor, replacementColor )
colored_Image = image;

if (target_Loc_x >= 1) && (target_Loc_x <= size(image,1)) && (target_Loc_y >= 1) && (target_Loc_y <= size(image,2))
    if image(target_Loc_x,target_Loc_y) == targetColor
        colored_Image(target_Loc_x,target_Loc_y) = replacementColor;
        colored_Image = floodFill(colored_Image,target_Loc_x ,target_Loc_y + 1, targetColor, replacementColor); 
        colored_Image = floodFill(colored_Image,target_Loc_x + 1,target_Loc_y, targetColor, replacementColor);
        colored_Image = floodFill(colored_Image,target_Loc_x,target_Loc_y - 1, targetColor, replacementColor);
        colored_Image = floodFill(colored_Image,target_Loc_x - 1,target_Loc_y, targetColor, replacementColor);
    end

end


end
Run Code Online (Sandbox Code Playgroud)

使用调用此函数

image = floodFill(im,1,1,0,127);
imshow(image);
Run Code Online (Sandbox Code Playgroud)

即时通讯是我的200×200的矩阵图像我希望我的黑色(0)为灰色(127),任何帮助都会感激不尽

sho*_*zer 5

您可能正在达到Matlab的递​​归限制.我的计算机没有崩溃,但会生成此错误:

达到最大递归限制500.使用set(0,'RecursionLimit',N)更改限制.请注意,超出可用堆栈空间可能会导致MATLAB和/或计算机崩溃.

解决这个问题的方法是重写floodFill,这样它就不会使用递归.维基百科上有一些替代算法.

另外:aardvarkk的答案对Matlab的列主要索引提出了重要观点.您可以通过交换所有x和y变量来修复您的函数.