I have DICOM files that come from a Philips MR scanner that I cannot seem to open properly using dicomread or dicomreadVolume. I can open other DICOM files from different scanners with no issue. I have attached an example here of a file that will not open. There is image data there, as I can view this file on my PACS system and it has a larger filesize than a typical single slice image. The entire series of ~9 images is apparently included in ths one file, which makes me believe it is an enhanced DICOM file. Most other MR scanners give me one slice per DICOM file and those open with dicomread no problem.
dicomread does not give an error, but gives an empty matrix. isdicom shows true, and dicominfo successfully opens the header. dicomreadVolume does give an error- Input must have more than one image slice.
Is there another way that would be able to open this image data?
Thanks.

5 commentaires

Rik
Rik le 8 Mai 2020
It looks like there is a lot of data in the private tag (2005,1132). By that count there are 12 images stored in this file. It is not clear to me how this data should be reshaped to form a recognizable volume.
Walter Roberson
Walter Roberson le 8 Mai 2020
I checked with several different viewers; they say that there are no images in the file. They can see the headers, but no images.
Marcus Glover
Marcus Glover le 8 Mai 2020
Thanks. On my PACS this series is a stack of 11 images. I get the same issue as Walter- ImageJ or any of my other readers cannot handle this filetype. But my PACS seems to be able to.
I noticed images from the scanner that does not work is multiple 2D images per file with
SOP Class UID = 1.2.840.10008.5.1.4.1.1.66= RAW Data Storage
While files that do work in MATLAB from different scanners are one 2D image per file with:
SOP Class UID = 1.2.840.10008.5.1.4.1.1.4 = MR Image Storage
I have not been able to find any images stored in that file. I did find some hidden data, but nothing you could use to create an image out of. For example,
buffer(native2unicode(typecast(info.Private_2005_1132.Item_4.Private_2005_1144.','uint8'),'utf8'),128).'
29×128 char array
' B �← - d , CGEN_ena_IQT_par � CGEN_ena_bidspec_mode '
' CGEN_adaptive_filt_ecg D CGEN_adaptive_filt_delay Bk$�C��% � CGEN_b1rms_averaging_win'
'dow }-@� � CGEN_high_weight_SAR_factors | CGEN_high_weight_range Z CG'
'EN_sar_alert_Wpkg �C��%C� D 4 CGEN_sar_max_Wpkg >J@8]A_��Bk CGEN_sar_max_legacy_Wpkg '
'c]� � CGEN_sed_limits CGEN_pediatric_age_limit CGEN_hea'
'rt_rate_update_interval � " CGEN_phys_simulation �.n�$Q@�~] � CGEN_simulate_gradient_dist '
' CGEN_phys_use_timestamps CGEN_sim_nr_rr_intervals 3D f CGEN_sim_rr_in'
'terval_arr A;G�Bf�� d 8 CGEN_sim_nr_resp_intervals �k→�� � CGEN_sim_insp_interval_arr d '
' h CGEN_sim_exp_interval_arr d � CGEN_enlarge_range ԬB�K�Cy�&C7 $→ CGEN_rf_idle_time �'
'k→��/Z@��^A� �→ CGEN_gr_idle_time T→ CGEN_hos_idle_time &→ '
' CGEN_force_par_mode 'C�� D CGEN_boost_mode ��]@%�_A̛�B��C� CGEN_disable_flame_checks ݓ�'
'�Z�_ CGEN_rt_simulation � CGEN_pns_model �!D � CGEN_pn'
's_thresholds (�Cy�(C֭!D � CGEN_pns_filter_taus B��a@��`A�� � CGEN_pns_filter_weights Y '
' � CGEN_pns_logging_enabled � CGEN_pns_question_model � CGEN_pns_quest'
'ion_thresholds C��) CGEN_acoustic_safe_level �� �c@ CGEN_cuda_sar_model_used '
' $ CGEN_ena_distortion_par � CGEN_coil_ui_selection_mode $D � CGEN_coil_ui_allow_p'
're_exclusion � CGEN_ext_test_mode ݵ� l CGEN_pns_non_cart_extra_factors � '
' CGEN_cem43_pars ,C�%D � � � � � � � � � � � � �'
' � � � � � 3 � � � � � � � � 3 � L B 8 .'
' $ � � � � � � � � � � � � � � � 4 H \ p � � � L ` t �'
' � � � � � � � � � � � � � � � � � � �'
' � l l l l l l l l � l � � � � l �'
' � � � � l X � � � L � x � � @ r � l �'
' .→ `→ �→ �→ �→ (↵ �↵ �↵ (↵ (↵ (↵ (↵ (↵ (↵ x x x x x x (↵ x (↵ x (↵ x � � �'
' � � � � � � � � � � � < � h h h h h h h h 0 t � � h < � < '
' � h t � 0 � � � h 6 � � n < ↵ � � t B � � �↵ � H �← t'
' � < � h � 0 � � \ � � P � � � � � � � � � '
' � @F\? ?��?��7@ B C C @��L@ A A @��L@ A B @��L'
'@ A �A �@ @@ �? �? �? B 8B 8B↵ף>33�@�G?�Ga> �B �B �B �B �B33�? �? @ D �>��l@ff�?��? '
Oddly, in the same sequence of bytes, some of the text is single byte and some of it is double byte
Walter Roberson
Walter Roberson le 12 Mai 2020
The private dicom dictionary name for the above is info.MRBlobDataObjectArray.Item_4.MRBlobData

Connectez-vous pour commenter.

Réponses (1)

drummer
drummer le 8 Mai 2020

0 votes

If dicomread didn't show any errors, try this after reading them again:
figure
imshow(yourDicom, 'DisplayRange', []);
I did not open your file, so be careful to load a slice where you know there´s anatomy.
Check if your retrieve from your PACS worked, as Walter Robson mentioned there´s no image in your file.
Good luck

7 commentaires

Marcus Glover
Marcus Glover le 8 Mai 2020
Thanks, unfortunately this did not work. dicomread "opens" the file as an empty martix in my workspace, which of course saves as 1kb, so I don't think any minipulation is going to change that back to an image.
The image transfer seems to be fine- MATLAB reciognizes it as DICOM and can correctly read the header.
drummer
drummer le 11 Mai 2020
And did you try opening such study in another DICOM viewer, such as Horos or RadiAnt?
Rik
Rik le 11 Mai 2020
Is your assumption that those programs would be designed to deal with the hidden data? Walter mentioned trying several viewers, so I don't think this is likely.
drummer
drummer le 12 Mai 2020
No.
By doing that, he could be sure that there´s a flaw in the DICOM node/network and his study is corrupted.
And, as expected, it would not be a MATLAB issue.
In another topic, I´m not sure if Walter showed some private header information, but if those are header info, by owning the vendor´s dictionary is possible to show them all.
Rik
Rik le 12 Mai 2020
Marcus attached a zip file with the dicom file inside it, so that is how Walter and I could comment on the contents of the headers.
An external viewer would have to specifically be equiped with the vendor dictionary, which isn't very likely once you are no longer in the PACS. Most hospitals will not have DICOM viewers with vendor dictionaries outside of their PACS. Reading the contents of the tags is not the issue, the issue is how to extract the image information that should be hidden in there. It is unclear what format those tags are in, and thus what could be done to parse the information into something usefull.
Walter Roberson
Walter Roberson le 12 Mai 2020
http://godzilla.kennedykrieger.org/dicomfiles/dicomeread.zip has a philips dictionary with a most (but not all) of the entries used in the file here.
The MATLAB script there to read enhanced images says that this particular image is not enhanced.
I do not find anything using the dictionary that I had not already found and reported above in https://www.mathworks.com/matlabcentral/answers/523943-cannot-open-dicom-file#comment_844097
drummer
drummer le 12 Mai 2020
I´m aware of the issue. That´s why I mentioned 'In another topic'.

Connectez-vous pour commenter.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by