Search This Blog

Tuesday, November 5, 2013

Fixed a major issue affecting 3D\4D registrations:  When texture gradient detector is performed the result is a 3D vector with Real (float double) components. For the purpose of performance and using SIMD, the vector components are converted into the int16 components.  To preserve the accuracy the real values are first scale (by 10,100,1000 etc) to keep precision and than rounded.  Those coefficients were fixed in all previous builds prior Build 126. It all seemed to work, i.e. registration results were good.
While enabling the URAL registration measures for Real-valued volumes (such as PET),  result was poor.
When investigated it was discovered that the URAL measure is accumulated within one row into the INT32 collector.  Its was frequently overflowing due to the the above ->int16 conversion.  Solution was to replace the accumulator with INT64 and also come up with the new scaling conversion. It all cleared with ABT and new PET tests for 3D\4D registration.

Screenshot:  PET to PET (two different timepoints) registered with URAL measure.

No comments:

Post a Comment