[Insight-users] Problem with MultiResMIRegistration

Martin Kavec kavec at messi.uku.fi
Mon Dec 6 09:40:17 EST 2004


Hi guys,

I have been working with MutiResMIRegistration for few weeks now so just from 
curiosity I tested the input images. However, I can not confirm your 
observations. On Gentoo Linux (glibc-2.3.4, gcc-3.3.4, ITK-1.8.1) 
everything's fine with MultiResMIRegistration:

************************************************************************
Parsing input ...
Fixed image filename: brainweb165a10f17.mha
Moving image filename: brainweb1e5a10f17Rot10Tx15.mha
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: [8, 8, 1]
Number of iterations: [2500, 2500, 2500, 2500, 2500]
Learning rates: [1e-04, 1e-05, 5e-06, 1e-06, 5e-07]
Translation scale: 320
Output filename: t1tot2.mhd

Preprocess the images ...
Register the images ...
--- Starting level 0
 No. Iterations: 2500 Learning rate: 1e-04

--- Starting level 1
 No. Iterations: 2500 Learning rate: 1e-05

--- Starting level 2
 No. Iterations: 2500 Learning rate: 5e-06

--- Starting level 3
 No. Iterations: 2500 Learning rate: 1e-06

--- Starting level 4

No. Iterations: 2500 Learning rate: 5e-07

Final parameters: [-1.7988e-05, 0.000144513, -0.0873063, 0.996182, 2.38895, 
-17.2621, 0.103705]
Overall transform matrix:
0.984755 0.173946 0.000291063
-0.173946 0.984755 1.06049e-05
-0.000284781 -6.10723e-05 1

Overall transform offset:
[-15.0512, 0.0384943, 0.135935]
Generating output ...
************************************************************************

Cheers,

Martin

