我在DICOM图像的byte[]
中有一个原始像素数据。
现在我想将此byte[]
转换为Image
对象。
我试过了:
Image img = Image.FromStream(new MemoryStream(byteArray));
但这不适合我。我还应该使用什么?
答案 0 :(得分:3)
有一点需要注意的是,dicom“图像”不一定只是图像数据。 dicom文件格式包含的不仅仅是原始图像数据。这可能是你被挂断的地方。考虑一下你应该能够在维基百科文章中找到的dicom文件标准。这可以帮助您弄清楚如何解析您真正感兴趣的信息。
答案 1 :(得分:1)
您应该使用GDCM。
Grassroots DiCoM是DICOM医疗档案的C ++库。它自动包装到python / C#/ Java(使用swig)。它支持RAW,JPEG 8/12 / 16bits(有损/无损),JPEG 2000,JPEG-LS,RLE和放气(zlib)。
它是可移植的,并且已知可在大多数系统(Win32,Linux,MacOSX)上运行。
参见例如:
答案 2 :(得分:1)
像素数据通常(如果不总是)最终在DICOM数据的末尾。如果你可以计算宽度,高度,步幅和颜色深度,应该可以跳到(7FE0,0010)数据元素值并只抓取后续字节。这是大多数普通图像查看者在显示DICOM图像时使用的技巧。
答案 3 :(得分:1)
有一个名为EvilDicom(http://rexcardan.com/evildicom/)的C#库可用于将图像从DICOM文件中拉出。它有一个如何在网站上进行的教程。
答案 4 :(得分:1)
您必须执行以下操作
答案 5 :(得分:0)
您使用的是纯标准 DICOM文件吗?我已经维护了一个DICOM解析器超过两年了,我遇到了一些奇怪的DICOM文件,这些文件并没有完全符合标准(公司实现了他们“自己的”扭曲标准DICOM文件)。将您的字节数组刷新到文件中,并测试您的图像查看器(irfanview,picassa或其他)是否可以显示它。如果您的代码使用普通的JPEG流,那么从我的经验来看,99.9999%的可能性只是因为文件以某种奇怪的方式消除了标准(并且相信我,医疗公司做了很多)
另请注意,DICOM标准支持JPEG标准的几种变体。可能是Bitmap类不支持从DICOM文件获得的数据。你能写下转移语法吗?
欢迎您发送文件(如果不大)yossi1981@gmail.com,我可以查看,有一段时间我已经半年编辑DICOM文件半年了。
答案 6 :(得分:0)
DICOM是一个荒谬的规范,我真诚地希望它在不久的将来得到彻底改革。这就是说Offis有一个软件套件“DCMTK”,相当擅长用各种流行的编码转换dicoms。只是尝试在x-bytes文件中向前跳过,对于单个文件来说可能没什么问题,但是如果你有一个卷或几个卷,则需要一个更健壮的策略。我使用了DCMTK的转换代码,只是在它们进入pnm之前抓住了图像位。你将在DCMTK中寻找的文件是dcm2pnm或者可能是dcmj2pnm,具体取决于编码方案。
我在使用其中一个运行时标志修复的缩放窗口时出现问题。 DCMTK是开源的,并带有相当简单的构建指令。