Beispiel #1
0
        public void WritingInvalidExtension()
        {
            var file = @"C:\temp\nonsense.ni";
            var ex   = Assert.Catch(() => MedIO.SaveNifti(image, file));

            Assert.IsTrue(ex.Message.Contains("filenames must end with"));
            Assert.IsTrue(ex.Message.Contains(file));
        }
Beispiel #2
0
        public void WritingInvalidFile()
        {
            var file = "XYZ:/somegarbage.nii.gz";
            var ex   = Assert.Catch(() => MedIO.SaveNifti(image, file), "Writing to a nonsensical path should fail");

            Assert.IsTrue(ex.Message.Contains(file));
            Assert.IsTrue(ex.Message.Contains("writing to file"));
        }
        public void NiftiSaveShort(NiftiCompression niftiCompression)
        {
            var volume = TestHelpers.SingleSlice(Enumerable.Range(0, 9).Select(b => (short)b).ToArray());
            var file   = TestHelpers.CreateTempNiftiName(niftiCompression);

            MedIO.SaveNifti(volume, file);
            var loadedVolume = MedIO.LoadNiftiAsShort(file);

            VolumeAssert.AssertVolumesMatch(volume, loadedVolume);
        }
Beispiel #4
0
        public void WritingToFileAndReading(string extension)
        {
            var file = Path.GetTempFileName() + extension;

            MedIO.SaveNifti(image, file);
            var image2 = MedIO.LoadNiftiAsByte(file);

            Assert.AreEqual(image.DimX, image2.DimX);
            Assert.AreEqual(image.DimY, image2.DimY);
            Assert.AreEqual(image.DimZ, image2.DimZ);
            File.Delete(file);
        }
Beispiel #5
0
        public void ReadniftiAndSave()
        {
            var tempRandomNiftyFilePath = GetTempNiftiFileName();

            var medimage3D = MedIO.LoadNiftiAsFloat(TestData.GetFullImagesPath(@"vol_int16.nii.gz"));

            Assert.IsNotNull(medimage3D);
            Assert.AreEqual(3, medimage3D.Dimensions);

            MedIO.SaveNifti(medimage3D, tempRandomNiftyFilePath);

            var savedMedimage3D = MedIO.LoadNiftiAsFloat(tempRandomNiftyFilePath);

            Assert.AreEqual(medimage3D.Origin, savedMedimage3D.Origin);
            Assert.AreEqual(medimage3D.Array, savedMedimage3D.Array);
        }
Beispiel #6
0
        public void LoadingInvalidExtensions()
        {
            const string validExtension   = ".nii";
            const string invalidExtension = ".ni";

            var basePath    = Path.GetTempFileName();
            var validPath   = basePath + validExtension;
            var invalidPath = basePath + invalidExtension;

            // Can't save with invalid extension, so save with valid extension and rename.
            MedIO.SaveNifti(image, validPath);
            File.Move(validPath, invalidPath);


            var ex = Assert.Catch(() => MedIO.LoadNiftiAsFloat(invalidPath));

            Assert.IsTrue(ex.Message.Contains("filenames must end with"));
            Assert.IsTrue(ex.Message.Contains(invalidPath));
        }
Beispiel #7
0
        /// <summary>
        /// Common code for planar Nifti to DICOM-RT tests.
        /// </summary>
        /// <param name="sourceMaskFilename">Source mask filename.</param>
        /// <param name="expectedMaskFilename">Optional expected mask filename if not the same as source.</param>
        /// <param name="fillHoles">Fill holes flag.</param>
        /// <param name="debugFolderName">Optional folder name for debug images.</param>
        public static void CommonTestNiftiToDicomFillHoles(string sourceMaskFilename, string expectedMaskFilename, bool?fillHoles, string debugFolderName)
        {
            // Create the Nifti file as a NxMx1 volume
            var sourceMaskVolume2D = ExtractContourTests.LoadMask(sourceMaskFilename);

            Assert.IsTrue(sourceMaskVolume2D.Array.Any(x => x == 0));
            Assert.IsTrue(sourceMaskVolume2D.Array.Any(x => x == 1));

            var dimZ           = 2;
            var sourceVolume3D = sourceMaskVolume2D.Extrude(dimZ, 1.0);

            var niftiFile = TestHelpers.CreateTempNiftiName(NiftiCompression.GZip);

            MedIO.SaveNifti(sourceVolume3D, niftiFile);

            // Create the reference DICOM files.
            var referenceDicomFolder = Path.Combine(TestContext.CurrentContext.TestDirectory, "ReferenceDicom");

            if (Directory.Exists(referenceDicomFolder))
            {
                Directory.Delete(referenceDicomFolder, recursive: true);
                Thread.Sleep(1000);
            }
            Directory.CreateDirectory(referenceDicomFolder);
            var scan = new Volume3D <short>(sourceVolume3D.DimX, sourceVolume3D.DimY, sourceVolume3D.DimZ);

            foreach (var index in scan.Array.Indices())
            {
                scan.Array[index] = (short)index;
            }
            var seriesDescription = "description";
            var patientID         = DicomUID.Generate().UID;
            var studyInstanceID   = DicomUID.Generate().UID;
            var dicomFiles        = NiiToDicomHelpers.ScanToDicomInMemory(scan, ImageModality.CT, seriesDescription, patientID, studyInstanceID, null);

            var dicomFilesOnDisk = new List <string>();

            foreach (var dicomFile in dicomFiles)
            {
                dicomFilesOnDisk.Add(dicomFile.SaveToFolder(referenceDicomFolder));
            }

            // Turn the expected mask into a volume.
            var expectedNiftiFile = string.Empty;

            if (!string.IsNullOrEmpty(expectedMaskFilename))
            {
                var expectedMask   = ExtractContourTests.LoadMask(expectedMaskFilename);
                var expectedVolume = expectedMask.Extrude(dimZ, 1.0);

                expectedNiftiFile = TestHelpers.CreateTempNiftiName(NiftiCompression.GZip);
                MedIO.SaveNifti(expectedVolume, expectedNiftiFile);
            }
            else
            {
                // Expected is the same as the source.
                expectedNiftiFile = niftiFile;
            }

            DoTestNiftiToDicom(
                niftiFile,
                referenceDicomFolder,
                new[] { "background", "foreground" },
                new RGBColorOption?[] { new RGBColorOption(0xFF, 0x00, 0x00), new RGBColorOption(0x00, 0xFF, 0x00) },
                new[] { fillHoles, fillHoles },
                new[] { ROIInterpretedType.ORGAN, ROIInterpretedType.CTV },
                debugFolderName,
                true,
                expectedNiftiFile);
        }