Flood filling algorithm stop condition
4 views (last 30 days)
Show older comments
I've written an algorithm to compute a flood fill operation that finds all pixels which match the brightness of a seed pixel within a given tolerance. The goal of the algorithm is to follow this flow chart, and stop when the 'foreground queue' is empty.
Here is the code I have written so far, it can succesfully find the adaptive neighborhood, but I'm having trouble finding a way to make it stop once every possible pixel has been checked.
![IMG_3893.PNG](https://www.mathworks.com/matlabcentral/answers/uploaded_files/232557/IMG_3893.png)
%%LANHE
clear
clc
tol=10;
img=double(imread('cameraman.tif'));
%img=imresize(img,.25);
seed=32640;
%seed=2016;
img=padarray(img,[1 1],1);
[m,n]=size(img);
M=size(img,1);
neighbor_offsets =[M, M+1, 1, -M+1, -M, -M-1, -1, M-1];
foreground_queue=seed;
background_queue=0;
iterations=0;
while iterations<155 %~isempty(foreground_queue)
for i=1:length(foreground_queue)
test_pixel=foreground_queue(i); %top pixel off queue
diff=abs(img(seed)-img(test_pixel));
if diff<=tol %if foreground
foreground_queue_test{i} = bsxfun(@plus, test_pixel, neighbor_offsets);
foreground_pass{i}=test_pixel;
end
if diff>tol %if background
background_queue=[background_queue test_pixel];
end
end
foreground_passmat=horzcat(foreground_pass{:});
foreground_passmat(foreground_passmat==seed)=[];
foreground_queue=unique(horzcat(foreground_queue_test{:}));
%foreground_queue=setdiff(foreground_queue,foreground_passmat);
iterations=iterations+1;
l(iterations)=length(foreground_queue);
end
length(foreground_passmat)
background_queue(background_queue==0)=[];
figure()
hold on
[j,i]=ind2sub([m,n],foreground_passmat);
[j1,i1]=ind2sub([m,n],background_queue);
plot(i,-j,'*')
plot(i1,-j1,'*')
figure(2)
plot(l)
0 Comments
Accepted Answer
Navya Seelam
on 7 Aug 2019
Hi,
You can count the total number of pixels checked by the sum of lengths of foreground_queue and background_queue. Once the sum is greater than the total number of pixels use “break” statement to break the loop.
0 Comments
More Answers (0)
See Also
Categories
Find more on Image Processing Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!