[Insight-users] convert DICOM to other fomat using ManagedITK
superzz
jxdw_zlf at yahoo.com.cn
Tue Apr 13 23:42:17 EDT 2010
itkRescaleIntensityImageFilter_IUC3ISS3 should be
itkRescaleIntensityImageFilter_ISS2IUC2.
Huang, Tsung Min wrote:
>
> hi,
> I want to convert DICOM to Bitmap, I have read ManagedITK example,
> most of my DICOM data type is signed short.
> I tried use itkRescaleIntensityImageFilter to conver Image
> But it doesn't work well, can anyone give me some suggestion?
>
> here is my read code :
>
> itkImageFileReader_ISS3 reader =itkImageFileReader_ISS3.New();
> itkGDCMImageIO gdcmImageIO = itkGDCMImageIO.New();
>
> reader.FileName = filename;
> reader.SetImageIO(gdcmImageIO);
> reader.Update();
>
> itkImage_SS3 imageSS3 = itkImage_SS3.New();
> itkImage_UC3 imageUC3 = itkImage_UC3.New();
> reader.GetOutput(imageSS3);
>
> itkRescaleIntensityImageFilter_IUC3ISS3 ss2uc =
> itkRescaleIntensityImageFilter_IUC3ISS3.New();
> ss2uc.SetInput(imageSS3);
> ss2uc.GetOutput(imageUC3);
> ss2uc.Update();
>
> Bitmap show = this.ConvertItkImageToBitmap(imageUC3);
>
>
> Bitmap convert it's form ManagedITK example
>
> private Bitmap ConvertItkImageToBitmap(itkImageBase image)
> {
> // Check image is 2D
> /*
> if (image.Dimension != 2)
> {
> String message = String.Empty;
> message += "We can only display images with 2
> dimensions.";
> message += "The given image has {0} dimensions!";
> throw new NotSupportedException(String.Format(message,
> image.Dimension));
> }
> */
> // Check the pixel type is scalar
> if (!image.PixelType.IsScalar)
> {
> String message = "We can only display images with
> scalar pixels.";
> message += "The given image has {0} pixel type!";
> throw new NotSupportedException(String.Format(message,
> image.PixelType));
> }
>
> // Check the pixel type is unsigned char
> if (image.PixelType.TypeAsEnum !=
> itkPixelTypeEnum.UnsignedChar)
> {
> String message = String.Empty;
> message += "We can only display images with
> UnsignedChar pixels.";
> message += "The given image has {0} pixel type!";
> throw new NotSupportedException(String.Format(message,
> image.PixelType));
> }
>
> // The result will be a System.Drawing.Bitmap
> Bitmap bitmap;
>
> // Set pixel format as 8-bit grayscale
> PixelFormat format = PixelFormat.Format8bppIndexed;
>
> // Check if the stride is the same as the width
> if (image.Size[0] % 4 == 0)
> {
> // Width = Stride: simply use the Bitmap constructor
> bitmap = new Bitmap(image.Size[0], // Width
> image.Size[1], // Height
> image.Size[0], // Stride
> format, // PixelFormat
> image.Buffer // Buffer
> );
> }
> else
> {
> unsafe
> {
> // Width != Stride: copy data from buffer to bitmap
> int width = image.Size[0];
> int height = image.Size[1];
> byte* buffer = (byte*)image.Buffer.ToPointer();
>
> // Compute the stride
> int stride = width;
> if (width % 4 != 0)
> stride = ((width / 4) * 4 + 4);
>
> bitmap = new Bitmap(width, height, format);
> Rectangle rect = new Rectangle(0, 0, width, height);
> BitmapData bitmapData = bitmap.LockBits(rect,
> ImageLockMode.WriteOnly, format);
>
> for (int j = 0; j < height; j++)
> // Row
> {
> byte* row = (byte*)bitmapData.Scan0 + (j *
> stride);
> for (int i = 0; i < width; i++)
> // Column
> row[i] = buffer[(j * width) + i];
> }
> bitmap.UnlockBits(bitmapData);
> }// end unsafe
> }// end if (Width == Stride)
>
> // Set a color palette
> bitmap.Palette = this.CreateGrayscalePalette(format, 256);
>
> // Return the resulting bitmap
> return bitmap;
>
> }// end ConvertItkImageToBitmap()
>
> ColorPalette CreateGrayscalePalette(PixelFormat format, int
> numberOfEntries)
> {
> ColorPalette palette; // The Palette we are stealing
> Bitmap bitmap; // The source of the stolen palette
>
> // Make a new Bitmap object to steal its Palette
> bitmap = new Bitmap(1, 1, format);
>
> palette = bitmap.Palette; // Grab the palette
> bitmap.Dispose(); // Cleanup the source Bitmap
>
> // Populate the palette
> for (int i = 0; i < numberOfEntries; i++)
> palette.Entries[i] = Color.FromArgb(i, i, i);
>
> // Return the palette
> return palette;
> }
>
> thanks for your help
>
> Huang
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users
>
>
--
View this message in context: http://old.nabble.com/convert-DICOM-to-other-fomat-using-ManagedITK-tp18656440p28238063.html
Sent from the ITK - Users mailing list archive at Nabble.com.
More information about the Insight-users
mailing list