【DICOM】解析並生成新的dcm文件以及在上面畫圖所遇到的坑

先用流程圖簡單闡述一下我遇到的實際情形。

Created with Raphaël 2.1.2開始解析dcm文件(非像素部分)是否爲壓縮文件?解壓爲非壓縮的dcm文件修改像素信息(畫圖),修改其他屬性寫入相應的修改,生成新的dcm文件結束yesno
  1. 對已有dcm文件的解析。從而獲取各個屬性Attribute和相應的像素信息PixelData(也屬於Attribute)
  2. 生成新的dcm文件。爲什麼要生成新的dcm文件? 肯定是在已有的dcm文件的基礎上做了一些屬性的修改,然後希望以新的dcm文件來體現這些修改。
  3. 畫圖。 這步屬於在生成新的dcm文件之前的步驟,通過解析dcm文件屬性獲得pixelData然後對pixelData進行修改從而改變dcm圖像外觀。
  4. 解壓 。dcm文件爲了提高傳輸效率往往會進行壓縮,然而醫學圖像的精準要求往往會進行無損壓縮,這裏主要針對的是無損壓縮文件的解壓問題。解壓這步往往是在解析->畫圖->生成新的dcm文件之前。

該文建立在dcm4che-5.10.3的基礎上。


解析屬性(除了像素)

dicom協議以及dcm文件的組成網上有很多文章,這裏就不再贅述。
大體你可以理解爲一個dcm文件除了我們肉眼可見的圖像以外還有很多屬性(Attributes),這些屬性有相應的tag(可以理解爲int類型的key),類型(VR),值(value) 。 像素內容也是作爲一個屬性,存在最後面一個Attribute裏。

        Attributes fmi;
        Attributes dataset;
        DicomInputStream dis = nulltry {
            dis = new DicomInputStream(src);
            fmi = dis.readFileMetaInformation();
            dis.setIncludeBulkData(DicomInputStream.IncludeBulkData.URI);
            fmi.setString(Tag.MediaStorageSOPInstanceUID, VR.UI, instanceUID);
            dataset = dis.readDataset(-1, -1);     
        } catch (Exception e) {
            LOGGER.error("read intput dicom file error!!!", e);
            return false;
        }finally {
            SafeClose.close(dis);
        }   
        dataset.getValue(Tag.XXX);  // 獲取某個屬性 
        dataset.setValue(相應Tag, 該屬性的vr, value); //存入某屬性

以上建立在dcm4che的jar包基礎上。

屬性有很多種,比較重要的就是 圖像所屬序列的uid,圖像自身的uid。以及傳輸語法 Transfer Syntax UID, 表明了該圖像是以何種形式存儲像素文件的(壓縮與否,怎麼壓縮,顯式VR隱式VR,bigEndian or Little Endian …)

Transfer Syntax UID Transfer Syntax name
1.2.840.10008.1.2 Implicit VR 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

Transfer Syntax UID Transfer Syntax name
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 Baseline (Processes 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 (Processes 3 & 5) Retired
1.2.840.10008.1.2.4.53 JPEG Spectral Selection, Nonhierarchical (Processes 6 & 8) Retired
1.2.840.10008.1.2.4.54 JPEG Spectral Selection, Nonhierarchical (Processes 7 & 9) Retired
1.2.840.10008.1.2.4.55 JPEG Full Progression, Nonhierarchical (Processes 10 & 12) Retired
1.2.840.10008.1.2.4.56 JPEG Full Progression, Nonhierarchical (Processes 11 & 13) Retired
1.2.840.10008.1.2.4.57 JPEG Lossless, Nonhierarchical (Processes 14)
1.2.840.10008.1.2.4.58 JPEG Lossless, Nonhierarchical (Processes 15) Retired
1.2.840.10008.1.2.4.59 JPEG Extended, Hierarchical (Processes 16 & 18) Retired
1.2.840.10008.1.2.4.60 JPEG Extended, Hierarchical (Processes 17 & 19) Retired
1.2.840.10008.1.2.4.61 JPEG Spectral Selection, Hierarchical (Processes 20 & 22) Retired
1.2.840.10008.1.2.4.62 JPEG Spectral Selection, Hierarchical (Processes 21 & 23) Retired
1.2.840.10008.1.2.4.63 JPEG Full Progression, Hierarchical (Processes 24 & 26) Retired
1.2.840.10008.1.2.4.64 JPEG Full Progression, Hierarchical (Processes 25 & 27) Retired
1.2.840.10008.1.2.4.65 JPEG Lossless, Nonhierarchical (Process 28) Retired
1.2.840.10008.1.2.4.66 JPEG Lossless, Nonhierarchical (Process 29) Retired
1.2.840.10008.1.2.4.70 JPEG Lossless, Nonhierarchical, First- Order Prediction
(Processes 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 Multicomponent Image Compression (Lossless Only)
1.2.840.10008.1.2.4.93 JPEG 2000 Part 2 Multicomponent Image Compression

Transfer Syntax UID Transfer Syntax name
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.5 RLE Lossless
1.2.840.10008.1.2.6.1 RFC 2557 MIME Encapsulation

Transfer Syntax UID Transfer Syntax name
1.2.840.10008.1.2.4.100 MPEG2 Main Profile Main Level
1.2.840.10008.1.2.4.102 MPEG-4 AVC/H.264 High Profile / Level 4.1
1.2.840.10008.1.2.4.103 MPEG-4 AVC/H.264 BD-compatible High Profile / Level 4.1

目前該貼實際情況只需要瞭解 ‘1.2.840.10008.1.2’ 默認格式 和 ‘1.2.840.10008.1.2.4.70’ jpeg 無損壓縮格式。

參考:

http://samucs.blogspot.com/2008/09/processing-dicom-images-using-dcm4che-2.html

https://github.com/haraldk/TwelveMonkeys/issues/47

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章