[Insight-users] random number generator

Stefan Klein stefan at isi.uu.nl
Wed Mar 16 09:15:54 EST 2005

Dear itk-users,

I did some tests with the underlying random generator of the 
itkImageRandomIteratorWithIndex and it seems that, in Windows, it is 'not 
very random'.

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 
no problem.

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:
http://www.isi.uu.nl/Research/Publications/publicationview.php?id=1011 ). 
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...
URL: http://public.kitware.com/pipermail/insight-users/attachments/20050316/b4ed2ad5/attachment.html

More information about the Insight-users mailing list