libjpeg 和无损 JPEG

libjpeg and lossless JPEG

我有一个关于 DICOM 标准和 libjpeg 库的问题。 在 DICOM 标准中,除其他外,还有传输语法:

JPEG Lossless, Nonhierarchical, First- Order Prediction (Processes 14 [Selection Value 1]): Default Transfer Syntax for Lossless JPEG Image Compression

据我所知,此传输语法对应于 JPEG-1 Lossles 格式。 我开始研究 libjpeg 库,发现它不支持(?)无损 JPEG,如下所述:JPEG Lossless in DICOM

此外,在 libjpeg 文档中有一部分说:

Unsupported ISO options include: * Hierarchical storage * Lossless JPEG * DNL marker * Nonintegral subsampling ratios

然而,在库代码中,在压缩参数结构jpeg_compress_struct中有一个字段:

boolean lossless;       /* TRUE=lossless encoding, FALSE=lossy */

一切都是什么意思?我真的很困惑。谁能描述图书馆支持哪些 JPEG 标准?另外,如何设置压缩参数才能兼容DICOM JPEG Lossless标准?

让我们先在这里做一些说明。您应该从著名的 JPEG 6b(又名 62)版本开始。从阅读 here 中的代码开始。您会发现没有提及您的 boolean lossless。 libjpeg 6b 是服务于两个分支的参考代码库:

  • Guido Vollbeding(IJG 维护者):libjpeg 7 及更高版本,具有著名的 SmartScale 扩展
  • dcommander libjpeg-turbo,特别是阅读来自 here 的评论。

因此,如果这就是您所说的 libjpeg,那么是的,它不支持标准中指定的无损模式。无损补丁由 Ken Murchison 创建,您应该仍然可以找到它(例如 here). It should apply directly over libjpeg 6b. If you do not want to patch the lib yourself, have a quick look at GDCM and or DCMTK,因为它们都使用 libjpeg 的方便副本 + 著名的无损补丁(还有一些进一步的补丁,感谢DCMTK 团队)。

此时这应该可以回答您的问题。

有关 libjpeg (IJG) 和 libjpeg-turbo 信息的更多详细信息,我建议您阅读以下信息:


如果您仍在阅读,我建议您也快速浏览一下另一个库(有意地)也称为 libjpeg,请在此处查看 github. In particular go over the README file (here)。你会发现这个 libjpeg 是 ITU 81 的完整实现(有损、无损、8/12/16 位甚至分层都在一个代码中,无需进行多次编译!)。

为了完整起见,我发现以下链接非常有用: