Example #1
0
        public void NormalizationTest()
        {
            // Setup a couple of niftis. (Reading from files just makes sure we have valid headers, etc.)
            var niftiA = new NiftiFloat32().ReadNifti(_minimalNiftiPath);
            var niftiB = new NiftiFloat32().ReadNifti(_minimalNiftiPath);

            // Lets use a random element in testing! Maybe it'll pass if we get lucky!
            var rng = new Random(1000);

            for (int i = 0; i < niftiB.Voxels.Length; ++i)
            {
                niftiB.Voxels[i] = rng.Next();
            }

            // Normalize without trimming any background.
            niftiB = Normalization.ZNormalize(niftiB, niftiA, float.NegativeInfinity);

            // See how we did.
            (var mean, var stdDev) = niftiA.Voxels.MeanStandardDeviation();
            Assert.AreEqual(niftiB.Voxels.Mean(), mean, 0.000001);
            Assert.AreEqual(niftiB.Voxels.StandardDeviation(), stdDev, 0.000001);

            niftiB = Normalization.RangeNormalize(niftiA, 0, 1);
            Assert.IsTrue(niftiB.Voxels.Max() <= 1);
            Assert.IsTrue(niftiB.Voxels.Min() >= 0);
            Assert.AreEqual(niftiB.Voxels.Mean(), 0.5, 0.1); // We would expect the mean to be roughly 0.5 given a random input.
        }