对于不知道DICOM文件是什么的人来说,它是保存有关患者的医学影像数据的文件。它包含患者数据和一些像素数据。您只需要知道像素数据在同一个文件中,但与患者其余数据分开。将JPEG压缩像素数据转换为原始像素数据
我做了一个程序,可以在DICOM文件中读取原始像素数据。但是,像素数据通常使用JPEG压缩进行压缩。下面是我使用以便知道像素压缩的方法字典:
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压缩算法压缩,我想解压缩为RAW像素数据。我甚至不知道从哪里开始!这有点令人沮丧。
有些人想知道我曾尝试: 我试图用LibJpeg.NET,但是当我打电话jpeg_decompress_struct.jpeg_read_header(bool require_image)
功能我得到一个异常:Not a JPEG file: starts with 0xFE 0xFF
我打算在打开它之前使用几天的患者扫描。你的意思是说所有这些语法不能再被使用了吗?因为我处于一个不发达的国家。那会是一个问题@Alessandro? – None
如果您正在某个站点中的某个特定项目上工作,您可以调查哪些是您需要支持的DICOM设备(DICOM设备的一致性声明必须公开)。在这个幸运的例子中,您不仅可以知道传输语法,还可以知道关于映像所分配的位,存储的位,颜色空间等等的所有内容......然而,最常用的传输语法是: –
- 1.2.840.10008.1.2.4.50 extended2(8位),4(12位) - 1.2.840.10008.1.2.4.51无损,非分层141.2.840.10008.1.2.4.57无损,非分层,一阶预测14(选择值1)1.2.840.10008.1.2 .4.70 –