jpeg - libjpeg 和无损 JPEG

标签 jpeg dicom libjpeg

我有一个关于 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 )。它应该直接应用于 libjpeg 6b。如果您不想自己修补 lib,请快速查看 GDCM和或DCMTK ,因为他们都使用 libjpeg 的方便副本 + 著名的无损补丁(还有一些补丁,感谢 DCMTK 团队)。

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

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


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

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

关于jpeg - libjpeg 和无损 JPEG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38391049/

相关文章:

c++ - 使用 GDI+ 创建时,两个具有相同尺寸的 JPEG 图像是否具有相同的标题?

c - 使用 libJPEG 访问 DCT 系数和量化值

c++ - 将 YCCK jpeg 转换为 RGB

c++ - 我如何在 libjpeg-turbo 中使用 jpeg_mem_src、jpeg_mem_dest?

Python:我想做一个连续命名文件的截图脚本

javascript - DCMTK dcm2json 会为损坏的 DS 或 IS 值生成无效的 JSON

dicom - OFFIS DICOM - dcmdump v3.6.0 - (0002,0010) 传输语法 UID

r - jpeg R 包安装在非标准位置找不到 jpeglib.h

compression - jpeg 压缩率