Using imwrite() to create a .bmp file with custom colormap
4 ビュー (過去 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!