/// <summary>
 /// Reads an ITK image from file, specifying the output pixel type.
 /// </summary>
 /// <param name="file">filename</param>
 /// <param name="outputType">output pixel type</param>
 /// <returns>image</returns>
 public static sitk.Image ReadITKImageFromFile(string file, sitk.PixelIDValueEnum outputType)
 {
     sitk.ImageFileReader reader = new sitk.ImageFileReader();
     reader.SetFileName(file);
     reader.SetOutputPixelType(outputType);
     return(reader.Execute());
 }
        /// <summary>
        /// Reads an ITK image as a grayscale image.
        /// </summary>
        /// <param name="file">filename</param>
        /// <param name="outputType">output datatype</param>
        /// <param name="channel">channel to extract</param>
        /// <returns>grayscale ITK image</returns>
        public static sitk.Image ReadITKImageAsGrayscaleFromFile(string file, sitk.PixelIDValueEnum outputType, ColorChannel channel)
        {
            sitk.ImageFileReader reader = new sitk.ImageFileReader();
            reader.SetFileName(file);
            reader.SetOutputPixelType(outputType);
            sitk.Image temp = reader.Execute();

            sitk.Image result = null;
            sitk.VectorIndexSelectionCastImageFilter rgbVector = new sitk.VectorIndexSelectionCastImageFilter();
            switch (channel)
            {
            case ColorChannel.R: result = rgbVector.Execute(temp, 0, sitk.PixelIDValueEnum.sitkFloat32); break;

            case ColorChannel.G: result = rgbVector.Execute(temp, 1, sitk.PixelIDValueEnum.sitkFloat32); break;

            case ColorChannel.B: result = rgbVector.Execute(temp, 2, sitk.PixelIDValueEnum.sitkFloat32); break;
            }

            return(result);
        }