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 信息的更多详细信息,我建议您阅读以下信息:
- https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=612341#131
- https://lists.debian.org/debian-devel-announce/2014/08/msg00000.html
如果您仍在阅读,我建议您也快速浏览一下另一个库(有意地)也称为 libjpeg
,请在此处查看 github. In particular go over the README
file (here)。你会发现这个 libjpeg
是 ITU 81 的完整实现(有损、无损、8/12/16 位甚至分层都在一个代码中,无需进行多次编译!)。
为了完整起见,我发现以下链接非常有用:
我有一个关于 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 信息的更多详细信息,我建议您阅读以下信息:
- https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=612341#131
- https://lists.debian.org/debian-devel-announce/2014/08/msg00000.html
如果您仍在阅读,我建议您也快速浏览一下另一个库(有意地)也称为 libjpeg
,请在此处查看 github. In particular go over the README
file (here)。你会发现这个 libjpeg
是 ITU 81 的完整实现(有损、无损、8/12/16 位甚至分层都在一个代码中,无需进行多次编译!)。
为了完整起见,我发现以下链接非常有用: