This is a bit more complicated than the original question :-)
Several of the ITK filters actually perform multiple passes of
Floodfill. That is no problem. You simply run multiple loops
of the Floodfill iterator inside the GenerateData() method of
your new filter.
See for example:
Both of them perform multiple floodfill passes.
In your case, however, you may need different criteria for
including pixels on each pass. That is, for the first pass
you use one criterion, while for the second pass you use
That being said....
The description of your algorithm has some resemblance to
watershed, and I'm wondering if you may benefit from reading
the following papers from the Insight Journal:
"The watershed transform in ITK - discussion and new developments"
"Finding regional extrema - methods and performance"
In order to get familiar with the use of floodfiling
I would advice you to look first at the code of the filter
This is the simplest instance of a filter using flood filling.
Once you feel confident with this filter, move on and read the
code of the itkConficenceConnectedImageFilter.
Of course, once you get your filter done, we will strongly
encourage you to share it with the ITK community by posting
it to the Insight Journal.
Please let us know if you have any other questions,
Post by Oliver Trebbe
that sounds good, but how may i first floodfill my volume till i find
one pixel(which discribes a region starting point) which is what i want
to find, go to the max intensity( this is already prototyped ) in that
region, and from there do a floodfill which checks intensities within a
neighborhood and 'disables' this 'region' for another floodfill...
go further with the max intensity check till the terminating condition
is hit... after that, disable the region where the max intensity checks
were driven and go on finding the next region....
what about this function?
how to write my own?
cant i just use the floodfilling without specifiing a function...
(maybe i just need to learn more about this templated generic
is there anything in itk which does such things, or, do i need to try to
write an own filter...
are there other mathematical operations or so to do that?
maybe i´m too new to pattern recognition or how to call this discipline ;)
Post by Luis Ibanez
You probably should use the FloodFilledImageFunctionConditionalIterator.
Please read the code of the itkConnectedThresholdImageFilter.txx file
in the directory Insight/Code/BasicFilters.
InputImageType, double> FunctionType;
OutputImageType, FunctionType> IteratorType;
typename FunctionType::Pointer function = FunctionType::New();
function->SetInputImage ( inputImage );
function->ThresholdBetween ( m_Lower, m_Upper );
ProgressReporter progress(this, 0, region.GetNumberOfPixels());
IteratorType it ( outputImage, function, m_SeedList );
progress.CompletedPixel(); // potential exception thrown here
You can implement your variation of flood-filling by defining a new
ImageFunction to replace the BinaryThresholdImageFunction. Your new
image function will define the criteria that allows to accept a new
pixel into the region.
Post by Oliver Trebbe
i have a problem, i want to segment 3d images in a special way, using
floodfilling with integrated neighborhood checking, but i don´t get
an idea using the iterator´s for this problem, maybe someone can help
me getting my mind ready or can give me some tips or ideas using the
the problem is i want to use the x y z dimensions but cant read them
and just iterating through the voxels isnt the right way...
can i use pointers to the previous iterator? or next (or so)
how to define or use them?
would be thankfull if someone can help me
Insight-users mailing list