首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPEG压缩像素数据到原始像素数据

JPEG压缩像素数据到原始像素数据
EN

Stack Overflow用户
提问于 2016-11-09 03:54:48
回答 3查看 1.3K关注 0票数 1

对于不知道DICOM文件是什么的人来说,它是一个保存有关患者的医学成像数据的文件。它保存患者数据和一些像素数据。您需要知道的是像素数据在同一个文件中,但与患者的其余数据是分开的。

我做了一个程序,可以读取DICOM文件中的原始像素数据。然而,像素数据经常使用JPEG压缩来压缩。下面是我用来了解像素压缩方法的字典:

代码语言:javascript
复制
using System.Collections.Generic;

namespace DICOMViewer.Parsing
{
    public static class TransferSyntaxDictionary
    {
        // DICOM Transfer Syntax Dictionary
        // Reference: DCIOM Standard 2009, Part 5: Data Structures and Encoding

        static private readonly Dictionary<string, string> d = new Dictionary<string, string>
        {
            { "1.2.840.10008.1.2", "Implicit VR Little Endian: Default Transfer Syntax for DICOM" },
            { "1.2.840.10008.1.2.1", "Explicit VR Little Endian" },
            { "1.2.840.10008.1.2.1.99", "Deflated Explicit VR Little Endian" },
            { "1.2.840.10008.1.2.2", "Explicit VR Big Endian" },
            { "1.2.840.10008.1.2.4.50", "JPEG Baseline (Process 1): Default Transfer Syntax for Lossy JPEG 8 Bit Image Compression" },
            { "1.2.840.10008.1.2.4.51", "JPEG Extended (Process 2 & 4): Default Transfer Syntax for Lossy JPEG 12 Bit Image Compression (Process 4 only)" },
            { "1.2.840.10008.1.2.4.52", "JPEG Extended (Process 3 & 5)" },
            { "1.2.840.10008.1.2.4.53", "JPEG Spectral Selection, Non-Hierarchical (Process 6 & 8)" }, 
            { "1.2.840.10008.1.2.4.54", "JPEG Spectral Selection, Non-Hierarchical (Process 7 & 9)" },
            { "1.2.840.10008.1.2.4.55", "JPEG Full Progression, Non-Hierarchical (Process 10 & 12)" },
            { "1.2.840.10008.1.2.4.56", "JPEG Full Progression, Non-Hierarchical (Process 11 & 13)" },
            { "1.2.840.10008.1.2.4.57", "JPEG Lossless, Non-Hierarchical (Process 14)" }, 
            { "1.2.840.10008.1.2.4.58", "JPEG Lossless, Non-Hierarchical (Process 15)" },
            { "1.2.840.10008.1.2.4.59", "JPEG Extended, Hierarchical (Process 16 & 18)" },
            { "1.2.840.10008.1.2.4.60", "JPEG Extended, Hierarchical (Process 17 & 19)" },
            { "1.2.840.10008.1.2.4.61", "JPEG Spectral Selection, Hierarchical (Process 20 & 22)" },
            { "1.2.840.10008.1.2.4.62", "JPEG Spectral Selection, Hierarchical (Process 21 & 23)" },
            { "1.2.840.10008.1.2.4.63", "JPEG Full Progression, Hierarchical (Process 24 & 26)" }, 
            { "1.2.840.10008.1.2.4.64", "JPEG Full Progression, Hierarchical (Process 25 & 27)" },
            { "1.2.840.10008.1.2.4.65", "JPEG Lossless, Hierarchical (Process 28)" },
            { "1.2.840.10008.1.2.4.66", "JPEG Lossless, Hierarchical (Process 29)" },
            { "1.2.840.10008.1.2.4.70", "JPEG Lossless, Non-Hierarchical, First-Order Prediction (Process 14 [Selection Value 1]): Default Transfer Syntax for Lossless JPEG Image Compression" }, 
            { "1.2.840.10008.1.2.4.80", "JPEG-LS Lossless Image Compression" },
            { "1.2.840.10008.1.2.4.81", "JPEG-LS Lossy (Near-Lossless) Image Compression" },
            { "1.2.840.10008.1.2.4.90", "JPEG 2000 Image Compression (Lossless Only)" },
            { "1.2.840.10008.1.2.4.91", "JPEG 2000 Image Compression" },
            { "1.2.840.10008.1.2.4.92", "JPEG 2000 Part 2 Multi-component Image Compression (Lossless Only)" },
            { "1.2.840.10008.1.2.4.93", "JPEG 2000 Part 2 Multi-component Image Compression" },
            { "1.2.840.10008.1.2.4.94", "JPIP Referenced" },
            { "1.2.840.10008.1.2.4.95", "JPIP Referenced Deflate" },
            { "1.2.840.10008.1.2.4.100", "MPEG2 Main Profile @ Main Level" },
            { "1.2.840.10008.1.2.5", "RLE Lossless" },
            { "1.2.840.10008.1.2.6.1", "RFC 2557 MIME encapsulation" }
        };

