[Insight-users] Noise simulation
Kishore Mosaliganti
kishoreraom at gmail.com
Thu Apr 1 20:59:14 EDT 2010
Thanks for the submission :). It was very helpful to my work.
Kishore
On Thu, Apr 1, 2010 at 8:58 PM, Kishore Mosaliganti
<kishoreraom at gmail.com>wrote:
> Sure, that will work well for everyone.
>
>
> Kishore
>
> 2010/4/1 Gaëtan Lehmann <gaetan.lehmann at jouy.inra.fr>
>
>>
>> Le 2 avr. 10 à 01:42, Kishore Mosaliganti a écrit :
>>
>> Hi Gaetan,
>>>
>>>
>> Hi Kishore,
>>
>>
>> I found that in the itkSaltAndPepperNoiseImageFilter, it would be more
>>> useful if the values m and M be computed from the minima and minima in the
>>> image.
>>>
>>> Currently, you are taking the pixel type maxima and minima which
>>> precludes the use of int or double or float pixel types in the image model
>>> with a narrow dynamic range of data.
>>>
>>> Does that sound reasonable ?
>>>
>>
>> That may not produce the expected behavior, because the maximum/minimum
>> may not be the expected value. In the example image for example, the maximum
>> is 200 (on purpose, to avoid saturating the pixel values when adding noise),
>> but I do want a salt and pepper in the range [0 255].
>>
>> I had the same problem with the PSNR computation, where the maximum
>> possible value of the pixel type should be used. To make it usable with
>> pixel types which are not the ones used in the image format, the value used
>> was measured as the maximum value in the image, but with that same example
>> image, the value was not the expected one.
>>
>> In both cases, maybe the values should default to the maximum/minimum
>> possible value, but be modifiable by the user with the usual Set/Get
>> methods.
>>
>> Does it sound like reasonable option?
>>
>> Gaëtan
>>
>>
>>
>>
>>> Kishore
>>>
>>>
>>> 2010/4/1 Gaëtan Lehmann <gaetan.lehmann at jouy.inra.fr>
>>>
>>> Hi,
>>>
>>> Le 30 mars 10 à 17:40, Oleksandr Dzyubak a écrit :
>>>
>>> Hi Gaëtan,
>>>
>>> I have done my homework.
>>>
>>> 1) I studied the ITK header.
>>>
>>> InsightToolkit/Common/itkMersenneTwisterRandomVariateGenerator.h
>>>
>>> In that header the link to the inventors' web page
>>> www.math.keio.ac.jp/~matumoto/emt.html<http://www.math.keio.ac.jp/%7Ematumoto/emt.html>is dead.
>>> The correct and still alive one is below.
>>>
>>> http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html<http://www.math.sci.hiroshima-u.ac.jp/%7Em-mat/MT/emt.html>
>>>
>>> 2) I have also read the article by the inventors
>>> M. Matsumoto and T. Nishimura, "Mersenne Twister: A 623-dimensionally
>>> equidistributed uniform pseudorandom number generator", ACM Trans. on
>>> Modeling and Computer Simulation Vol. 8, No. 1, January pp.3-30 (1998).
>>>
>>> This classical article (along with others) can be downloaded from
>>> the Makoto Matsumoto's home page.
>>>
>>> http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/ARTICLES/earticles.html<http://www.math.sci.hiroshima-u.ac.jp/%7Em-mat/MT/ARTICLES/earticles.html>
>>>
>>> 3) From that article: "A new algorithm called Mersenne Twister
>>> is proposed for generating uniform pseudorandom numbers."
>>> Period is (2^ 19937) - 1, 632-dimensional equidistribution up to 32-bit
>>> accuracy.
>>> So the period is a such huge number
>>> that this generator could be considered as a "true random".
>>>
>>> Sounds good :-)
>>>
>>>
>>>
>>> 4) New debugged and updated release 2009/11/17 of the generator
>>> can be downloaded using link below.
>>>
>>> http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html<http://www.math.sci.hiroshima-u.ac.jp/%7Em-mat/MT/SFMT/index.html>
>>>
>>>
>>> 5) I downloaded and tested the updated code version from the link you
>>> provided.
>>> http://mima2.jouy.inra.fr/darcs/contrib-itk/noise/
>>>
>>> a) Compiles -- fine.
>>> b) Works -- fantastic.
>>> c) Tested images are identical to those provided in the submission.
>>>
>>> Great!
>>>
>>>
>>>
>>> 6) Could you upload the revised version to the Insight Journal?
>>> I would be more than happy to write a review and
>>> recommend to add it to the ITK library.
>>>
>>>
>>> I just tried, but I'm still stuck at that stage
>>> http://insight-journal.com/submit/step10/59, as for the fftconv contrib.
>>> Julien, did you have a chance to look at that?
>>>
>>>
>>> Thanks for nice work,
>>>
>>> Thanks a lot for your very useful report and comments
>>>
>>> Gaëtan
>>>
>>>
>>>
>>> Alex
>>>
>>>
>>> Gaëtan Lehmann wrote:
>>>
>>> Le 29 mars 10 à 15:54, Oleksandr Dzyubak a écrit :
>>>
>>>
>>> Hi Gaëtan,
>>>
>>>
>>> Hi Alex,
>>>
>>> Whenever I try to send images using a regular email client,
>>> my emails get bounced. So I used the web page uploader
>>> from nabble.com to send the images. I hope you also got a copy.
>>> If not, below is the link to the images.
>>>
>>> http://old.nabble.com/Noise-simulation-to27990624.html#a28069421
>>>
>>> I'd say there is a small difference between the two images, but that's a
>>> random process :-)
>>>
>>>
>>> About median.cxx. In your submission you use it
>>> just as a denoiser to demonstrate that it works nice on, in particular,
>>> images
>>> with "salt-and-pepper", right?
>>>
>>> I included it to experiment a bit with PSNR calculator and denoising.
>>> That's really a not much useful program - I didn't event mentioned it in the
>>> paper!
>>>
>>>
>>> About the generator. How good is it? Is it random or chaotic?
>>> What is the cycle?
>>>
>>> I can't say at all. I simply modified the Mersenne Twister generator from
>>> ITK to make it thread safe.
>>> I actually don't have much skills in random generator.
>>>
>>>
>>> You say that the Gauss has been fixed.
>>> Is it possible the get the updated version?
>>>
>>>
>>> Sure! It is in the main development repository.
>>>
>>> http://mima2.jouy.inra.fr/darcs/contrib-itk/noise/
>>>
>>> I think I didn't say that you can use darcs to get it (
>>> http://www.darcs.net)
>>>
>>> darcs get http://mima2.jouy.inra.fr/darcs/contrib-itk/noise/
>>>
>>> Thanks,
>>>
>>> Gaëtan
>>>
>>>
>>> Thanks,
>>>
>>> Alex
>>>
>>> Gaëtan Lehmann wrote:
>>>
>>> Le 26 mars 10 à 16:27, Oleksandr Dzyubak a écrit :
>>>
>>> Hi Gaëtan,
>>>
>>> I downloaded the updated version from your repository that you provided.
>>> http://mima2.jouy.inra.fr/darcs/contrib-itk/noise/
>>>
>>> Below is the result of my tests.
>>>
>>> 1)
>>> The compilation was perfect.
>>>
>>> great :-)
>>>
>>>
>>> 2)
>>> dzyubak at helium: /Original_Images$ ./median cthead1.tif
>>> cthead1_median.png | grep " Number Of Threads"
>>>
>>> After Running the median program, I do see any difference
>>> between original and processed images.
>>> As I can see, in the median.cxx you just removed the neighborhood
>>> radius.
>>> What is the purpose of being that utility in the submission?
>>> Can't be the median.cxx just removed from the package?
>>>
>>>
>>> It does something here - by default, the radius is 1.
>>> Just try on the output of the salt and pepper filter :-)
>>>
>>> ./sp ../images/cthead1.tif sp.png
>>> ./median sp.png out.png
>>>
>>> it is very efficient for this kind of noise.
>>>
>>> 3)
>>> dzyubak at helium: /Original_Images$ ./gauss cthead1.tif
>>> cthead1_gauss_s22_8_m0.png 22.8 0.0 | grep " Number Of Threads"
>>> Number Of Threads: 16
>>> Global Maximum Number Of Threads: 128
>>> Global Default Number Of Threads: 16
>>>
>>> The image has the same seeding problem as in the previous version.
>>> No changes at all.
>>>
>>>
>>> err, yes, my fault. I forgot that this filter was not using the mersenne
>>> twister generator.
>>> It's fixed now, by using the same random generator as in the other
>>> filters :-)
>>>
>>> 4)
>>> dzyubak at helium: /Original_Images$ ./sp cthead1.tif cthead1_sp_001.png
>>> 0.01 | grep " Number Of Threads"
>>>
>>> Number Of Threads: 16
>>> Global Maximum Number Of Threads: 128
>>> Global Default Number Of Threads: 16
>>>
>>> Surprisingly, now cthead1_sp_001.png looks similar to that
>>> from your submission. The incorrect seeding problem is gone.
>>> Noise really looks random. However, I noticed that your image is
>>> "noisier".
>>> Did you use the same parameter "0.01" or that is still the seeding
>>> problem?
>>>
>>> noiser? can your provide the images?
>>>
>>>
>>> 5)
>>> The shot and spekle noise generators work fine and my images
>>> are identical to yours.
>>>
>>> great :-)
>>>
>>>
>>> 6)
>>> Peak signal to noise ratio. In your submission you have 20 dB. Mine is
>>> below.
>>>
>>> dzyubak at helium: /Original_Images$ ./psnr cthead1.tif cthead1_median.png
>>> PSNR: 37.3425 dB
>>>
>>> dzyubak at helium: /Original_Images$ ./psnr cthead1.tif
>>> cthead1_gauss_s22_8_m0.png
>>> PSNR: 20.0251 dB
>>>
>>> dzyubak at helium: /Original_Images$ ./psnr cthead1.tif
>>> cthead1_shot_s015.png
>>> PSNR: 20.0429 dB
>>>
>>> dzyubak at helium: /Original_Images$ ./psnr cthead1.tif
>>> cthead1_spekle_s024.png
>>> PSNR: 20.0901 dB
>>>
>>> dzyubak at helium: /Original_Images$ ./psnr cthead1.tif cthead1_sp_001.png
>>> PSNR: 22.4873 dB
>>>
>>> Interesting, the utility says that my salt and pepper is noisier,
>>> but just visual test yours is as twice noisier. Subjective judgment?
>>>
>>> PSNR is only a (not so bad) approximation of the image degradation as
>>> perceived by a human.
>>> Our brain very capable to ignore the noise, and for some case like the
>>> salt and pepper case, the PSNR is not very representative of our feeling.
>>>
>>>
>>> Summing up.
>>> 1) What is the need for median.cxx ?
>>> Can't be this utility just removed from the submission?
>>>
>>> 2) The seeding problem in the Gauss noise generator is still there.
>>>
>>> Regards,
>>>
>>> Alex
>>>
>>>
>>> Gaëtan Lehmann wrote:
>>>
>>> Le 25 mars 10 à 23:27, Gaëtan Lehmann a écrit :
>>>
>>>
>>> Hi Alex,
>>>
>>> I think there is a problem with multithreading and the random generator -
>>> more specifically, the seeds are the same in all the threads.
>>> I didn't noticed this on my macbook with only 2 cores, even when
>>> increasing the number of threads to a higher number than the number of
>>> cores, but I see the same behavior on my workstation with 16 threads.
>>>
>>> How many threads are running in parallel on your system? The number is
>>> displayed while running one of the noise generator
>>>
>>> [glehmann at gbook build]$ ./shot ../images/cthead1.tif toto.png | grep "
>>> Number Of Threads:"
>>> Number Of Threads: 2
>>> Number Of Threads: 2
>>>
>>> You can limit the number of threads to a small number, or even to 1, with
>>>
>>> export ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS=1
>>>
>>> to workaround the problem.
>>>
>>> I will restore the (non thread safe) seeding behavior in
>>> ThreadSafeMersenneTwisterRandomVariateGenerator and make it thread safe with
>>> a lock so that 2 threads can't get the same seed.
>>>
>>>
>>> This is fixed in the main repository:
>>>
>>> http://mima2.jouy.inra.fr/darcs/contrib-itk/noise/
>>>
>>> As well as the problem you have reported in median.cxx.
>>> Please let me know if there is something else wrong!
>>>
>>> Gaëtan
>>>
>>>
>>> Thanks for the report!
>>>
>>> Gaëtan
>>>
>>>
>>> Le 25 mars 10 à 22:47, Oleksandr Dzyubak a écrit :
>>>
>>> Dear ITK users,
>>>
>>> Did anybody tested the noise simulation codes from the submission
>>> "Noise simulation" http://hdl.handle.net/10380/3158 ?
>>> The most needed (for me at least) noise generators
>>> (Gauss and salt and pepper)
>>> produce corrupted images with periodic line patterns
>>> (see attached images). To generate those images, I followed
>>> the parameter recommendations taken from the submission.
>>>
>>> ./gauss cthead1.tif cthead1_gauss_s22_8_m0.png 22.8 0
>>> ./sp cthead1.tif cthead1_sp_0016.png 0.016
>>>
>>> Did anybody get similar results?
>>>
>>> Alex
>>>
>>>
>>>
>>> Oleksandr Dzyubak wrote:
>>> Hi Gaëtan,
>>>
>>> Nice and long awaited work.
>>> I found a tiny typo in your code that prevents the submitted codes from
>>> being compiled.
>>> At least on my Linux box. The typo is sitting in your median.cxx and the
>>> fix is below.
>>>
>>> // Part that gives the errors.
>>> /*
>>> FilterType::RadiusType r;
>>> r.Fill(2);
>>> // filter->SetRadius(r);
>>> */
>>>
>>> // this fix solves the problem.
>>> IType::SizeType r;
>>> r[0] = 1;
>>> r[1] = 1;
>>> filter->SetRadius(r);
>>>
>>> Could you please add the fix and upload the code?
>>>
>>> Thanks,
>>> Alex
>>>
>>>
>>> <cthead1_gauss_s22_8_m0.png><cthead1_sp_0016.png>
>>>
>>> --
>>> Gaëtan Lehmann
>>> Biologie du Développement et de la Reproduction
>>> INRA de Jouy-en-Josas (France)
>>> tel: +33 1 34 65 29 66 fax: 01 34 65 29 09
>>> http://voxel.jouy.inra.fr http://www.itk.org
>>> http://www.mandriva.org http://www.bepo.fr
>>>
>>> _____________________________________
>>> Powered by www.kitware.com
>>>
>>> Visit other Kitware open-source projects at
>>> http://www.kitware.com/opensource/opensource.html
>>>
>>> Kitware offers ITK Training Courses, for more information visit:
>>> http://www.kitware.com/products/protraining.html
>>>
>>> Please keep messages on-topic and check the ITK FAQ at:
>>> http://www.itk.org/Wiki/ITK_FAQ
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.itk.org/mailman/listinfo/insight-users
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> --
>>> Gaëtan Lehmann
>>> Biologie du Développement et de la Reproduction
>>> INRA de Jouy-en-Josas (France)
>>> tel: +33 1 34 65 29 66 fax: 01 34 65 29 09
>>> http://voxel.jouy.inra.fr http://www.itk.org
>>> http://www.mandriva.org http://www.bepo.fr
>>>
>>>
>>> _____________________________________
>>> Powered by www.kitware.com
>>>
>>> Visit other Kitware open-source projects at
>>> http://www.kitware.com/opensource/opensource.html
>>>
>>> Kitware offers ITK Training Courses, for more information visit:
>>> http://www.kitware.com/products/protraining.html
>>>
>>> Please keep messages on-topic and check the ITK FAQ at:
>>> http://www.itk.org/Wiki/ITK_FAQ
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.itk.org/mailman/listinfo/insight-users
>>>
>>>
>>>
>> --
>> Gaëtan Lehmann
>> Biologie du Développement et de la Reproduction
>> INRA de Jouy-en-Josas (France)
>> tel: +33 1 34 65 29 66 fax: 01 34 65 29 09
>> http://voxel.jouy.inra.fr http://www.itk.org
>> http://www.mandriva.org http://www.bepo.fr
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20100401/e573009f/attachment-0001.htm>
More information about the Insight-users
mailing list