icometrix / dicom2nifti

MIT License
339 stars 79 forks source link

ConversionError: Unsupported or missing PlaneOrientationSequence for multiframe CBCT scan #127

Closed ikatechis closed 1 year ago

ikatechis commented 1 year ago

I am trying to read a cbct scan dicom file with the following multi-frame structure.

Dataset.file_meta -------------------------------
(0002, 0000) File Meta Information Group Length  UL: 240
(0002, 0001) File Meta Information Version       OB: b'\x00\x01'
(0002, 0002) Media Storage SOP Class UID         UI: CT Image Storage
(0002, 0003) Media Storage SOP Instance UID      UI: 1.2.826.0.1.3680043.2.1143.3083054729434657293525645010105100921
(0002, 0010) Transfer Syntax UID                 UI: JPEG Lossless, Non-Hierarchical, First-Order Prediction (Process 14 [Selection Value 1])
(0002, 0012) Implementation Class UID            UI: 1.2.826.0.1.3680043.2.1143.107.104.103.115.3.0.5
(0002, 0013) Implementation Version Name         SH: 'GDCM 3.0.5'
(0002, 0016) Source Application Entity Title     AE: 'gdcmanon'
-------------------------------------------------
(0008, 0005) Specific Character Set              CS: 'ISO_IR 100'
(0008, 0008) Image Type                          CS: ['ORIGINAL', 'PRIMARY', 'AXIAL']
(0008, 0016) SOP Class UID                       UI: CT Image Storage
(0008, 0018) SOP Instance UID                    UI: 1.2.826.0.1.3680043.2.1143.3083054729434657293525645010105100921
(0008, 0020) Study Date                          DA: '20190828'
(0008, 0021) Series Date                         DA: '20190828'
(0008, 0023) Content Date                        DA: '20190828'
(0008, 002a) Acquisition DateTime                DT: '20190828120550'
(0008, 0030) Study Time                          TM: '121036'
(0008, 0031) Series Time                         TM: '120550'
(0008, 0033) Content Time                        TM: '120550'
(0008, 0050) Accession Number                    SH: ''
(0008, 0060) Modality                            CS: 'CT'
(0008, 0070) Manufacturer                        LO: 'Sirona'
(0008, 0080) Institution Name                    LO: ''
(0008, 1010) Station Name                        SH: ''
(0008, 1030) Study Description                   LO: ''
(0008, 1090) Manufacturer's Model Name           LO: 'XG3D'
(0010, 0010) Patient's Name                      PN: ''
(0010, 0020) Patient ID                          LO: ''
(0010, 0030) Patient's Birth Date                DA: ''
(0010, 0032) Patient's Birth Time                TM: ''
(0010, 0040) Patient's Sex                       CS: ''
(0010, 1000) Other Patient IDs                   LO: ''
(0012, 0062) Patient Identity Removed            CS: 'YES'
(0012, 0063) De-identification Method            LO: 'BASIC APPLICATION LEVEL CONFIDENTIALITY PROFILE'
(0018, 0050) Slice Thickness                     DS: '0.16'
(0018, 0060) KVP                                 DS: '85.0'
(0018, 1020) Software Versions                   LO: 'SIDICOM RM 3.6'
(0018, 1150) Exposure Time                       IS: '14179'
(0018, 1151) X-Ray Tube Current                  IS: '7'
(0018, 115e) Image and Fluoroscopy Area Dose Pro DS: '8.06'
(0018, 5100) Patient Position                    CS: 'HFS'
(0020, 000d) Study Instance UID                  UI: 1.2.826.0.1.3680043.2.1143.864642127989210488809346509255086530
(0020, 000e) Series Instance UID                 UI: 1.2.826.0.1.3680043.2.1143.6720147829949193632547509159324587631
(0020, 0010) Study ID                            SH: ''
(0020, 0011) Series Number                       IS: '100'
(0020, 0012) Acquisition Number                  IS: None
(0020, 0052) Frame of Reference UID              UI: 1.2.826.0.1.3680043.2.1143.6720147829949193632547509159324587631
(0020, 1040) Position Reference Indicator        LO: ''
(0020, 4000) Image Comments                      LT: ''
(0028, 0002) Samples per Pixel                   US: 1
(0028, 0004) Photometric Interpretation          CS: 'MONOCHROME2'
(0028, 0008) Number of Frames                    IS: '512'
(0028, 0010) Rows                                US: 512
(0028, 0011) Columns                             US: 512
(0028, 0030) Pixel Spacing                       DS: [0.16, 0.16]
(0028, 0100) Bits Allocated                      US: 16
(0028, 0101) Bits Stored                         US: 12
(0028, 0102) High Bit                            US: 11
(0028, 0103) Pixel Representation                US: 0
(0028, 1050) Window Center                       DS: '1024.0'
(0028, 1051) Window Width                        DS: '4096.0'
(0028, 1052) Rescale Intercept                   DS: '-1024.0'
(0028, 1053) Rescale Slope                       DS: '1.0'
(0400, 0500)  Encrypted Attributes Sequence  1 item(s) ---- 
   (0400, 0510) Encrypted Content Transfer Syntax U UI: Explicit VR Little Endian
   (0400, 0520) Encrypted Content                   OB: Array of 1008 elements
   ---------
