[Insight-users] Problem with MultiResMIRegistration
Vicente Grau
vicente at robots.ox.ac.uk
Mon Dec 6 08:22:11 EST 2004
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/Common
>> -I/cygdrive/e/ITK/InsightApplications-1.8.0/MultiResMIRegistration/../IBSRValidation/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/MultiResMIRegistration.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\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.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
>>
>>
>
>
>
More information about the Insight-users
mailing list