gpt4 book ai didi

jpeg - 在 nema.org DICOM 文件中解码无损 jpeg

转载 作者:行者123 更新时间:2023-12-04 02:38:18 36 4
gpt4 key购买 nike

几年前我写了一个 jpeg 压缩器/解压器,它可以处理无损和有损 jpeg 文件。它运行良好,但并不总是正确解码 DICOM 文件中的 jpeg 流。

我很了解 jpeg,但我对 DICOM 知之甚少。 DICOM 中的无损 jpeg 不可能符合 jpeg ISO 标准。必须有一些修改,要么是硬编码,要么是由 jpeg 文件流之外的 DICOM 文件中某处的参数修改。

我的代码在大多数示例 DICOM 文件 (compsamples_jpeg.tar) 上失败:
ftp://medical.nema.org/MEDICAL/Dicom/DataSets/WG04/

这是我解码此集中第一个无损 jpeg (IMAGES\JPLL\CT1_JPLL) 时发生的情况:

dicom decoded image

左边的图像是从我的代码中呈现的,右边是由在线 DICOM 阅读器呈现的:
www (dot) ofoct (dot) com (slash) viewer (slash) dicom-viewer-online (dot) html

(x)MedCon 是一种开源 DICOM 阅读器,在与我的代码完全相同的像素处失败,因此我不是唯一遇到此问题的人。
xmedcon dot sourceforge dot net

我已经逐字节阅读了这个 jpeg 流,绘制了霍夫曼树并用铅笔和纸计算了霍夫曼代码,我的代码完全按照它应该做的。以下是霍夫曼代码:

  • 0 00
  • 4 01
  • 3 100
  • 5 101
  • 1 1100
  • 2 1101
  • 6 1110
  • 7 11110
  • 8 111110
  • 9 1111110
  • 12 11111110
  • 11 111111110
  • 10 1111111110
  • 15 11111111110

  • 这是 SOS 标记后的压缩数据:
  • ff 00 de 0c 00(ff 之后的 00 是填充字节)
  • 11111111 11011110 00001100 00000000
  • 11111111110 si=15
  • 111100000110000 差异=30768

  • 在线查看器说第一个像素值为-3024。如果这是正确的,第一个差异值应该是 -3024,但事实并非如此。

    在此之后,我的代码正确解码了大约 2/5 的图像,但随后解码了一个非常不准确的 diff 值:
  • d2 a1 fe ff 00 e0(ff 之后的 00 是填充字节)
  • 1010111 10100001 11111110 11111111 11100000
  • 101 si=5
  • 01111 差异=-16
  • 01 si=4
  • 0000 差异=-15
  • 111111110 si=11 ????
  • 11111111111 差异=2047

  • 如果您查看在线查看器解码的图像,该位置的像素强度没有根本变化,因此 si=11 值不可能正确。

    我确信我对 jpeg 有很好的理解,但是 DICOM 中的 jpeg 流似乎并不遵循 jpeg 标准。当 jpeg 流嵌入 DICOM 文件时,对其进行了哪些扩展/更改?

    最佳答案

    DICOM 指定使用 ISO 10918 就像它写的那样,所以在 DICOM 图像中使用无损 JPEG 没有什么神奇之处,除了将解码比特流的始终未签名的输出重新解释为有符号的问题(取决于像素表示)并将重新缩放斜率和截距应用于解码的“存储像素值”,使其成为观看者可能报告的任何“值”(例如,作为 Hounsfield 单位),如 Paolo 所述。或者换句话说,不要依赖观看者报告的“像素值”与解码比特流的直接输出相同。

    作为引用,以下是 DICOM 中一般解决 10918 使用的部分:

    http://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_8.2.html#sect_8.2.1
    http://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_A.4.html#sect_A.4.1

    DICOM 编码器可能会将单独的压缩帧拆分为单独的片段,就像本示例中故意使用片段来测试解码能力的情况一样。我希望您知道这一点,并且已经负责跨片段边界重新组装压缩位流(即,删除片段之间的固定长度的 Item 标签):

    http://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_A.4.html

    虽然有些编码器可能有问题,但我认为 NEMA 样本数据集中的 IMAGES\JPLL\CT1_JPLL 并非如此,我多年前使用斯坦福 PVRG 编解码器创建了该数据集。

    我自己的解码器(最小的)在 http://www.dclunie.com/pixelmed/software/codec/没有问题。源码是可用的,所以如果你想在打开一些调试信息的情况下重新编译它以跟踪每个解码值、预测器输入值、在每行开头重新启动等,以与你自己的逻辑进行比较,请随意.

    最后,由于 JPEG 无损在 DICOM 之外很少使用,您可能会发现很难获得其他样本进行测试。想到的一个这样的来源是 USF 数字化乳房 X 线摄影收藏(医疗,但不是 DICOM),位于 http://marathon.csee.usf.edu/Mammography/Database.html .

    大卫

    附注。我确实在 https://sourceforge.net/projects/xmedcon/ 上检查过 XMedCon 正在使用哪种编解码器它似乎使用了康奈尔无损代码的一些副本;所以它可能容易受到 BitBank 提到的帖子( https://groups.google.com/forum/#!topic/comp.protocols.dicom/Yl5GkZ8ggOE )中描述的相同错误或其他一些错误的影响。我没有试图破译源代码来查看。

    关于jpeg - 在 nema.org DICOM 文件中解码无损 jpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43948479/

    36 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com