Exemple #1
0
        /// <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);
                }
            }
        }