::UpdateOutputData() when running the image registration process.

View: New views
2 Messages — Rating Filter:   Alert me  

::UpdateOutputData() when running the image registration process.

by motes motes :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

In an application I call Update() on the image registration method
multiple times:


    for (int i=0; i<runs; i++) {
      itkProbesStart("Registration");
      run();
      itkProbesStop("Registration");
      itkProbesReport( std::cout );

}



  int run() {
    std::cout << std::endl << "[INFO]::Starting Registration" << std::endl;
    try {
      registration->Update();
    }
    catch( itk::ExceptionObject & err ) {
      std::cerr << "ExceptionObject caught !" << std::endl;
      std::cerr << err << std::endl;
      return EXIT_FAILURE;
    }
    return EXIT_SUCCESS;
  }


But the second time run() is called the Update() method returns before
the image registration process is even started. I have narrowed the
"error" down to:

DataObject
::UpdateOutputData()
{
  // If we need to update due to PipelineMTime, or the fact that our
  // data was released, then propagate the UpdateOutputData to the source
  // if there is one.
  if ( m_UpdateMTime < m_PipelineMTime || m_DataReleased ||
       this->RequestedRegionIsOutsideOfTheBufferedRegion() )
    {
    if ( m_Source )
      {
      m_Source->UpdateOutputData(this);
      }
    }
}



The if-statement:

  if ( m_UpdateMTime < m_PipelineMTime || m_DataReleased ||
       this->RequestedRegionIsOutsideOfTheBufferedRegion() )


 never evals to true the second time and therefore the image
registration method is never started.


Any ideas on why I cannot run Update() on the image registration
method multiple times?
_____________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.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

Re: ::UpdateOutputData() when running the image registration process.

by Luis Ibanez :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi Motes,

This is not an error.

The ITK pipeline is designed to ensure that a filter is
run only once, *except* if in between the runs, any of
its parameters have changed.

In your particular case you are re-running the filter
for the purpose of profiling it, so you could "force"
it to rerun by calling:

                 registration->Modified();

before you call

                 registration->Update();


This will make the filter think that one (or more) of its
input parameters have changed, and that therefore,
the filter should be executed again.


      Regards,


            Luis


---------------------------------------------------------------------------------
On Mon, Nov 2, 2009 at 2:57 PM, motes motes <mort.motes@...> wrote:

> In an application I call Update() on the image registration method
> multiple times:
>
>
>    for (int i=0; i<runs; i++) {
>      itkProbesStart("Registration");
>      run();
>      itkProbesStop("Registration");
>      itkProbesReport( std::cout );
>
> }
>
>
>
>  int run() {
>    std::cout << std::endl << "[INFO]::Starting Registration" << std::endl;
>    try {
>      registration->Update();
>    }
>    catch( itk::ExceptionObject & err ) {
>      std::cerr << "ExceptionObject caught !" << std::endl;
>      std::cerr << err << std::endl;
>      return EXIT_FAILURE;
>    }
>    return EXIT_SUCCESS;
>  }
>
>
> But the second time run() is called the Update() method returns before
> the image registration process is even started. I have narrowed the
> "error" down to:
>
> DataObject
> ::UpdateOutputData()
> {
>  // If we need to update due to PipelineMTime, or the fact that our
>  // data was released, then propagate the UpdateOutputData to the source
>  // if there is one.
>  if ( m_UpdateMTime < m_PipelineMTime || m_DataReleased ||
>       this->RequestedRegionIsOutsideOfTheBufferedRegion() )
>    {
>    if ( m_Source )
>      {
>      m_Source->UpdateOutputData(this);
>      }
>    }
> }
>
>
>
> The if-statement:
>
>  if ( m_UpdateMTime < m_PipelineMTime || m_DataReleased ||
>       this->RequestedRegionIsOutsideOfTheBufferedRegion() )
>
>
>  never evals to true the second time and therefore the image
> registration method is never started.
>
>
> Any ideas on why I cannot run Update() on the image registration
> method multiple times?
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.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

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.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