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++ - 我如何在 libjpeg-turbo 中使用 jpeg_mem_src、jpeg_mem_dest?

android - 正确的 DICOM JPEG(RGB) 像素处理逻辑以应用窗口宽度和级别过滤器

c++ - jpeg_write_scanlines 和 glTexImage2D 线程安全。为什么这不会崩溃?

javascript - 检测是否正确加载了 jpg 图像

c# - 从 dicom 组和元素编号中获取 ClearCanvas DicomTag

image - 如何正确打开/解码超过 65500 * 65500 像素的 jpeg 图像?

go - 将 mozjpeg 与其 cjpeg 一起使用比将其用作库具有更高的质量

security - 内容未知的图片: Dangerous for a browser?

python - 从 numpy 数组创建 pydicom 文件

c# - 将 jpg 图像作为 jpg 图像添加到 DICOM 文件