Image quality loss when importing?
16 views (last 30 days)
I'm having an issue with importing an image to MatLab.
The image when opened in photos looks like this:
However after running this code:
imagefile = "MRI-brain-tumor-image.png";
I = imread(imagefile);
The figue from MatLab looks like this:
These are the first lines of code in this script, so I must be using imread or imshow wrong, but looking through their descriptions on mathworks I can't find my error.
Thanks in advance!
DGM on 6 Dec 2022
Edited: DGM on 6 Dec 2022
Use the recommended syntax for indexed images.
[inpict map] = imread('MRI-brain-tumor-image.png');
The 'colormap' parameter for imshow() is used for displaying grayscale inputs in pseudocolor using a unform quantization. It might sound similar, but the mapping will not generally be correct if you feed it an arbitrarily quantized image.
% create a linear grayscale ramp which does not span
% the full range of its numeric class
w = 150;
graypict = uint8(repmat(0:w-1,[round(w/2) 1]));
% create a smooth colormap of equal length
map = parula(w);
% demonstrate the difference in mapping behaviors
% each map entry corresponds to the unique values in graypict
% each map entry corresponds to a uniform quantization of the interval [0 255]
While there appears to be a distinction made in the documentation, it's rather unclear in my opinion.
More Answers (1)
Image Analyst on 6 Dec 2022
Good question. The image is an indexed image, not a regular gray scale image. I did this in MATLAB:
fileName = 'MRI-brain-tumor-image.png';
% Read indexed image. It is not grayscale.
[grayImage, cmap] = imread(fileName);
subplot(1, 2, 1);
fontSize = 20;
title('In MATLAB Without colormap', 'FontSize', fontSize)
subplot(1, 2, 2);
imshow(grayImage, 'Colormap', cmap);
title('In MATLAB With colormap', 'FontSize', fontSize)
g = gcf;
g.Name = 'Displayed from MATLAB'
I also brought it up in the Windows Picture viewer.
The Picture Viewer is on the left. The middle image above is just displaying the raw image in MATLAB. However if you ask it to return a colormap, you will see there is a colormap stored with the image, which means that the image is an indexed image, therefore the middle image would not be correct since it did not use the colormap while displaying it. The right image is displayed in MATLAB using the stored colormap, which should give the correct looking image, but it doesn't. And I don't know why. What's really weird is that the Windows picture viewer seems to be able to figure out the correct colormap and use it, but I don't know how.
Do you know how these images were made? Many or most medical images are saved in dicom format. Did this image originate in a dicom format? If so I'd recommend you use that dicom file and the dicomread function.