Using imwrite() to create a .bmp file with custom colormap
20 次查看(过去 30 天)
显示 更早的评论
Hailey Trier
2016-12-24
评论: Dayangku Nur Faizah Pengiran Mohamad
2021-11-16
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 个评论
采纳的回答
Walter Roberson
2016-12-24
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,...)
更多回答(1 个)
Image Analyst
2016-12-25
编辑:Image Analyst
2016-12-25
You can convert your image to RGB with ind2rgb():
rgbImage = ind2rgb(myImage, myMap);
imwrite(rgbImage, filename);
7 个评论
Image Analyst
2016-12-26
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
2021-11-16
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');
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Color and Styling 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!