1

我有一个byte[]来自 DICOM 图像的原始像素数据。现在我想把它转换byte[]成一个Image对象。

我试过:

Image img = Image.FromStream(new MemoryStream(byteArray));

但这对我不起作用。我还应该使用什么?

4

7 回答 7

3

要注意的一件事是,dicom“图像”不一定只是图像数据。dicom 文件格式包含的不仅仅是原始图像数据。这可能是你被挂断的地方。考虑查看 dicom 文件标准,您应该能够在 dicom 的维基百科文章中找到链接。这应该可以帮助您弄清楚如何解析出您真正感兴趣的信息。

于 2009-04-04T07:08:34.313 回答
2

您必须执行以下操作

  1. 从文件中识别 PIXEL DATA 标记。您可以使用 FileStream 逐字节读取。
  2. 读取像素数据
  3. 将其转换为 RGB
  4. 从 RGB 创建一个 BitMap 对象
  5. 使用 Graphics 类在面板上绘制位图。
于 2011-05-13T07:05:03.410 回答
1

您应该使用 GDCM。

Grassroots DiCoM 是一个用于 DICOM 医疗文件的 C++ 库。它会自动包装到 python/C#/Java(使用 swig)。它支持 RAW、JPEG 8/12/16 位(有损/无损)、JPEG 2000、JPEG-LS、RLE 和放气 (zlib)。

它是可移植的,并且可以在大多数系统(Win32、linux、MacOSX)上运行。

参见例如:

于 2009-09-04T14:03:12.610 回答
1

像素数据通常(如果不总是)在 DICOM 数据的末尾结束。如果您能计算出宽度、高度、步幅和颜色深度,则应该可以跳到 (7FE0,0010) 数据元素值并获取后续字节。这是大多数普通图像查看器在显示 DICOM 图像时使用的技巧。

于 2010-09-12T22:30:18.913 回答
1

有一个名为 EvilDicom ( http://rexcardan.com/evildicom/ ) 的 C# 库可用于从 DICOM 文件中提取图像。它有一个关于如何在网站上做到这一点的教程。

于 2011-03-09T00:01:44.653 回答
0

您正在使用纯标准DICOM 文件吗?两年多来,我一直在维护一个 DICOM 解析器,我遇到了一些非常奇怪的 DICOM 文件,这些文件并不完全符合标准(公司实现了他们“自己的”扭曲的标准 DICOM 文件)。将您的字节数组刷新到文件中并测试您的图像查看器(irfanview、picassa 或其他)是否可以显示它。如果您的代码正在使用普通的 JPEG 流,那么根据我的经验,99.9999% 的可能性仅仅是因为该文件以某种奇怪的方式违反了标准(相信我,医疗公司经常这样做)

另请注意,DICOM 标准支持 JPEG 标准的多种变体。可能是 Bitmap 类不支持您从 DICOM 文件中获取的数据。你能写下转移语法吗?

欢迎你把文件发给我(如果文件不大的话)yossi1981@gmail.com,我可以看看,有段时间我一直在十六进制编辑DICOM文件半年。

于 2009-04-15T11:55:35.533 回答
0

DICOM 是一个荒谬的规范,我真诚地希望它在不久的将来得到彻底改革。也就是说,Offis 有一个软件套件“DCMTK”,它非常擅长使用各种流行的编码转换 dicom。只是尝试在文件 x-bytes 中向前跳过对于单个文件可能没问题,但如果您有一个或多个卷,则需要更强大的策略。我使用了 DCMTK 的转换代码,只是在图像位进入 pnm 之前抓取了它们。您将在 DCMTK 中查找的文件是 dcm2pnm 或可能是 dcmj2pnm,具体取决于编码方案。

我用运行时标志之一修复的缩放窗口有问题。DCMTK 是开源的,并带有相当简单的构建说明。

于 2010-10-23T22:52:43.137 回答