首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GDCM在DICOM文件中的应用

GDCM在DICOM文件中的应用
EN

Stack Overflow用户
提问于 2016-10-25 09:17:54
回答 1查看 546关注 0票数 1

我有一个RLE压缩的DICOM文件,有PALETTE_COLOR光度解释。使用GDCM,我可以使用以下代码获得片段:

代码语言:javascript
复制
gdcm.ImageReader imagereader = new gdcm.ImageReader();
imagereader.SetFileName(fileName);
if (imagereader.Read())
  {
  DataElement compressedPixelData = imagereader.GetFile().GetDataSet().GetDataElement(Helper.PIXEL_DATA);
  SequenceOfFragments sf = compressedPixelData.GetSequenceOfFragments();
  if (sf == null) throw new Exception("Cannot get fragments!");
  Fragment frag = sf.GetFragment((uint)frameNumber);
  uint bufLen = Convert.ToUInt32(frag.GetByteValue().GetLength().toString());
  byte[] buffer = new byte[bufLen];
  frag.GetByteValue().GetBuffer(buffer, bufLen);
  }

现在,我试图从缓冲区中创建一个图像。因为它是PALETTE_COLOR,所以我必须将LUT应用到缓冲区。我使用以下代码:

代码语言:javascript
复制
gdcm.LookupTable lut = imagereader.GetImage().GetLUT();

int size = ImageWidth * ImageHeight * 3;
byte[] decodedBuffer = new byte[size];

bool worked = lut.Decode(decodedBuffer, (uint)size, buffer, (uint)bufLen);

if (worked)
   return decodedBuffer;
else
   return buffer;

decodedBuffer的大小是Width * Height * 3,因为我期望在应用LUT后的RGB像素。但是产生的图像是不正确的。

如果我使用ImageApplyLookupTable类,我可以正确地显示图像。

我不想使用ImageApplyLookupTable类,因为它会解码整个图像(所有片段!)转换为原始的RGB像素并消耗大量内存。我想解码帧一个帧,以尽量减少内存使用。

您能告诉我如何正确地使用gdcm.LookupTable类来一次解码帧吗?我使用的示例文件是这里。

更新:使用ImageRegionReader对8位调色板颜色有效,但对16位无效,您能检查一下原因吗?我有16位的这里样本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-27 10:18:35

GDCM附带了许多例子,在您的例子中,我建议您开始阅读:ExtractImageRegionWithLUT.cs

代码非常愚蠢,因为它将在前面的框架上反复编写提取的帧。但无论如何,这应该给你一个基本的想法。我在这里所做的是:

首先,确保构建了C#示例(我在本例中使用了make ):

代码语言:javascript
复制
$ make GDCMCSharpExample

然后:

代码语言:javascript
复制
$ ExtractImageRegionWithLUT.exe PAL-16_RLE.dcm

在UNIX上,这将创建一个原始文件,您可以使用gdcmimg将其转换回DICOM

代码语言:javascript
复制
$ gdcmimg --depth 16 --spp 3 --size 800,600 /tmp/frame_rgb.raw /tmp/frame_rgb.raw.dcm

然后您可以简单地查看它:

代码语言:javascript
复制
$ gdcmviewer /tmp/frame_rgb.raw.dcm

你甚至可以用以下方法说服自己:

代码语言:javascript
复制
$ gdcmimg -C 1.2.840.10008.5.1.4.1.1.3.1 --depth 16 --spp 3 --size 800,600 /tmp/frame_rgb.raw /tmp/frame_rgb.raw.dcm
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40236042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档