【问题标题】:Errors while opening dicom files in R在 R 中打开 dicom 文件时出错
【发布时间】:2014-09-06 15:13:13
【问题描述】:

我正在尝试使用以下代码在 R 中打开 dicom 文件:

library(oro.dicom)
dcmobject <- readDICOMFile(filename)

有些文件可以正常打开,我可以显示它们。但是,有些文件会给出不同类型的错误:

第一个错误:对于某些人,我得到了错误:

Error in file(con, "rb") : cannot open the connection

第二个错误:在其他情况下,dicom 文件出现以下错误:http://www.barre.nom.fr/medical/samples/files/OT-MONO2-8-hip.gz

Error in readDICOMFile(filename) : DICM != DICM

第三个错误:此文件给出以下错误:http://www.barre.nom.fr/medical/samples/files/CT-MONO2-16-chest.gz

Error in parsePixelData(fraw[(132 + dcm$data.seek + 1):fsize], hdr, endian,  : 
  Number of bytes in PixelData not specified

第四个错误:一个 dicom 文件给出以下错误:

Error in rawToChar(fraw[129:132]) : embedded nul in string: '\0\0\b'

我怎样才能摆脱这些错误并在 R 中显示这些图像?

编辑:

此示例文件给出错误“在字符串中嵌入 nul...”: http://www.barre.nom.fr/medical/samples/files/CT-MONO2-12-lomb-an2.gz

> jj = readDICOMFile( "CT-MONO2-12-lomb-an2.dcm" )
Error in rawToChar(fraw[129:132]) : embedded nul in string: '3\0\020'

【问题讨论】:

  • 我已经下载了两个 gzip 文件(我假设是 DICOM),很可能会在周末查看它们。
  • 很高兴收到 oro.dicom 开发者的来信。这是一个很棒的软件包,但可能存在一些问题。

标签: r dicom


【解决方案1】:

此工单中突出显示了四个不同的错误:

  1. Error in file(con, "rb") : cannot open the connection

这不是 oro.dicom 的问题,只是文件路径和/或名称指定错误。

  1. Error in readDICOMFile(filename) : DICM != DICM

该文件不是有效的 DICOM 文件。也就是说,DICOM 标准第 10 部分中的第 7.1 节(可在http://dicom.nema.org 获得)指定应该有 (a) 长度为 128 字节的文件前导和 (b) 开头的四字节 DICOM 前缀“DICM” DICOM 文件。文件 OT-MONO2-8-hip 不遵循此标准。可以使用debug=TRUE 输入参数进一步调查此问题

> dcm <- readDICOMFile("OT-MONO2-8-hip.dcm", debug=TRUE)
# First 128 bytes of DICOM header =
  [1] 08 00 00 00 04 00 00 00 b0 00 00 00 08 00 08 00 2e 00 00 00 4f 52 49 47 49 4e 41 4c 5c 53 45
 [32] 43 4f 4e 44 41 52 59 5c 4f 54 48 45 52 5c 41 52 43 5c 44 49 43 4f 4d 5c 56 41 4c 49 44 41 54
 [63] 49 4f 4e 20 08 00 16 00 1a 00 00 00 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34
 [94] 2e 31 2e 31 2e 37 00 08 00 18 00 1a 00 00 00 31 2e 33 2e 34 36 2e 36 37 30 35 38 39 2e 31 37
[125] 2e 31 2e 37
Error in readDICOMFile("OT-MONO2-8-hip.dcm", debug = TRUE) : DICM != DICM

很明显,前 128 个字节包含信息。现在可以使用参数skipFirst128=FALSEDICM=FALSE 从文件开头开始读取信息

dcm <- readDICOMFile("OT-MONO2-8-hip.dcm", skipFirst128=FALSE, DICM=FALSE)
image(t(dcm$img), col=grey(0:64/64), axes=FALSE, xlab="", ylab="")

    3.
Error in parsePixelData(fraw[(132 + dcm$data.seek + 1):fsize], hdr, endian,  : 
  Number of bytes in PixelData not specified

文件 CT-MONO2-16-chest.dcm 使用 JPEG 压缩进行编码。 R 包 oro.dicom 不支持压缩。

  1. Error in rawToChar(fraw[129:132]) : embedded nul in string: '\0\0\b'

我不得不推测,因为该文件不能用于直接审讯。此问题与将“DICM”字符作为 DICOM 标准的一部分进行检查有关。如果失败,则可以认为该文件不是有效的 DICM 文件。我会考虑在 oro.dicom 的未来版本中让这个错误信息更丰富。

编辑:感谢您提供指向相应文件的链接。该文件采用“ARC-NEMA 2”格式。 R 包 oro.dicom 并未设计用于读取此类文件。我已经修改了代码以改进错误跟踪。

【讨论】:

  • 感谢您澄清大多数问题。给出错误“embedded nul in string..”的示例 dicom 文件的链接已添加到上面有问题的 EDIT 中。
  • 我已更新答案以包含对此特定文件的响应。请注意,该文件不是有效的 DICOM 文件。
  • 感谢您解决所有问题。
  • @bjwhitcher:也请看这篇文章:stackoverflow.com/questions/25819617/…
猜你喜欢
  • 2018-08-28
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 2017-06-16
相关资源
最近更新 更多