Using imwrite() to create a .bmp file with custom colormap
4 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hailey Trier
le 24 Déc 2016
Commenté : Dayangku Nur Faizah Pengiran Mohamad
le 16 Nov 2021
I am trying to use the imwrite() function to create and save a .bmp file using a custom colormap, 'myMap'. The colormap contains values between 0 and 1 and is a variable of type double with size [51 3]. My image matrix is of type double and contains values 0 to 1. When I produce this image with imagesc() it comes out fine:
figure
imagesc(myImage)
axis equal
axis tight
colormap(myMap)
However, when I use imwrite to save it as a .bmp file the image is saved in all one dark grey color:
imwrite(myImage, myMap, 'grid.bmp')
I have tried converting myImage to uint8 format and scaling myMap into [256 3] size, but neither works. What am I doing wrong? Thanks.
0 commentaires
Réponse acceptée
Walter Roberson
le 24 Déc 2016
The colormap for the imwrite must be in the range 0 to 1.
When you imwrite with a colormap the data must be integral. If it is type double or single then 1 is subtracted from it and the result is converted to uint8. In other words the values must already be colormap indices.
You need:
Numcolor = size(myMap, 1);
Imgmin = min(MyImage(:)) ;
Imgmax = max(MyImage(:)) ;
mappedImage = uint8( (MyImage-Imgmin)./(Imgmax-ImgMin).* (Numcolor-1) ) ;
Then imwrite(mappedImage, myMap,...)
Plus de réponses (1)
Image Analyst
le 25 Déc 2016
Modifié(e) : Image Analyst
le 25 Déc 2016
You can convert your image to RGB with ind2rgb():
rgbImage = ind2rgb(myImage, myMap);
imwrite(rgbImage, filename);
7 commentaires
Image Analyst
le 26 Déc 2016
Why do you say it's non-image data when she called the variable "myImage", used imagesc() to display it, and tried to save it with imwrite()? As far as I can guess, it's a floating point (double) image. Anyway, my code also normalizes and converts to integer indices like yours, just using an alternate method.
Dayangku Nur Faizah Pengiran Mohamad
le 16 Nov 2021
Hi. I want ask a question.
How do I save the original image jpg from figure for colormap?
Here my codes:
>> I=imread('M_92_ar_2001743_st01_currentsize_200x200.jpg');
>> imshow(I);
>> imfinfo('M_92_ar_2001743_st01_currentsize_200x200.jpg');
>> I2=I(:,:,1);
>> imshow(I2);
>> map = [0, 0.3, 0
0, 0.4, 0
0, 0.5, 0
0, 0.6, 0
0, 0.8, 0
0, 1.0, 0];
>> imshow(I2);
>> colormap(map);
>> imwrite(I2,map,'cmalignant200.jpg');
Voir également
Catégories
En savoir plus sur Color and Styling dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!