/// <summary> /// Convert the image to a specific format. /// </summary> /// <param name="image">The ITK image.</param> /// <returns> /// The rescaled ITK image. /// </returns> /// <exception cref="ArgumentNullException">image</exception> private Image ApplyRescaleIntensityImageFilter(Image image) { if (image == null) { throw new ArgumentNullException(nameof(image)); } Image output = null; try { // Execute rescale intensity image filter RescaleIntensityImageFilter filterRS = new RescaleIntensityImageFilter(); filterRS.SetOutputMinimum(0); filterRS.SetOutputMaximum(255); output = filterRS.Execute(image); filterRS.Dispose(); } catch (Exception) { // ignore "RescaleIntensityImageFilter(000000F79D6CFC40): // Minimum output value cannot be greater than Maximum output value." exceptions } return(output ?? image); }
private Image ApplyRescaleIntensityImageFilter(Image image, int retryCount = 0) { Ensure.ArgumentNotNull(image, nameof(image)); if (retryCount > 1) { return(image); } else { try { // Execute rescale intensity image filter RescaleIntensityImageFilter filter = new RescaleIntensityImageFilter(); filter.SetOutputMinimum(0); filter.SetOutputMaximum(255); Image output = filter.Execute(image); filter.Dispose(); image.Dispose(); return(output); } catch (Exception) { // System.ApplicationException: Exception thrown in SimpleITK RescaleIntensityImageFilter_Execute: // "Minimum output value cannot be greater than Maximum output value." // Applying the CastImageFilter before the RescaleIntensityImageFilter. Image castedImage = ApplyCastImageFilter(image); Image output = ApplyRescaleIntensityImageFilter(castedImage, ++retryCount); castedImage.Dispose(); return(output); } } }