Splatting images with large intensity values

Issue #41 new
Nikhil Singh created an issue

Splatting works only if the image intensities lie within +/-2048.00.

Splatting uses the atomic-add. The GPU hardware supports atomic-add only for integers. Currently, the floating point atomic-add is accomplished by conversion of float to int (fixed-point) and back. This limits the range of floating point that can be represented and handled in splatting. In the current implementation, we dedicate 11 bits for the whole number part of the float value, so we are safe if the intensity values lie between +/- 2048. I have added a CpuGpuUnitTest that fails in commit for large intensities.

This bug may creep up for instance in image matching/atlas building algorithms if the regularization weight, sigma goes below 0.01 when we divide the image difference to be splatted by sigma^2. GPU compute capability version 2.0 and higher supports atomic-add with floats but our current splatting code need to be changed to take advantage of this.

Comments (0)

  1. Log in to comment