On Monday 06 December 2004 14:22, Vicente Grau wrote:
> Hi Luis,
>
> thank you very much for your interest. I sent a message about it to the
> list a couple of weeks ago, but as I received no answers I assumed
> nobody had experience with it. I have copied it at the bottom, after
> your message.
>
> I am working on Windows XP, using cygwin 1.5.12-1.
> ITK version is 1.8.1.
> As you see below, the examples do not crash at all or throw exceptions,
> they just return an incorrect value as happened to Fong Ming.
> Other examples work well on my system (by "work well" I mean that the
> result is "Test passed"). The tests that failed for me, in
> itkAlgorithmsTests, were:
> 33 - ImageRegistrationMethodTest13
> 34 - ImageRegistrationMethodTest14
> 55 - MattesMutualInformation
> 62 - MultiResolutionImageRegistrationMethodTest_1
> 63 - MultiResolutionImageRegistrationMethodTest_2
> 67 - MutualInformationMetricTest
>
> After checking these tests, I thought the problem was the
> MutualInformation Metric and stopped using it (anyway, I am working on
> single modality images). The registration programs I have written since
> then, using other metrics, are giving me reasonable results.
>
> Thanks for your help.
>
> Vicente
>
>
>
>
> Luis Ibanez wrote:
>
> Hi Vincente,
>
>
> Could you please give us more details regarding your observation
> that the MutualInformation Metric "doesn't work" in your system.
>
>
> Please let us know:
>
>
>  1) Your platform (operationg system, compiler)
>
>  2) ITK version
>
>  3) What do you observe exactly in MI?
>
>      - does it crashes ?
>      - does it produces zeros ?
>      - does it throws exceptions ?
>
>  4) Have you run any of the other examples that use Mutual
>     Information in the Insight/Examples/Registration
>     directory ?
>
>
> This information will help us to track the source of the
> problem.
>
>
>
>   Thanks
>
>
>
>     Luis
>
>
>
> Hi,
>
> I thought I had solved my problems by updating the cygwin1.dll library,
> but now the MultiResMIRegistration program does not behave as expected.
> I get no error messages, the program runs smoothly, but at the end the
> registered image is exactly the same as the moving image, no transform
> is applied. My images are still brainweb165a10f17.mha and
> brainweb1e5a10f17Rot10Tx15.mha.
> I found no way to solve this problem by adjusting the registration
> parameters, so I went to the Test programs. Running
> itkAlgorithmsTests.exe, this is the output I obtain (I select test
> number 62: itkMultiResolutionImageRegistrationMethodTest_1):
>
> -----------------------
> --- Starting level 0
> No. Iterations: 100 Learning rate: 0.001
> --- Starting level 1
> No. Iterations: 300 Learning rate: 0.0005
> --- Starting level 2
> No. Iterations: 550 Learning rate: 0.0001
> Solution is: [1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0]
> True solution is: [1.25, 0, 0, 0, 1, 0, 0, 0, 1, -8.75, -3, -2]
> Test failed.
> ----------------------
>
> I get more or less the same with test 63
> (itkMultiResolutionImageRegistrationMethodTest_2).
>
> I am using ITK 1.8.1 (compiled both in Debug and RelWithDebugInfo
> versions) and the latest version of cygwin. Any ideas of what may cause
> this? Or, any hints to what I could try from here?
>
> Thanks very much.
>
> Vicente Grau
>
> Vicente Grau wrote:
> > Ok, I think I just made it work. I suspect the problem had something
> > to do with pthreads in cygwin, but I am not totally sure. Anyway, I
> > installed a new version of the package called 'cygwin: The UNIX
> > emulation engine', I reinstalled everything and it's working now. In
> > case somebody else finds this problem, my version now is cygwin
> > 1.5.12-1. I had 1.5.11-1 before.
> > Thanks very much for your help.
> >
> > Vicente
> >
> > Vicente Grau wrote:
> >> Thank you again, Luis. After "Preprocess the images...", the program
> >> does not crash. It goes on and finally produces a valid result, which
> >> as far as I can see is a correct registration. The times you have
> >> told me are also consistent with what I have seen in my computer. I
> >> would say that the only problem is the text output.
> >> I have plenty of memory and it doesn't seem to be a problem either.
> >>
> >> Regarding the build process, I don't think I am using optimization (I
> >> don't remember checking that option, at least...). These are the
> >> commands I am using. Do you think optimization might be a problem?
> >> Should I reinstall everything, ensuring that no optimizations are
> >> carried out?
> >>
> >>
> >> g++ -o Common/MultiResMIRegistration.o    -ftemplate-depth-50
> >> -DNOMINMAX -g -I/cygdrive/e/ITK/InsightToolkit-binary
> >> -I/cygdrive/e/ITK/InsightToolkit-1.8.0/Code/Algorithms
> >> -I/cygdrive/e/ITK/InsightToolkit-1.8.0/Code/BasicFilters
> >> -I/cygdrive/e/ITK/InsightToolkit-1.8.0/Code/Common
> >> -I/cygdrive/e/ITK/InsightToolkit-1.8.0/Code/Numerics
> >> -I/cygdrive/e/ITK/InsightToolkit-1.8.0/Code/IO
> >> -I/cygdrive/e/ITK/InsightToolkit-1.8.0/Code/Numerics/FEM
> >> -I/cygdrive/e/ITK/InsightToolkit-1.8.0/Code/Numerics/Statistics
> >> -I/cygdrive/e/ITK/InsightToolkit-1.8.0/Code/SpatialObject
> >> -I/cygdrive/e/ITK/InsightToolkit-1.8.0/Utilities/MetaIO
> >> -I/cygdrive/e/ITK/InsightToolkit-1.8.0/Utilities/NrrdIO
> >> -I/cygdrive/e/ITK/InsightToolkit-1.8.0/Utilities/DICOMParser
> >> -I/cygdrive/e/ITK/InsightToolkit-binary/Utilities/DICOMParser
> >> -I/cygdrive/e/ITK/InsightToolkit-binary/Utilities/expat
> >> -I/cygdrive/e/ITK/InsightToolkit-1.8.0/Utilities/expat
> >> -I/cygdrive/e/ITK/InsightToolkit-binary/Utilities
> >> -I/cygdrive/e/ITK/InsightToolkit-1.8.0/Utilities
> >> -I/cygdrive/e/ITK/InsightToolkit-1.8.0/Utilities/vxl/vcl
> >> -I/cygdrive/e/ITK/InsightToolkit-1.8.0/Utilities/vxl/core
> >> -I/cygdrive/e/ITK/InsightToolkit-binary/Utilities/vxl/vcl
> >> -I/cygdrive/e/ITK/InsightToolkit-binary/Utilities/vxl/core
> >> -I/usr/include/w32api
> >> -I/cygdrive/e/ITK/InsightApplications-1.8.0/MultiResMIRegistration/Commo
> >>n
> >> -I/cygdrive/e/ITK/InsightApplications-1.8.0/MultiResMIRegistration/../IB
> >>SRValidation/Common -c
> >> /cygdrive/e/ITK/InsightApplications-1.8.0/MultiResMIRegistration/Common/
> >>MultiResMIRegistration.cxx
> >>
> >>
> >>
> >> g++        -ftemplate-depth-50 -DNOMINMAX
> >> Common/MultiResMIRegistration.o    -o
> >> /cygdrive/e/ITK/InsightApplications-binary/MultiResMIRegistration/MultiR
> >>esMIRegistration.exe -L/cygdrive/e/ITK/InsightToolkit-binary/bin
> >> -L/cygdrive/e/ITK/gdcm-0.4.0/gdcm -lITKAlgorithms -lITKCommon
> >> -lITKBasicFilters -lITKNumerics -lITKIO -lITKBasicFilters -lITKNrrdIO
> >> -litkpng -litktiff -litkjpeg -lITKMetaIO -litkzlib -lITKDICOMParser
> >> -lITKEXPAT -lITKCommon -litkvnl_inst -litkvnl_algo -litkvnl -litkvcl
> >> -litknetlib -lm -litksys -lpthread -lgdi32 -lm
> >>
> >> Luis Ibanez wrote:
> >>> Hi Vincent,
> >>>
> >>> What happens after you get the message:
> >>>     > Preprocess the images ...
> >>>
> >>> ???
> >>>
> >>> Does it crashes ?
> >>> Does it keeps running ?
> >>> Does it exists ?
> >>>
> >>> Did you forced the program to stop ?
> >>>
> >>>
> >>> It may simply be that it is still computing
> >>> the first level of the pyramid....
> >>>
> >>>
> >>> Did you checked with your Task Manager to see
> >>> if the programs is still running and taking
> >>> CPU cycles ?
> >>>
> >>> The normal output from this filter is the following:
> >>> (fresh from a Linux run with today's CVS version)
> >>>
> >>> ========================================================
> >>> Parsing input ...
> >>> Fixed image filename: brainweb165a10f17.mha
> >>> Moving image filename: brainweb1e5a10f17Rot10Tx15.mha
> >>> 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: [8, 8, 1]
> >>> Number of iterations: [2500, 2500, 2500, 2500, 2500]
> >>> Learning rates: [1e-04, 1e-05, 5e-06, 1e-06, 5e-07]
> >>> Translation scale: 320
> >>> Output filename: t1tot2.mhd
> >>>
> >>> Preprocess the images ...
> >>> Register the images ...
> >>> --- Starting level 0
> >>>  No. Iterations: 2500 Learning rate: 1e-04
> >>> --- Starting level 1
> >>>  No. Iterations: 2500 Learning rate: 1e-05
> >>> --- Starting level 2
> >>>  No. Iterations: 2500 Learning rate: 5e-06
> >>> --- Starting level 3
> >>>  No. Iterations: 2500 Learning rate: 1e-06
> >>> --- Starting level 4
> >>>  No. Iterations: 2500 Learning rate: 5e-07
> >>> Final parameters: [-1.7988e-05, 0.000144513, -0.0873063, 0.996182,
> >>> 2.38895, -17.2621, 0.103705]
> >>> Overall transform matrix:
> >>> 0.984755 0.173946 0.000291063
> >>> -0.173946 0.984755 1.06049e-05
> >>> -0.000284781 -6.10723e-05 1
> >>>
> >>> Overall transform offset:
> >>> [-15.0512, 0.0384943, 0.135935]
> >>> Generating output ...
> >>>
> >>> =========================================
> >>>
> >>> The whole process took  109 seconds
> >>> in a dual processor Pentium IV, 2.4Ghz
> >>> running Debian Linux and Gcc 3.3
> >>>
> >>> ==========================================
> >>>
> >>> The time between the message:
> >>>
> >>>      Preprocess the images ...
> >>>
> >>> and the message
> >>>
> >>>      Register the images ...
> >>>
> >>>
> >>> was about 3 seconds.
> >>>
> >>> ===============================
> >>>
> >>> Note that this example is memory demanding, it may
> >>> reache a memory footprint of 750 Mbytes.
> >>>
> >>> You may want to double check with your Task Manager
> >>> to see if your system is swapping memory to disk.
> >>> If this is the case, that will explain a long
> >>> computation time...
> >>>
> >>> ===================================
> >>>
> >>> BTW, did you compiled this program with optmization ?
> >>>
> >>>
> >>>
> >>> Please let us know what you find,
> >>>
> >>>
> >>>    Thanks
> >>>
> >>>
> >>>
> >>>       Luis
> >>>
> >>>
> >>>
> >>> -------------------
> >>>
> >>> Vicente Grau wrote:
> >>>> Luis,
> >>>>
> >>>> thank you very much for your help. I am sorry I didn't explain my
> >>>> problem well enough. The fact is that I don't get any messages from
> >>>> the Command/Observer at all. The text output I get from the program
> >>>> is:
> >>>>
> >>>> MultiResMIRegistration.exe BrainWebT1toT2b.txt
> >>>> Parsing input ...
> >>>> Fixed image filename: brainweb165a10f17.mha
> >>>> brainweb1e5a10f17Rot10Tx15.mha
> >>>> 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: [8, 8, 1]
> >>>> Number of iterations: [2500, 2500, 2500, 2500, 2500]
> >>>> Learning rates: [0.0001, 1e-05, 5e-06, 1e-06, 5e-07]
> >>>> Translation scale: 320
> >>>> Output filename: t1tot2.mha
> >>>> Preprocess the images ...
> >>>>
> >>>> and that's all. There are other std::cout<< lines that should be
> >>>> executed (in MIMApplicationBase::Execute(), std::cout << "Register
> >>>> the images ... ") that don't seem to work (I have checked on gdb if
> >>>> the program went through them, and it did so but with no effect.) I
> >>>> also added other cout << lines myself, not related to the Command/
> >>>> Observer, but directly in the function MIMPreprocessor::Execute(),
> >>>> and I found that  they stopped working right after the
> >>>> normalizer->Update(); line. That's why I thought this could be
> >>>> interfering with the std output. I don't know what else it could
> >>>> be; any ideas?
> >>>>
> >>>> Thank you very much.
> >>>>
> >>>> Vicente
> >>>>
> >>>> Luis Ibanez wrote:
> >>>>> Hi Vicente,
> >>>>>
> >>>>>
> >>>>> Thanks for your detailed report.
> >>>>>
> >>>>> The MultiResMIRegistration application only have one
> >>>>> Observer connected to the registration algorithm.
> >>>>>
> >>>>> This observer is only intended to react to the changes
> >>>>> in resolution level. In other words, since this is a
> >>>>> multi-resolution registration, IterationEvents are triggered
> >>>>> *at the end* of the registration process of each level
> >>>>> of the pyramid.
> >>>>>
> >>>>> What the Command/Observer does at that point is to invoke
> >>>>> the StartNewLevel() method of the MIMRegistrator. In lines
> >>>>> 180-202. This method *only* prints out the number of iterations
> >>>>> and the learning rate that is going to be used for the *next*
> >>>>> level of the pyramid.
> >>>>>
> >>>>> In summary:  In this application you should only expect *one*
> >>>>> printed line per change in level of the pyramid. Since you are
> >>>>> setting your registration to use 5 levels, you will only get
> >>>>> 4 messages.
> >>>>>
> >>>>> If you want to get trace output from the registration process
> >>>>> inside each one of the pyramid level, you may want to add
> >>>>> another Command/Observer and connect it to the optimizer.
> >>>>>
> >>>>> You will find multiple examples on how to do this in the
> >>>>> ITK Software Guide
> >>>>>
> >>>>>        http://www.itk.org/ItkSoftwareGuide.pdf
> >>>>>
> >>>>>
> >>>>> in the registration chapter.
> >>>>>
> >>>>>
> >>>>>
> >>>>>   Please let us konw if you have further questions,
> >>>>>
> >>>>>
> >>>>>
> >>>>>      Thanks
> >>>>>
> >>>>>
> >>>>>
> >>>>>         Luis
> >>>>>
> >>>>>
> >>>>>
> >>>>> -----------------------
> >>>>>
> >>>>> Vicente Grau wrote:
> >>>>>> Hi everybody,
> >>>>>>
> >>>>>> I have recently installed ITK Release 1.8.1 on a Windows XP
> >>>>>> platform using cygwin. Running MultiResMIRegistration on two
> >>>>>> sample images (brainweb165a10f17.mha and
> >>>>>> brainweb1e5a10f17Rot10Tx15.mha, both in the ftp server), the
> >>>>>> program returns a reasonable registered image. However, I can see
> >>>>>> no text output from the Observer. Adding some cout<< lines to
> >>>>>> check where it fails, I have tracked the problem down to
> >>>>>> MIMPreprocessor.txx: in function Execute(), it stops printing
> >>>>>> anything right after the line:
> >>>>>> normalizer->Update();
> >>>>>>
> >>>>>> Is it possible that this command somehow interferes with text
> >>>>>> printing in my window?
> >>>>>> I have debugged the program with gdb and it runs correctly past
> >>>>>> this line, only it doesn't react to cout<<  lines anymore.
> >>>>>> I have gone through the pdfs and the list, but I couldn't find
> >>>>>> anything related. Any help will be much appreciated!
> >>>>>>
> >>>>>> This is the parameters file I am using as input to the program.
> >>>>>>
> >>>>>> brainweb165a10f17.img
> >>>>>> brainweb1e5a10f17Rot10Tx15.img
> >>>>>> 0 1 2
> >>>>>> 0 0 0
> >>>>>> 5
> >>>>>> 4 4 1
> >>>>>> 8 8 1
> >>>>>> 2500 2500 2500 2500 2500
> >>>>>> 1e-4 1e-5 5e-6 1e-6 5e-7
> >>>>>> 320
> >>>>>> t1tot2.mha
> >>>>>>
> >>>>>>
> >>>>>> Vicente Grau
> >>>>>>
> >>>>>> _______________________________________________
> >>>>>> Insight-users mailing list
> >>>>>> Insight-users at itk.org
> >>>>>> http://www.itk.org/mailman/listinfo/insight-users
> >>>>
> >>>> _______________________________________________
> >>>> Insight-users mailing list
> >>>> Insight-users at itk.org
> >>>> http://www.itk.org/mailman/listinfo/insight-users
> >>
> >> _______________________________________________
> >> Insight-users mailing list
> >> Insight-users at itk.org
> >> http://www.itk.org/mailman/listinfo/insight-users
> >
> > _______________________________________________
> > Insight-users mailing list
> > Insight-users at itk.org
> > http://www.itk.org/mailman/listinfo/insight-users
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > -------------------------
> >
> > Vicente Grau wrote:
> >> Hi Fong Ming,
> >>
> >> I have a similar problem, and in my case it's just that the Mutual
> >> Information Metric does not work. Can you try the Testing programs
> >> that use Mutual Information? For example, in program
> >> itkAlgorithmsTest, select test number 55 or 67. These tests don't
> >> work for me.
> >> I haven't been able to solve the problem, but in my case I am just
> >> using another metric and it is fine.
> >>
> >> Vicente
> >>
> >> Fong Ming Hooi wrote:
> >>> Hello,
> >>>
> >>> I’m having some trouble with the MultiResMIRegistration program. I’m
> >>> using the input of BrainWebT1toT2b.txt and have been getting this
> >>> corresponding output:
> >>>
> >>> Output:
> >>>
> >>> Parsing input ...
> >>>
> >>> Fixed image filename:
> >>> C:\ITKFiles\ITKAppBin2\MultiResMIRegistration\brainweb165a10f17.mha
> >>>
> >>> Moving image filename:
> >>> C:\ITKFiles\ITKAppBin2\MultiResMIRegistration\brainweb1e5a10f17Rot10Tx1
> >>>5.mha
> >>>
> >>>
> >>> 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: [8, 8, 1]
> >>>
> >>> Number of iterations: [2500, 2500, 2500, 2500, 2500]
> >>>
> >>> Learning rates: [0.0001, 1e-05, 5e-06, 1e-06, 5e-07]
> >>>
> >>> Translation scale: 320
> >>>
> >>> Output filename: t1tot2.mhd
> >>>
> >>> Preprocess the images ...
> >>>
> >>> Register the images ...
> >>>
> >>> --- Starting level 0
> >>>
> >>> No. Iterations: 2500 Learning rate: 0.0001
> >>>
> >>> --- Starting level 1
> >>>
> >>> No. Iterations: 2500 Learning rate: 1e-05
> >>>
> >>> --- Starting level 2
> >>>
> >>> No. Iterations: 2500 Learning rate: 5e-06
> >>>
> >>> --- Starting level 3
> >>>
> >>> No. Iterations: 2500 Learning rate: 1e-06
> >>>
> >>> --- Starting level 4
> >>>
> >>> No. Iterations: 2500 Learning rate: 5e-07
> >>>
> >>> Final parameters: [0, 0, 0, 1, 0, 0, 0]
> >>>
> >>> Overall transform matrix:
> >>>
> >>> 1 0 0
> >>>
> >>> 0 1 0
> >>>
> >>> 0 0 1
> >>>
> >>> Overall transform offset:
> >>>
> >>> [0, 0, 0]
> >>>
> >>> Generating output ...
> >>>
> >>> The output image is unchanged from the moving image. Does anyone
> >>> have any advice as to what I can do to troubleshoot this? I’ve built
> >>> the ITK 1.8 framework using cygwin along with FLTK 1.1.4 and Qt
> >>> 2.3.1 as well. Also, the Hello World example works fine along with
> >>> the Registration examples.
> >>>
> >>> Thanks,
> >>>
> >>> Fong Ming
> >>>
> >>> -----------------------------------------------------------------------
> >>>-
> >>>
> >>>
> >>> _______________________________________________
> >>> Insight-users mailing list
> >>> Insight-users at itk.org
> >>> http://www.itk.org/mailman/listinfo/insight-users
> >>
> >> _______________________________________________
> >> Insight-users mailing list
> >> Insight-users at itk.org
> >> http://www.itk.org/mailman/listinfo/insight-users
>
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users


More information about the Insight-users mailing list