#include "itkTimeProbe.h" #include "itkBinaryThresholdImageFunction.h" #include "itkImageLinearIteratorWithIndex.h" #include "itkFloodFilledImageFunctionConditionalConstIterator.h" #include "itkShapedFloodFilledImageFunctionConditionalConstIterator.h" #include #include int main(int argc, char **argv) { const unsigned int ImageDimension = 2; typedef unsigned int PixelType; typedef itk::Image ImageType; typedef ImageType::RegionType RegionType; typedef ImageType::IndexType IndexType; typedef itk::BinaryThresholdImageFunction FunctionType; typedef itk::FloodFilledImageFunctionConditionalConstIterator FloodFilledIteratorType; typedef itk::ShapedFloodFilledImageFunctionConditionalConstIterator ShapedFloodFilledIteratorType; FunctionType::Pointer function = FunctionType::New(); static const unsigned int MAX_TIME_TESTS = 100; std::vector seedList; RegionType region; region.SetSize(0, 1280); region.SetSize(1, 1280); region.SetIndex(0, 0); region.SetIndex(1, 0); ImageType::Pointer inputImage = ImageType::New(); inputImage->SetRegions(region); inputImage->Allocate(); inputImage->FillBuffer(0); function->SetInputImage ( inputImage ); function->ThresholdAbove ( 1 ); // >= 1 itk::ImageLinearIteratorWithIndex it( inputImage, region ); // make sure that we create a 4-connected image! for (int dir = 0; dir <= 1; ++dir) { it.SetDirection(dir); it.GoToBegin(); while (!it.IsAtEnd()) { while (!it.IsAtEndOfLine()) { // add a seed if (seedList.empty()) seedList.push_back(it.GetIndex()); it.Set(1); ++it; } // and jump over every it.NextLine(); if (!it.IsAtEnd()) it.NextLine(); if (!it.IsAtEnd()) it.NextLine(); } } FloodFilledIteratorType floodIt(inputImage, function, seedList); ShapedFloodFilledIteratorType shapedFloodIt(inputImage, function, seedList); shapedFloodIt.SetFullyConnected(false); // 4-connected, default std::vector oldSamples; std::vector newSamples; for (unsigned int j=0; j::const_iterator nIt = newSamples.begin(); std::vector::const_iterator oIt = oldSamples.begin(); for (; nIt != newSamples.end(); ++nIt, ++oIt) { file << *oIt << "\t" << *nIt << std::endl; } file.close(); } return 0; }