[Insight-users] Error using MultiResMIRegistration

Vicente Grau vgrauc@bwh.harvard.edu
Sat, 08 Mar 2003 21:49:49 -0500


Hi Luis,

thank you very much for your answer. I've tried your suggestions, but 
I've not been able to correct the problem:

- With a single level, as few as 100 iterations (or even 1 iteration), 
and a very small learning rate (1e-08), the error is exactly the same.
- I've modified the program as you've told me (see below). However, 
still no catch is produced: the output is exactly the same as before. Is 
it possible that the catch is not working for any reason?

Thanks again

Vicente

#include <fstream>

#include "SimpleApp.h"
#include "itkExceptionObject.h"


int main(int argc, char *argv[])
{
   try{
       std::cout<< "Modified procedure" << std::endl;
       if ( argc < 2 )
         {
         std::cout << "Parameter file name missing" << std::endl;
         std::cout << std::endl;
         std::cout << "Usage: MultiResMIRegistration param.file" << 
std::endl;
         return 1;
         }

       // run the registration
       try
         {
         typedef itk::SimpleApp<signed short> AppType;
         AppType::Pointer theApp = AppType::New();
         theApp->SetParameterFileName( argv[1] );
         theApp->Execute();
         }
       catch( itk::ExceptionObject& err)
         {
         std::cout << "Caught an ITK exception: " << std::endl;
         std::cout << err << std::endl;
         }
       catch(...)
         {
         std::cout << "Caught an non-ITK exception " << std::endl;
         }
       }
   //Added to detect error
   catch(std::exception & excep )
       {
       std::cerr << "Exception thrown = ";
       std::cerr << excep.what() << std::endl;
       }
   //
 return 0;
}



Luis Ibanez wrote:

>
> Hi Vicente,
>
> When a program aborts it is usually an indication
> that an exception has been thrown and nobody
> is catching it.
>
> In this particular application there are multiple
> catch statements, so this seems to be an unusual
> error that is not anticipated by any of the
> existing catch's.
>
>
> Usual suspects are:
>
> 1) One of the common exceptions being thrown in
>    registration is due to the fixed image and
>    moving image not being overlapped at all.
>    This ocurrs commonly when relatively large
>    learning rates are provided to the optimizer.
>
>    ... but... when this common exception is thrown,
>    there is a catch statment that receives it and
>    print an specific message in the console.
>
>    You don't seems to be receiving this specific
>    message....
>
>
> 2) Another common source of exception being
>    thrown is the initialization of the registration
>    method. In this stage, all the components of
>    the registration process are plugged together.
>    (optimizer, metric, interpolator,...)
>    If any of them is missing, an exeption is thrown.
>
>    ... have you modified this code in any way ?
>    or are you running exactly as it exists in
>    the repository ?
>
>
> ----
>
> Suggestions:
>
> 1)  Go to the main() method of the application and
>     put its body inside a try/catch statement like
>
>     main()
>     {
>      try {
>        ... all the code except 'return 0;'
>      }
>      catch( std::exception & excep )
>      {
>       std::cerr << "Exception thrown = ";
>       std::cerr << excep.what() << std::endl;
>      }
>
>
>    This message could hopefully give us an idea
>    of what is going wrong in the process.
>
>
> 2) Start with a single level (instead of 5), and
>    use a smaller learning rate (e.g. 1e-8) for
>    fewer iterations (e.g. 100).
>
> If this doesn't abort, we will know that the initialization
> is ok, and the problem should be appearing during
> the optimization process. In that case you can add more
> iterations. If you can get to 2500 iterations, then it is
> time to attempt a second level in the pyramid, and so on.
>
>
>
> -----
>
> Please try this, and let us know what you find.
>
>
> Thanks
>
>
>    Luis
>
>
>
> ---------------------
>
> Vicente Grau wrote:
>
>> Hello,
>>
>> I'm trying to use the MultiResMIRegistration program on two 3D 
>> volumes that I've created. The parameters file that I'm using now is:
>> ------------------------
>> Img_1.raw
>> 1
>> 100 100 20
>> 0.293 0.293 1.6
>> Img_2.raw
>> 1
>> 100 100 20
>> 0.293 0.293 1.6
>> 0 1 2
>> 0 0 0
>> 5
>> 4 4 1
>> 4 4 1
>> 2500 2500 2500 2500 2500
>> 1e-4 1e-5 5e-6 1e-6 5e-7
>> 320
>> Registered_1
>> ---------------------------
>>
>> I've tried also other combinations of parameters, but the result is 
>> always the one shown below:  the program always aborts immediately 
>> after starting with the first level. The directory Registered_1 
>> exists, I've created it previously. Do you know what's happening in 
>> this case?
>>
>> ---------------------------------
>> Parsing input ...
>> Fixed image filename: Img_1.raw
>> Big Endian: 1
>> Image Size: [100, 100, 20]
>> Image Spacing: [0.293, 0.293, 1.6]
>> Moving image filename: Img_2.raw
>> Big Endian: 1
>> Image Size: [100, 100, 20]
>> Image Spacing: [0.293, 0.293, 1.6]
>> Permute order: [0, 1, 2]
>> Flip axes: [0, 0, 0]
>> Number of levels: 5
>> Fixed image shrink factors: [4, 4, 1]
>> Moving image shrink factors: [4, 4, 1]
>> Number of iterations: [2500, 2500, 2500, 2500, 2500]
>> Learning rates: [0.0001, 1e-05, 5e-06, 1e-06, 5e-07]
>> Translation scale: 320
>> PGM directory: Registered_1
>>
>> Preprocess the images ...
>> Register the images ...
>> --- Starting level 0
>> No. Iterations: 2500 Learning rate: 0.1
>> Abort
>>
>> ------------------------------
>>
>> Thanks
>>
>> Vicente Grau-Colomer
>>
>> _______________________________________________
>> Insight-users mailing list
>> Insight-users@public.kitware.com
>> http://public.kitware.com/mailman/listinfo/insight-users
>>
>
>
>
>
> _______________________________________________
> Insight-users mailing list
> Insight-users@public.kitware.com
> http://public.kitware.com/mailman/listinfo/insight-users