[Insight-users] Trying to monitor progression of fast march operation

Rick Giuly rgiuly at gmail.com
Fri Apr 24 06:57:27 EDT 2009


Hi Dan,

This fixed it: Set TargetOffset to zero

Thanks very much!

-Rick

Dan Mueller wrote:
> Hi Rick,
> 
> This filter works for me without issue (see code below and attached
> screenshots).
> 
> Perhaps you can try the following:
> 
> 1. Do not set the fast marching output size, as you set the input
> 2. Set TargetOffset to zero
> 3. Verify the input to the filter is in the range [0,1]
> 4. Verify the filter runs as expected when no stop points are set
> 
> If all these fail, then perhaps it is an issue with the wrappers?
> (though be sure this is your last thought, not the first).
> 
> Hope this helps.
> 
> Regards, Dan
> 
> #include "itkImage.h"
> #include "itkImageFileWriter.h"
> #include "itkFastMarchingUpwindGradientImageFilter.h"
> 
> int main( int argc, char *argv[] )
> {
>   const unsigned int Dimension = 2;
>   typedef float PixelType;
>   typedef itk::Image< PixelType, Dimension > ImageType;
>   typedef itk::ImageFileWriter< ImageType > WriterType;
>   typedef itk::FastMarchingUpwindGradientImageFilter< ImageType >
> FastMarchingType;
>   typedef FastMarchingType::NodeContainer NodeContainer;
>   typedef FastMarchingType::NodeType NodeType;
> 
>   // Create speed image
>   ImageType::SizeType size;
>   size.Fill( 100 );
>   ImageType::RegionType region( size );
>   ImageType::Pointer image = ImageType::New();
>   image->SetRegions( region );
>   image->Allocate();
>   image->FillBuffer( 1.0 );
> 
>   // Set trial point
>   ImageType::IndexType trial1;
>   trial1.Fill( 50 );
>   NodeType node1;
>   node1.SetValue( 0.0 );
>   node1.SetIndex( trial1 );
>   NodeContainer::Pointer trial = NodeContainer::New();
>   trial->Initialize();
>   trial->InsertElement( 0, node1 );
> 
>   // Set stopping point
>   ImageType::IndexType stop1;
>   stop1.Fill( 40 );
>   NodeType node2;
>   node2.SetValue( 0.0 );
>   node2.SetIndex( stop1 );
>   NodeContainer::Pointer stop = NodeContainer::New();
>   stop->Initialize();
>   stop->InsertElement( 0, node2 );
> 
>   // Create fast marching filter
>   FastMarchingType::Pointer filter = FastMarchingType::New();
>   filter->SetInput( image );
>   filter->SetTrialPoints( trial );
>   filter->SetTargetReachedModeToOneTarget();
>   filter->SetTargetOffset( 0 ); // Stop immediately
>   filter->SetTargetPoints( stop );
>   filter->Update();
> 
>   // Write output
>   WriterType::Pointer writer = WriterType::New();
>   writer->SetFileName( "D:/Temp/FastMarchingStopTest.mha" );
>   writer->SetInput( filter->GetOutput() );
>   writer->Update();
> 
>   return EXIT_SUCCESS;
> }
> 
> 2009/4/22 Rick Giuly <rgiuly at gmail.com>:
>> Hello All,
>>
>> The FastMarchingUpwindGradientImageFilter stopping points don't seem to be
>> working for me.
>>
>> Just to check with you guys that I'm interpreting the output right, here's
>> how I'm looking at it:
>> I'm looking at the 3D volume that the filter produces assuming that it is
>> initialized to a very large value (1.70141e+38) and then where the march has
>> happened the values are more on the order of 0.5 or so.
>>
>> I've tried setting the stopping point to points very close to the seed-point
>> (1 pixel away or so) and the march seems to be going far beyond, like 100's
>> of pixels beyond. I also tried setting the stopping point to the seed point
>> and that gives a result that looks the same (seems like that should cause it
>> to terminate almost immediately).
>>
>> So, I'm not sure what's going on.
>>
>> Here are the parts of my code that deal with the filter. I'm also attaching
>> the file with the complete code.
>>
>>     FastMarchingFilterType = itk.FastMarchingUpwindGradientImageFilter[
>> InternalImageType,
>>                               InternalImageType ]
>>
>>   NodeType = itk.LevelSetNode[InternalPixelType, Dimension]
>>   NodeContainer = itk.VectorContainer[itk.UI, NodeType]
>>
>>   numpyStopPointList = [array(seedPosition) + array([1,0,0])]
>>   print numpyStopPointList
>>     stopPoints = NodeContainer.New()
>>   for numpyPoint in numpyStopPointList:
>>       stopPointNode = NodeType()
>>       stopPointNode.SetValue(0)
>>       stopPointNode.SetIndex(numpyPoint)
>>       stopPoints.InsertElement(0, stopPointNode)
>>     fastMarching = FastMarchingFilterType.New()
>>   fastMarching.SetTargetReachedModeToOneTarget()
>>   fastMarching.SetTargetPoints(stopPoints)
>>
>>     seeds = NodeContainer.New()
>>         node = NodeType()
>>   seedValue = 0.0
>>     node.SetValue( seedValue )
>>   node.SetIndex( seedPosition )
>>   print "fastmarch seed position", seedPosition
>>     seeds.Initialize();
>>   seeds.InsertElement( 0, node )
>>     fastMarching.SetTrialPoints(  seeds  );
>>       fastMarching.SetOutputSize(
>>           reader.GetOutput().GetBufferedRegion().GetSize() )
>>
>>
>> Dan Mueller wrote:
>>> Hi Rick,
>>>
>>> You may want to investigate FastMarchingUpwindGradientImageFilter:
>>>
>>>  http://www.itk.org/Doxygen/html/classitk_1_1FastMarchingUpwindGradientImageFilter.html
>>>
>>> This is a subclass of the normal fast marching filter which allows you
>>> to set the "target reached mode". By default all of the gradient
>>> "stuff" is turned off, so you can treat the filter as you would the
>>> parent class. For example, just add these lines:
>>>    filter->SetTargetReachedModeToAllTargets(); // Other options exist also
>>>    filter->SetTargetPoints( targetPoints ); // You need to create these
>>>
>>> (An aside: it is a shame this functionality was added to the subclass,
>>> not the parent filter.)
>>>
>>> Hope this helps.
>>>
>>> Cheers, Dan
>>>
>>> 2009/4/14 Rick Giuly <rgiuly at gmail.com>:
>>>
>>>> Hello All,
>>>>
>>>> I'm trying to monitor progression of fast march operation so I can stop
>>>> it
>>>> when it has spread to a certain volume. I figured that AddObserver might
>>>> be
>>>> a way to do this... but it seems that the callback is not called. Is
>>>> there
>>>> some other way to monitor the fast march progression?
>>>>
>>>>
>>>> Here is the test that I used (in python):
>>>>
>>>> fastMarching = FastMarchingFilterType.New()
>>>>
>>>> iterationCommand = itk.PyCommand.New()
>>>> iterationCommand.SetCommandCallable(fastMarchIterationUpdate)
>>>> fastMarching.AddObserver(itk.IterationEvent(),
>>>> iterationCommand.GetPointer())
>>>>
>>>>
>>>>
>>>> -rick
>>>> _____________________________________
>>>> Powered by www.kitware.com
>>>>
>>>> Visit other Kitware open-source projects at
>>>> http://www.kitware.com/opensource/opensource.html
>>>>
>>>> Please keep messages on-topic and check the ITK FAQ at:
>>>> http://www.itk.org/Wiki/ITK_FAQ
>>>>
>>>> Follow this link to subscribe/unsubscribe:
>>>> http://www.itk.org/mailman/listinfo/insight-users
>>>>
>>>>
>>
>> _____________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Please keep messages on-topic and check the ITK FAQ at:
>> http://www.itk.org/Wiki/ITK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.itk.org/mailman/listinfo/insight-users
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>>
>> ------------------------------------------------------------------------
>>



More information about the Insight-users mailing list