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)); }
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); }
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); }
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); }
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)); }
/// <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); }