        static public string GetTransferSyntaxName(string theTransferSyntaxUID)
        {
            return d.ContainsKey(theTransferSyntaxUID) ? d[theTransferSyntaxUID] : "???";
        }
    }
}

如你所见,我想解压26种不同类型的JPEG压缩方法(所有这些方法的关键字都是1.2.840.10008.1.2.4.xx)。总而言之,我有一些像素数据(作为MemoryStream)使用JPEG压缩算法压缩,我想将其解压缩为原始像素数据。我甚至不知道从哪里开始!这有点令人沮丧。

有些人想知道我尝试过什么:我尝试使用LibJpeg.NET,但是当我调用jpeg_decompress_struct.jpeg_read_header(bool require_image)函数时,我得到了一个异常:Not a JPEG file: starts with 0xFE 0xFF

EN

回答 3

Stack Overflow用户

发布于 2016-11-09 14:53:04

DICOM支持几乎所有的ITU 81 standard,而著名的libjpeg (在其常见的二进制发行版*中)只支持8位霍夫曼和顺序。

您需要使用另一个至少支持以下内容的JPEG库:

  • 8/12位霍夫曼和sequential
  • 16bits无损

供参考:

*如果您下载源代码,您将能够编译12位霍夫曼/顺序二进制文件。

编辑:事实上,重新阅读您的问题,我发现您根本没有处理片段,因此出现了著名的0xFE 0xFF错误消息。您应该阅读DICOM标准,因为它附带了trivial examples

票数 2
EN

Stack Overflow用户

发布于 2016-11-09 16:58:46

列出的大多数传输语法都已停用,因此DICOM标准不知道这种压缩是有效的。

  • 1.2.840.10008.1.2.4.52退役
  • 1.2.840.10008.1.2.4.53退役
  • 1.2.840.10008.1.2.4.54退役
  • 1.2.840.10008.1.2.4.55退役
  • 1.2.840.10008.1.2.4.56退役
  • 1.2.840.10008.1.2.4.57退役
  • 1.2.840.10008.1.2.4.58退役
  • 1.2.840.10008.1.2.4.59退役
  • 1.2.840.10008.1.2.4.60退役
  • 1.2.840.10008.1.2.4.61退役
  • 1.2.840.10008.1.2.4.62退役
  • 1.2.840.10008.1.2.4.63退役
  • 1.2.840.10008.1.2.4.64退役
  • 1.2.840.10008.1.2.4.65退役
  • 1.2.840.10008.1.2.4.66退役

所以你不需要支持它。也许你想支持老的图像,但请记住,它们中的许多在过去并没有真正使用过,并且从2006年起就停用了!

此外,每个DICOM设备都必须与DICOM一致性声明相关联,其中声明了传输系统支持等。您不需要支持所有的DICOM传输语法,只需要支持您在一致性声明中声明的语法。例如,并非所有的DICOM设备都支持Jpeg2000或Jpeg LS

票数 0
EN

Stack Overflow用户

发布于 2021-05-27 05:04:48

DICOM压缩图像像素数据不像JPEG文件那样具有标准图像标头。列、行、位像素等像素信息仅在DICOM数据集属性值中直接编码,数据集PixelData属性值包含经过特殊编码的压缩字节流。检查DICOM标准PS3.5附录A-传输语法,特别要注意A.4 http://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_A.4.html

也就是说,我在查找能够解码和编码JPEG无损非分级级别14和预测选择值1(本地JPEG无损压缩的DICOM)的库时也遇到了同样的问题。它可以很容易地从ITU-T.81标准中实现(可以从许多地方下载,它可以追溯到1998年或类似的地方)。只使用DICOM标准指定的标准,我在一周内成功地编写了编码器/解码器,而不是一个而是两个。我只使用查找表,它的工作非常快。因为你有JPEG读/写基础设施,所以我认为一旦你构建了一个下一个就容易多了,因为你只需要为像JPEG-LS这样的JPEG扩展实现MCU编码/解码逻辑。

如果你决定不走这条路,第二个解决方案就是重建丢失的头文件。我决定不这样做,因为大多数库实际上不支持这种压缩(至少在我的经验中是这样),而且实际上支持它的库非常庞大(支持大量其他我们实际上不需要的东西)。但这两条路都通向学习JPEG编码过程的内部。

第三,最后的解决方案是找到一些能够做到这一点的开源项目,我想到目前为止,网上应该有更多的开源项目。

希望这对其他寻找类似答案的人有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40495327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档