显示DICOM monochrome2,其存储位少于分配的位

时间:2017-06-02 06:32:45

标签: c# vtk dicom gdcm

我想显示具有光度解释MONOCHROME2的DICOM文件。

图像的某些规格是 -

Rows:           1024
Columns:        1024
No of Frames:   622
Bits Allocated: 16
Bits Stored:    10
High Bit:       9
Pixel Representation: 0
Sample per pixel: 1

我正在使用gdcmRegionReader以下列方式提取单帧字节数组。

 gdcm.ImageRegionReader _regionReader = new gdcm.ImageRegionReader();
 _regionReader.SetRegion(_boxRegion);  // _boxRegion is some region
 _regionReader.ReadIntoBuffer(Result, (uint)Result.Length);
 Marshal.Copy(Result.ToArray(), 0, _imageData.GetScalarPointer(), 
 Result.ToArray().Length);
 _viewer.SetInput(_imageData);  // _viewer = vtkImageViewer

但是,当我显示该文件时,它显示如下.. MONOCHROME2 dicom when I display using gdcmRegionReader

但原始图片是这样的.. Original Image

所以有人可以帮助我加载和显示MONOCHROME2 dicom图像。

2 个答案:

答案 0 :(得分:1)

  

免责声明:我从未使用过该工具包。我试图根据我对DICOM的理解来回答。根据我对DICOM的体验,语法很少是问题所在。真正的问题是概念和术语。

我在输出中看到两个问题。

一个是关于渲染图像的一部分。请注意,整个数据不会在输出中呈现。检查工具包文档,了解在渲染图像时如何设置尺寸/边界。

其他问题是关于输出质量。最初,我怀疑传输语法可能是问题。我不认为它只是确保你在渲染之前不妥协的形象。我不确定你的工具包在渲染时如何处理压缩。

还有其他方法可用于渲染工具包中的像素数据。

_ImageViewer.SetRenderWindow(renderWindow);
_ImageViewer.GetRenderer().AddActor2D(sliceStatusActor);
_ImageViewer.GetRenderer().AddActor2D(usageTextActor);
_ImageViewer.SetSlice(_MinSlice);
_ImageViewer.Render();

以上代码是从“http://www.vtk.org/Wiki/VTK/Examples/CSharp/IO/ReadDICOMSeries”复制的。那里有详细的代码。

以下链接也可能有所帮助:
http://vtk.1045678.n5.nabble.com/How-to-map-negative-grayscale-to-color-td5737080.html

https://www.codeproject.com/Articles/31581/Displaying-bit-Images-Using-C

答案 1 :(得分:1)

您应该在代码中使用vtkGDCMImageReader2vtkGDCMImageReader2正好封装gdcm::RegionReader以便与VTK绑定。

如果由于某种原因您无法直接使用此类,只需将主函数中的C ++代码复制/粘贴到C#代码中即可。

请参阅: