[Insight-users] random number generator
stefan at isi.uu.nl
Wed Mar 16 10:34:13 EST 2005
I'm sorry, I did not subscribe to the developer list, only the user-list. I
just subscribed. You are right that a random generator should behave the
same on different platforms. The vnl_random would solve this problem as well.
btw: The boost-library also has a good source of random-generators.
At 10:04 16/03/05, Blezek, Daniel J (Research) wrote:
>Stefan, I started a thread on this a while ago relating to
>non-deterministic behavior across platforms. If the ITK design committee
>approves the move, it would be great to standardize the random number
>generator to be sufficiently random, fast and generate the same sequences
>(from a given seed) across platforms. The discussion culminated with
>I'm not sure any action happened on the suggestions.
>As you point out, many registration algorithms depend on random sampling,
>exactly where I came across the problem.
>From: insight-users-bounces at itk.org
>[mailto:insight-users-bounces at itk.org]On Behalf Of Stefan Klein
>Sent: Wednesday, March 16, 2005 9:16 AM
>To: Insight-users at itk.org
>Subject: [Insight-users] random number generator
>I did some tests with the underlying random generator of the
>itkImageRandomIteratorWithIndex and it seems that, in Windows, it is 'not
>The itkImageRandomIterator uses the following random-generator:
>In Linux the drand48 random-generator is used, which is a good choice.
>In Windows however a "simple congruential random number generator" is
>implemented, since drand48 is not available in Windows. This gives
>inferior results, in my experience.
>To get a feel for the result look at the image1.<mhd/raw>, which is in the
>file: randomtestresults.zip, which you can download from:
>The gray-values in this image show how many times a pixel was sampled. The
>process works was defined as follows:
> "An ImageRegionIterator walks N=200 times through the image and tests
> at each voxel whether to sample it or not. The test is performed by
> drawing a number between 0 and 1 using the random generator defined in
> vnl_sample.h; a value >=0.5 means that the voxel is sampled"
>As you can see in the image the pixels are not really selected at random...
>If we use the itkImageRandomIteratorWithIndex to sample the image, the
>result (image3.<mhd,raw>) may look better at first sight, but the
>histogram looks terrible.
>On the internet I found the following link:
>It describes the files vnl_random.<h,cxx>; those files are not included in
>the vxl-version that comes with ITK. I tried to use these as a random
>generator. The results are now much better. Image2, which is generated in
>the same was as image1, but with the random generator defined in
>vnl_random, does not show any structure anymore. Image4, which is
>generated using an ImageRandomIterator that uses the vnl_random as its
>underlying random number generator, has the histogram that you would expect.
>For more details please look at the source of the test program, which you
>can also download from http://www.isi.uu.nl/People/Stefan/ :
>itkrandomtestsource.zip. You may reproduce the results with this program.
>Note that only in Windows bad results will be obtained. In Linux there is
>Algorithms that rely on a good random generator may fail if you use the
>itkRandomImageIteratorWithIndex under Windows. For example, in my research
>on nonrigid registration I tried to use a stochastic gradient descent
>optimisation method for minimising the MattesMutualInformation in
>combination with a B-spline transform (it may speed up your registration
>algorithms; if you are interested:
>When I used the itkImageRandomConstIteratorWithIndex for selecting spatial
>samples the registration results got significantly worse than when I used
>the itkImageMoreRandomConstIteratorWithIndex (which uses the vnl_random as
>underlying random number generator).
>Any comments on this would be appreciated!
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Insight-users