(5200, 9230)  Per-frame Functional Groups Sequence  512 item(s) ---- 
   (0020, 0032) Image Position (Patient)            DS: [-40.960000, -56.560971, 37.160904]
   (0020, 0037) Image Orientation (Patient)         DS: [1, 0, 0, 0, 1, 0]
   ---------
   (0020, 0032) Image Position (Patient)            DS: [-40.960000, -56.560971, 37.000904]
   (0020, 0037) Image Orientation (Patient)         DS: [1, 0, 0, 0, 1, 0]
   ---------
   (0020, 0032) Image Position (Patient)            DS: [-40.960000, -56.560971, 36.840904]
   (0020, 0037) Image Orientation (Patient)         DS: [1, 0, 0, 0, 1, 0]
   ---------
   (0020, 0032) Image Position (Patient)            DS: [-40.960000, -56.560971, 36.680904]
   (0020, 0037) Image Orientation (Patient)         DS: [1, 0, 0, 0, 1, 0]
   ---------

The PlaneOrientationSequence is missing but the ImageOrientationPatient property is there. Is there a way to support the conversion of this dicom structure?

abrys commented 1 year ago

Dear Iason,

We should be able to support this quite easily, however there is one condition. Due to the fact that we (icometrix) include dicom2nifti in our clinical products we need proper testing etc. If you would be able to share one example of this data with me (through email or so) this can be used to create a test dataset (fully anonimized, including random pixel data). Can also be a publicly available dataset.

Kind regards, Arne

ikatechis commented 1 year ago

Hi Arne Brys,

Thank you for your response. I attach two anonymized scans as examples through google drive. Let me know if you have trouble opening them.

Best regards, Iason

On Tue, Dec 20, 2022 at 8:04 PM Arne Brys @.***> wrote:

Dear Iason,

We should be able to support this quite easily, however there is one condition. Due to the fact that we (icometrix) include dicom2nifti in our clinical products we need proper testing etc. If you would be able to share one example of this data with me (through email or so) this can be used to create a test dataset (fully anonimized, including random pixel data). Can also be a publicly available dataset.

Kind regards, Arne Brys

— Reply to this email directly, view it on GitHub https://github.com/icometrix/dicom2nifti/issues/127#issuecomment-1359924098, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEH5OSQ4X2XJ44XHSDM32YLWOHYKVANCNFSM6AAAAAATEMTF5M . You are receiving this because you authored the thread.Message ID: @.***>

abrys commented 1 year ago

Dear Iason,

I just requested access to the file. Once I receive it I can take a further look and push a small release to fix this issue.

Kind regards, Arne

ikatechis commented 1 year ago

Hi Arne,

Could you please request access for this one? Sorry for the inconvenience

ikatechis commented 1 year ago

I think you should have access now. Thank you very much for your interest!

abrys commented 1 year ago

The download worked. I will try to push out a release with a fix soon.

abrys commented 1 year ago

The sirona "multiframe" dicom file seems to take a quite liberal interpretation for multiframe dicom headers. I was however able to make it work.

abrys commented 1 year ago

Fix will be available starting release 2.4.7 (hopefully still today)

abrys commented 1 year ago

Release pushed out to pypi and conda

abrys commented 1 year ago

Iason,

Thanks for sharing the data and making this changes possible.

Kind regards, Arne

ikatechis commented 1 year ago

Hi Arne,

You are amazing! Thank you for the super quick update!

All the best, Iason