I dug into this numeric change in the test a little further. It was narrowed down for a MetaIO change from float to double internally.
One of the failing SimpleITK test is with the LabelIntensityStatisticsImageFilter:
/home/circleci/SimpleITK-build/SimpleITK-build/Testing/Unit/sitkLabelIntensityStatisticsImageFilterTest.cxx:209: Failure
The difference between 3004.1542777485 and filter.GetPhysicalSize( 1 ) is 0.00020916997527820058, which exceeds 1e-08, where
3004.1542777485 evaluates to 3004.1542777485001,
filter.GetPhysicalSize( 1 ) evaluates to 3004.1544869184754, and
1e-08 evaluates to 1e-08.
Does the change of ~2e-4 seem excessive for such a simple computation as the PhysicalSize (# of pixel X voxel size ). So I looked into it a bit further.
The input file has the following header:
TransformMatrix = 1 0 0 1
Offset = 0 0
CenterOfRotation = 0 0
ElementSpacing = 0.352778 0.352778
DimSize = 256 256
With SimpleITK 1.0.1 (ITK 4.12) I get the following when reading the image:
In [6]: print img.GetSpacing()
(0.35277798771858215, 0.35277798771858215)
While SimpleITK with ITK 4.13rc02 I get the following:
In [4]: print img.GetSpacing()
(0.352778, 0.352778)
The later ITK 4.13 is clearly more accurate to what is in the file, the difference is ~1.2e-8. This is inline with float numbers having about 8 digits of accuracy.
The object of this test has about 24,000 pixels so the error is 24000*1.2e-8=0.000288. Which about what the test was reporting.
It is interesting to see the way inaccuracy, differences or portability of the image meta-information can effect results.