libjpeg and lossless JPEG



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

JPEG 无损、非分层、一阶预测 (进程 14 [选择值 1]): 无损 JPEG 图像压缩的默认传输语法

据我所知,这种传输语法对应于JPEG-1损失格式。我开始研究libjpeg库,我发现它不支持(?无损 JPEG,如下所述:DICOM 中的 JPEG 无损

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

不支持的 ISO 选项包括: * 分层存储 *无损JPEG * DNL 标记 * 非积分子采样比率

但是,在

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

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

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

让我们先在这里做一些澄清。您应该从著名的JPEG 6b(又名62)版本开始。首先从此处阅读代码。你会发现没有提到你的boolean lossless.libjpeg 6b 是提供两个分支的参考代码库:

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

因此,如果这是您所说的libjpeg,那么是的,它不支持标准中指定的无损模式。无损补丁是由Ken Murchison创建的,您应该仍然可以找到它(例如在这里)。它应该直接应用于libjpeg 6b。如果您不想自己修补库,请快速浏览一下GDCM和/或DCMTK,因为它们都使用libjpeg的便捷副本+著名的无损补丁(感谢DCMTK团队,还有一些进一步的补丁)。

在这一点上,这应该回答你的问题。

有关libjpeg

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

  • https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=612341#131
  • https://lists.debian.org/debian-devel-announce/2014/08/msg00000.html
<小时 />

如果您仍在阅读,我希望您还可以快速浏览另一个库(故意)也称为libjpeg,请在github上看到它。特别是查看README文件(此处)。您会发现,此libjpeg是ITU 81的完整实现(有损,无损,8/12/16位甚至分层都在一个代码中,而无需进行多次编译!

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

  • http://fileformats.archiveteam.org/wiki/Lossless_JPEG_(原文)
  • https://sourceforge.net/projects/jpeg/

从历史上看,libjpeg API结构包括一个用于未来扩展的lossless字段,但IJG的软件从未实现对无损JPEG的支持。 唯一的实现是在 1990 年代后期由 Ken Murchison 开发的针对 jpeg-6b 的不受支持的补丁中。

libjpeg-turbo 3.0 现在完全支持无损 JPEG,具有 8 位、12 位和 16 位数据精度。 提到这个GitHub问题,Ken Murchison的补丁破坏了与jpeg-6b的向后API/ABI兼容性,因此他的代码在合并到libjpeg-turbo之前进行了广泛的修改。 (可在此处找到合并前的修改。

最新更新