2

我正在使用 dcmtk 从 dicom 数据中获取图像数据。现在我有一个示例图像的以下信息:

  • (0028,0002) 每像素样本数:1
  • (0028,0004) 光度解释:MONOCHROME2
  • (0028,0010) 行数:256
  • (0028,0011) 栏目数:256
  • (0028,0030) 像素间距:1.5625\1.5625
  • (0028,0100) 分配的位数:16
  • (0028,0101) 存储位数:12
  • (0028,0102) 高位:11
  • (0028,0103) 像素表示:0
  • (0028,0106) 最小图像像素值:1
  • (0028,0107) 最大图像像素值:1060
  • (0028,1050) 窗口中心:474
  • (0028,1051) 窗口宽度:1000
  • (0028,1055) 窗口中心和宽度说明:Algo1

当我将窗口/中心值应用于数据的实际像素值时,其中许多是白色的。我迭代像素值,然后我发现许多像素值(大于 80%)超出了最大图像像素值。其中许多超过了最大的 5 倍!这使我得到的图像接近完全白色。奇怪的是,我不知道为什么当我将像素值除以 256 时,结果图像接近我期望的图像。我不明白为什么这是真的。

也许很高兴看到其他未知属性:

  • (0019,1009) 未知:1.0
  • (0019,100b) 未知:245
  • (0019,1016) 未知:25.53

为什么这发生在我的图像上?

4

2 回答 2

2

你能验证你只读取每个像素的 12 位吗?即你已经按照这些思路应用了一些东西

int 值 = ((byte[0] & 0x0f) << 8) | 字节[1];

并不是

整数值 = (字节[0] << 8) | 字节[1];

于 2013-05-20T01:28:53.940 回答
1

我没有看到你的图像数据,但从你所说的我认为这是一个字节序问题。现在我还没有广泛使用 gdcmtk,但是在 gdcm 中我们可以选择设置数据字节序。尝试将字节序设置为小而不是大。如果你能给我提供 dicom 文件,我可以尝试使用 gdcm 读取它。

于 2013-05-16T18:52:00.393 回答