如何正确存储 MOVE 中 dicom 的像素数据?
How can i CSTORE pixel data of dicom from CMOVE properly?
我有 1 个 运行 句柄 C-Move 服务器,2 个 运行 句柄 C-Store 服务器和远程 pacs 服务器 (GEPACS)
当我尝试从远程 pacs 到 C-Store 处理程序的 C-Move 命令时,1 个服务器 (py-netdicom) 正在构建并正确保存文件,而 1 个服务器 (go-netdicom) 没有。
所以在 go-netdicom 中有几个问题。
我修复了可以处理十六进制的代码。 go-netdicom 最初不支持它。
这几乎解决了我的所有问题,但仍然无法正确存储像素数据。
例如,我从远程pacs的原始信号中得到了9117252字节,我自己保存了数据,但实际上它需要18000000字节(出错)。连CT图都短了3倍(得到了大约180000,但需要524288)
我觉得可能是pixel-data的封装问题,但不确定。
有什么提示或帮助吗?
谢谢。
编辑 4:我找到了线索。link here
不知何故,C-STORE 命令有一种传输语法。
这提供了 scp 类型(压缩或未压缩)的数据 scu 获取。
但是我仍然不知道必须更改 go-netdicom 的哪一部分。
我将删除 "python" 标签,因为这与 python 不再相关。
我找到了解决方案。
不知何故,GEPACS 发送了 JPEG 压缩的特定传输语法。
如果 go-netdicom 没有 TransferSyntaxUID,则选择 GEPACS 的第一个传输语法,它用于 JPEG 压缩。
我只是在 transfersyntax 为空时放入 bigendian 和 explicitvr(GEPACS 默认值)。
放置在 AssociateRequest 的第 101 行 contextmanager.go,第 127 行
希望这个结果对某人有所帮助。
谢谢
这里的问题是 go-netdicom 使用 A_ASSOCIATE_RQ 中发送的第一个 PresentationContext(如您在最后一张图片中所见)。所以它接受“2.16.840.1.113709.1.2.2”,这是一种私有传输语法,它不在 DICOM 标准中,所以最后没有人可以管理 C-STORE。
如果你正在阅读这篇文章..也许你没有使用 go-netdicom 但如果错误涉及传输语法“2.16.840.1.113709.1.2.2”,问题可能是相同的,在 Centricity PACs 文档中说: "It is expected that other vendors' applications will ignore all Presentation Context proposed with the GE Private Compress Express Transfer Syntax"
这就是我们应该做的。我在 go-netdicom 中看到了一个 PR 列表,所以我想它没有被维护,所以我将 post 在这里对 go-netdicom 进行更改。我在 contextmanager.go 中进行了此更改,效果非常好:
我有 1 个 运行 句柄 C-Move 服务器,2 个 运行 句柄 C-Store 服务器和远程 pacs 服务器 (GEPACS)
当我尝试从远程 pacs 到 C-Store 处理程序的 C-Move 命令时,1 个服务器 (py-netdicom) 正在构建并正确保存文件,而 1 个服务器 (go-netdicom) 没有。
所以在 go-netdicom 中有几个问题。 我修复了可以处理十六进制的代码。 go-netdicom 最初不支持它。 这几乎解决了我的所有问题,但仍然无法正确存储像素数据。
例如,我从远程pacs的原始信号中得到了9117252字节,我自己保存了数据,但实际上它需要18000000字节(出错)。连CT图都短了3倍(得到了大约180000,但需要524288)
我觉得可能是pixel-data的封装问题,但不确定。
有什么提示或帮助吗?
谢谢。
编辑 4:我找到了线索。link here
不知何故,C-STORE 命令有一种传输语法。 这提供了 scp 类型(压缩或未压缩)的数据 scu 获取。 但是我仍然不知道必须更改 go-netdicom 的哪一部分。 我将删除 "python" 标签,因为这与 python 不再相关。
我找到了解决方案。
不知何故,GEPACS 发送了 JPEG 压缩的特定传输语法。 如果 go-netdicom 没有 TransferSyntaxUID,则选择 GEPACS 的第一个传输语法,它用于 JPEG 压缩。
我只是在 transfersyntax 为空时放入 bigendian 和 explicitvr(GEPACS 默认值)。
放置在 AssociateRequest 的第 101 行 contextmanager.go,第 127 行
希望这个结果对某人有所帮助。
谢谢
这里的问题是 go-netdicom 使用 A_ASSOCIATE_RQ 中发送的第一个 PresentationContext(如您在最后一张图片中所见)。所以它接受“2.16.840.1.113709.1.2.2”,这是一种私有传输语法,它不在 DICOM 标准中,所以最后没有人可以管理 C-STORE。
如果你正在阅读这篇文章..也许你没有使用 go-netdicom 但如果错误涉及传输语法“2.16.840.1.113709.1.2.2”,问题可能是相同的,在 Centricity PACs 文档中说: "It is expected that other vendors' applications will ignore all Presentation Context proposed with the GE Private Compress Express Transfer Syntax"
这就是我们应该做的。我在 go-netdicom 中看到了一个 PR 列表,所以我想它没有被维护,所以我将 post 在这里对 go-netdicom 进行更改。我在 contextmanager.go 中进行了此更改,效果非常好: