problem with reading MRI image (dicom)

I use dicomread function and then the matrix seems to be ok(includes numbers >0), but when i want to display image using imshow function matlab always displays black background. I didn't have this problem with CT images. Did you have any problems like that?

 Risposta accettata

Hi D C,
It's probably just a display issue. When using imshow, try setting the DisplayRange to autoscale, i.e.
imshow( DICOM_Matrix, 'DisplayRange', []);

2 Commenti

D C
D C il 19 Dic 2012
It works! Thank you! But could you explain why this parameter 'DisplayRange' was needed?
It's not - you can use just [] alone. See my answer below.

Accedi per commentare.

Più risposte (4)

You probably have a uint16 image and are only using a small fraction of the 65535 allowable gray levels. If you don't specify a display range, it will put 0 to 0 on the display, and 65535 to 255 on the display (255 is the most an 8/24/32 bit color display can display). So if your max value is, say, 3000, it will show up as 3000/65535*255 = 12 gray levels and will be very dark - practically invisible. To have it autoscale so that the 3000 will get mapped to 255, use [], like this:
imshow(yourImageArray, []);
This will also work for floating point (single, double) images, which normally will show up as all white because it expects floating point images to be in the range 0-1. Do this and tell me what it says:
whos yourImageArray
max(yourImageArray(:)) % Don't use a semicolon
min(yourImageArray(:))

4 Commenti

D C
D C il 19 Dic 2012
Thank you very much. So if it's just a display issue i should not worry that it can influence on fusion/comparing CT and MRI images? Or should I unify ranges in CT and MRI? The fact that CT images were able to display without specify certain display range makes me wonder
Run those 3 lines of code to see why your CT image and MRI image are different. How they are displayed has no relation to what you do with the image arrays - it's completely separate and independent. You don't even need to display them if you don't want to.
D C
D C il 19 Dic 2012
Modificato: D C il 19 Dic 2012
MRI has a range 0-50 and CT has a range -2260 to 2467, so I guess I'm unable in this case to compare/fuse images?
Why not? Why can't you just scale them with mat2gray()?

Accedi per commentare.

D C
D C il 20 Dic 2012

0 voti

I meant I have to convert one of them. Thank you for all your help! That was pretty useful!
Wes
Wes il 9 Apr 2013

0 voti

Hi there,
It seems like I have a similar problem with reading DICOMs. I have stored T2* maps in DICOM files (it is a long scan, so I have about 240 time points of each map). Matlab reads it in such a strange way, windowing however it's pleased ;-) For me, the important bit is to retain the actual voxel value when I read in images, so absolutely no scaling can be done by Matlab. Any idea how to achieve that?
Thanks!
abdalla gad
abdalla gad il 24 Giu 2015

0 voti

hi.. plz i want to have code for read 3d mri dicom files

Richiesto:

D C
il 19 Dic 2012

Risposto:

il 24 Giu 2015

Community Treasure Hunt

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

Start Hunting!

Translated by