Flood filling algorithm stop condition

8 次查看(过去 30 天)
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. IMG_3893.PNGHere 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.
%%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)

采纳的回答

Navya Seelam
Navya Seelam 2019-8-7
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 个)

类别

Help CenterFile Exchange 中查找有关 Image Processing Toolbox 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by