/ / JPEG पिक्सेल डेटा को रॉ पिक्सेल डेटा - c #, कम्प्रेशन, jpeg, dicom, libjpeg से संपीड़ित करता है

जेपीईजी संपीड़ित पिक्सेल डेटा कच्चे पिक्सेल डेटा - सी #, संपीड़न, जेपीईजी, डिकॉम, libjpeg

जो लोग नहीं जानते, उनके लिए DICOM फ़ाइल क्या हैयह एक फाइल है जो मरीजों के बारे में मेडिकल इमेजिंग डेटा रखती है। यह रोगी का डेटा और कुछ पिक्सेल डेटा रखता है। आपको बस इतना पता होना चाहिए कि पिक्सेल डेटा एक ही फ़ाइल में है, लेकिन रोगी के बाकी डेटा से अलग है।

मैंने एक प्रोग्राम बनाया जिसमें RAW पिक्सेल डेटा पढ़ा जा सकता है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 अलग-अलग प्रकार हैं, जिन्हें मैं डिकंपप्रेस करना चाहता हूं (सभी जिनकी 1.2.840.10008.1.2.4.xx की कुंजी है)। संक्षेप में, मेरे पास कुछ पिक्सेल डेटा हैं (एक के रूप में) MemoryStream) एक जेपीईजी संपीड़न एल्गोरिथ्म का उपयोग करके संपीड़ित करना जो मैं रॉ पिक्सेल डेटा के लिए डिकम्प्रेस करना चाहता हूं। मैं यह भी नहीं जानता कि कहाँ से शुरू किया जाए!

कुछ लोग जानना चाहेंगे कि मैंने क्या प्रयास किया है: मैंने LibJpeg.NET का उपयोग करने की कोशिश की, लेकिन जब मैं कॉल करता हूं jpeg_decompress_struct.jpeg_read_header(bool require_image) फ़ंक्शन मुझे एक अपवाद मिलता है: Not a JPEG file: starts with 0xFE 0xFF

उत्तर:

उत्तर № 1 के लिए 1

DICOM लगभग सभी का समर्थन करता है आईटीयू 81 मानक, जबकि प्रसिद्ध libjpeg (अपने सामान्य द्विआधारी वितरण [*]) में केवल 8 बिट्स हाफ़मैन और अनुक्रमिक का समर्थन है।

आपको एक और जेपीईजी पुस्तकालय का उपयोग करने की आवश्यकता है जो कम से कम समर्थन करता है:

  • 8/12 बिट्स हफ़मैन और अनुक्रमिक
  • दोषरहित 16बिट्स

सन्दर्भ के लिए:

[*] यदि आप स्रोत कोड डाउनलोड करते हैं, तो आप "१२ बिट्स हफ़मैन / अनुक्रमिक बायनेरिज़ को संकलित करने में सक्षम होंगे।


संपादित करें: वास्तव में आपके प्रश्न को फिर से पढ़ते हुए, मुझे पता है कि आप फ्रैगमेंट से बिल्कुल भी नहीं निपट रहे हैं, इसलिए प्रसिद्ध 0xFE 0xFF त्रुटि संदेश। आपको DICOM मानक पढ़ना चाहिए, क्योंकि यह आता है तुच्छ उदाहरण.


जवाब के लिए 0 № 2

अधिकांश ट्रांसफ़र सिंटैक्स, जो सूचीबद्ध हैं, सेवानिवृत्त हैं, इसलिए DICOM मानक doesn "t उस तरह के संपीड़न को एक वैध के रूप में जानता है।

  • 1.2.840.10008.1.2.4.52 सेवानिवृत्त
  • 1.2.840.10008.1.2.4.53 सेवानिवृत्त
  • 1.2.840.10008.1.2.4.5.54 सेवानिवृत्त
  • 1.2.840.10008.1.2.4.5.5 सेवानिवृत्त
  • 1.2.840.10008.1.2.4.5.56 सेवानिवृत्त
  • 1.2.840.10008.1.2.4.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.4 सेवानिवृत्त
  • 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 अनुरूपता वक्तव्य के साथ, जहां यह घोषित किया जाता है, अन्य बातों के अलावा, स्थानांतरण sysntax समर्थन। आपको सभी DICOM Transfer Syntax को सपोर्ट करने की आवश्यकता नहीं है, लेकिन सिर्फ आपने ही अपने अनुरूप बयान में घोषणा की है। उदाहरण के लिए सभी DICOM डिवाइस Jpeg2000, या Jpeg LS का समर्थन नहीं करते हैं।