imagej / imagej-ops

ImageJ Ops: "Write once, run anywhere" image processing
https://imagej.net/libs/imagej-ops
BSD 2-Clause "Simplified" License
88 stars 42 forks source link

filter/addPoissonNoise hangs up with large pixel values #641

Open bthoughton opened 2 years ago

bthoughton commented 2 years ago

Hello,

I have been working on a project for the NIH that uses pyimagej to run ImageJ ops from python. Yesterday I was working on developing a plugin which calls the filter-addpoissonnoise op. During testing I determined that the op would hang up seemingly doing nothing when the input images had large pixel values. I believe this problem can be summarized as a precision/underflow problem when very large lambda values (expected number of successes in a given interval) are introduced to the Knuth algorithm. This has been documented before in wiki's Generating Poisson-distributed random variables section. As lambda becomes large exp(-lambda) approaches 0 and becomes so small it is evaluated as exactly 0. This value is checked in a while loop against another value which is never less than 0: while p >= L: do stuff where L = 0 and p is never less than 0. Therefore the loop runs forever.