libjpeg和无损JPEG

时间:2016-07-15 08:09:17

标签: jpeg dicom libjpeg

我对DICOM标准和libjpeg库有疑问。 在DICOM标准中,还有转移语法:

  

JPEG无损,非等级,一阶预测   (过程14 [选择值1]):   无损JPEG图像压缩的默认传输语法

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

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

  

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

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

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

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

1 个答案:

答案 0 :(得分:2)

首先让我们做一些澄清。你应该开始的是着名的JPEG 6b(又名62)版本。首先阅读here中的代码。你会发现你的boolean lossless没有提及。 libjpeg 6b是提供两个forks的参考代码库:

  • Guido Vollbeding(IJG维护者):libjpeg 7以及着名的SmartScale扩展名
  • dcommander libjpeg-turbo,特别是从here读取评论。

因此,如果这是您正在讨论的libjpeg,那么是的,它不支持标准中指定的无损模式。无损补丁是由Ken Murchison创建的,你仍然可以找到它(例如here)。它应该直接应用于libjpeg 6b。如果您不想自己修补lib,请快速查看GDCM和/ DCMTK,因为他们都使用了方便的libjpeg副本+着名的无损补丁(还有一些补丁,感谢DCMTK团队。)

此时这应该回答你的问题。

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

如果你还在阅读,我也很高兴你也可以快速浏览另一个名为libjpeg的图书馆(故意),在github看到它。特别是查看README文件(here)。你会发现这个libjpeg是ITU 81的完整实现(有损,无损,8/12/16位甚至是分层的所有单一代码,无需进行多次编译!)。

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